ZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjYwYTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlXyouemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMzI3MGQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZmZjNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDk4NTAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgVGVzdHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBXZWIgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAotQXByaWwgMTQsIDIwMTBcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCi1FY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAotdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKLXByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAotICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1Qcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCi1VcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKLXRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKLWdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1cblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLVxuXAotVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAotYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKLXRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAotb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCi10aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKLUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCi1cblwKLVlvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKLVlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAotSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLWluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKLW1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCi1hZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCi1cblwKLSAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCi0gICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCi0gICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKLSAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCi0gICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCi0gICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKLSAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAotICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCi0gICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCi0gICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAotICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAotICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKLSAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKLXJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjk0MTI0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjMuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg0Y2EzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkFwcmlsIDE0LCAyMDEwPC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLQotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgotCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQotICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0KLTx1bD4KLSAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLSAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4KLQotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLSAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLSAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLSAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0KLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0gICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLSAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0gICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLSAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotPC91bD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi0KLTxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQotICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCi0gICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bwotICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQotICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+Ci0gICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgotCi08cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCi0gICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKLSAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCi0gICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+Ci0KLTxvbD4KLSAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5Ci0gICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCi0gICAgICAgcHJvZHVjdC48L2xpPgotICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCi0gICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KLSAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCi0gICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAotICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KLSAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAotICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Ci08L29sPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLQotPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWM5OWQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZV8xLjAuMC5iaW4uZGlzdC56aXAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZmMzI4Ny4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2FmZmM1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNjMGZlYi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFhNTCBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBYTUwgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAotQXByaWwgMTQsIDIwMTBcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCi1FY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAotdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKLXByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAotICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1Qcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCi1VcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKLXRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKLWdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1cblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLVxuXAotVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAotYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKLXRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAotb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCi10aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKLUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCi1cblwKLVlvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKLVlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAotSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKLWluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKLW1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCi1hZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCi1cblwKLSAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCi0gICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCi0gICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKLSAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCi0gICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCi0gICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKLSAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAotICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCi0gICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCi0gICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAotICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAotICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKLSAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKLXJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGEwNGQ3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjMuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODRjYTMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+QXByaWwgMTQsIDIwMTA8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+Ci0KLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCi0gICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0gICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0gICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPgotCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0gICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0gICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0gICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLSAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLSAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci08L3VsPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLQotPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCi0gICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKLSAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCi0gICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCi0gICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KLSAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+Ci0KLTxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKLSAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQotICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKLSAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KLQotPG9sPgotICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKLSAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKLSAgICAgICBwcm9kdWN0LjwvbGk+Ci0gICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKLSAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgotICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKLSAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0Ci0gICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgotICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCi0gICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KLTwvb2w+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotCi08cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM1NTI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHNfMS4wLjAuamFyCi1qc3Bjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTMzNTBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5YTIyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNTdW4gQXVnIDIzIDIxOjMwOjQ4IEVEVCAyMDA5Ci1jb21waWxlcnMuZi51bnJlc29sdmVkLWZlYXR1cmVzPTEKLWNvbXBpbGVycy5mLnVucmVzb2x2ZWQtcGx1Z2lucz0xCi1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTEKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuZGlzY291cmFnZWQtY2xhc3M9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAuaW50ZXJuYWw9MQotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0wCi1jb21waWxlcnMucC5taXNzaW5nLXZlcnNpb24tZXhwb3J0LXBhY2thZ2U9MgotY29tcGlsZXJzLnAubWlzc2luZy12ZXJzaW9uLWltcG9ydC1wYWNrYWdlPTIKLWNvbXBpbGVycy5wLm1pc3NpbmctdmVyc2lvbi1yZXF1aXJlLWJ1bmRsZT0yCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1pZGVudGlmaWVyPTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy5zLmNyZWF0ZS1kb2NzPWZhbHNlCi1jb21waWxlcnMucy5kb2MtZm9sZGVyPWRvYwotY29tcGlsZXJzLnMub3Blbi10YWdzPTEKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGNiYWQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDoganNwY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LnRlc3RmaWxlcywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudG1vZGVscywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudHR5cGVpZGVudGlmaWVyLmNvbnRlbnRzcGVjaWZpYywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuZG9tLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuc291cmNlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudHJhbnNsYXRpb24sCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnV0aWwsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jc3MuY29yZS50ZXN0cy5zb3VyY2UsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMucmVzdWx0cwotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gY29tLmlibS5pY3UsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2UuamR0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNmJhMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBqc3Bjb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzLwotamFycy5jb21waWxlLm9yZGVyID0ganNwY29yZXRlc3RzLmphcgotc291cmNlLmpzcGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuanNwY29yZXRlc3RzLmphciA9IGJpbi8KLXNyYy5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGVhOGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gSlNQIENvcmUgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOWYyMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuSlNQQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSlNQRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkpTUENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRW5jb2RlZERvY3VtZW50OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLlByZWZlcmVuY2VzOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBKU1AgU291cmNlIGVkaXRvcgotICogcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BDb3JlUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfQotCQljYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5ERUZBVUxUX0VYVEVOU0lPTik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBudWxsOwotCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKG5vZGUsIEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBmYWxzZTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gdHJ1ZTsKLQotCQlTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJaWYgKCEiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpIHsKLQkJCW9yaWdpbmFsVmFsdWUgPSBCb29sZWFuLnZhbHVlT2Yob3JpZ2luYWxTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCQkJZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQl9Ci0JCW5vZGUucHV0Qm9vbGVhbihwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gbm9kZS5nZXRCb29sZWFuKHByZWZLZXksIHRydWUpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2VzIGJ5IG1ha2luZyBzdXJlIGRvY3VtZW50IGNyZWF0ZWQKLQkgKiBmb2xsb3dzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGltaXRlclByZWZlcmVuY2VzKCkgewotCQkvLyBjaGVjayBpZiBjb250ZW50IHR5cGUgcHJlZmVyZW5jZXMgbWF0Y2gKLQkJU3RyaW5nIHByZWZlcnJlZERlbGltaXRlciA9IENvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcy5nZXRQcmVmZXJyZWROZXdMaW5lRGVsaW1pdGVyKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlTdHJpbmcgZ2F0ZXdheURlbGltaXRlciA9IHByZWZzLmdldChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMgYW5kIENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5IHByZWZlcmVuY2VzIGRvIG5vdCBtYXRjaCIsIGdhdGV3YXlEZWxpbWl0ZXIsIHByZWZlcnJlZERlbGltaXRlcik7Ci0KLQkJLy8gc2V0IGEgcGFydGljdWxhciBsaW5lIGRlbGltaXRlcgotCQlwcmVmcy5wdXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuTEYpOwotCi0JCS8vIGNyZWF0ZSBkb2N1bWVudAotCQlKU1BEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgSlNQRG9jdW1lbnRMb2FkZXIoKTsKLQkJSUVuY29kZWREb2N1bWVudCBkb2N1bWVudCA9IGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJU3RyaW5nIGRvY3VtZW50RGVsaW1pdGVyID0gZG9jdW1lbnQuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCi0JCS8vIHZlcmlmeSBkZWxpbWl0ZXIgaW4gZG9jdW1lbnQgbWF0Y2hlcyBwcmVmZXJlbmNlCi0JCWFzc2VydEVxdWFscygiRGVsaW1pdGVyIGluIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHByZWZlcmVuY2UiLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5TVFJJTkdfTEYsIGRvY3VtZW50RGVsaW1pdGVyKTsKLQotCQkvLyByZXR1cm4gdG8gb3JpZ2luYWwgcHJlZmVyZW5jZQotCQlwcmVmcy5yZW1vdmUoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2NhOTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQuRm9ybWF0VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50bW9kZWxzLlRlc3RGaXhlZENNRG9jdW1lbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50bW9kZWxzLlRlc3RUYWdsaWJDTVRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljLlRlc3RDb250ZW50VHlwZUhhbmRsZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljLlRlc3RNb2RlbEhhbmRsZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5kb20uQXR0clZhbHVlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuZG9tLlRlc3RJbXBvcnRlZE5vZGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbC5UZXN0TW9kZWxJbmNsdWRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsUmVsZWFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsV2l0aE5vRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuc291cmNlLkpTUFRva2VuaXplclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uLkpTUEphdmFUcmFuc2xhdG9yQ29yZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uLkpTUFRyYW5zbGF0b3JQZXJzaXN0ZW5jZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb24uSlNQQWN0aW9uVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbi5KU1BCYXRjaFZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb24uSlNQRGlyZWN0aXZlVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbi5KU1BKYXZhVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBKU1BDb3JlVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgSlNQQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSlNQIENvcmUgVGVzdCBTdWl0ZSIpOwotCi0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJYWRkVGVzdChUZXN0Q2VhbnVwRm9ybWF0LnN1aXRlKCkpOwotCQlhZGRUZXN0KE1vZGVsQ2xvbmVTdWl0ZS5zdWl0ZSgpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEhhbmRsZXJzLmNsYXNzLCAiVGVzdE1vZGVsSGFuZGxlcnMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Q29udGVudFR5cGVIYW5kbGVycy5jbGFzcywgIlRlc3RDb250ZW50VHlwZUhhbmRsZXJzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsTWFuYWdlci5jbGFzcywgIlRlc3RNb2RlbE1hbmFnZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGb3JtYXRUZXN0ZXIuY2xhc3MsICJGb3JtYXRUZXN0ZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxSZWxlYXNlLmNsYXNzLCAiTW9kZWwgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxXaXRoTm9GaWxlLmNsYXNzLCAiTW9kZWwgd2l0aCBubyBmaWxlIFRlc3RzIikpOwotCQkvLyB0ZW1wb3JhcmlseSByZW1vdmVkIHNpbmNlIHVuc3RhYmxlLCBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIxMzc1NCAKLQkJLy8gYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RJbmRleC5jbGFzcywgIlRhZ2xpYkluZGV4IFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQVG9rZW5pemVyVGVzdC5jbGFzcywgIlNwZWNpYWwgUGFyc2luZyBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEF0dHJWYWx1ZVRlc3QuY2xhc3MsICJKU1AgQXR0cmlidXRlIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5jbGFzcywgIkNvcmUgVHJhbnNsYXRvciBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEluY2x1ZGVzLmNsYXNzLCAiQ29yZSBGcmFnbWVudCBJbmNsdXNpb24gVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzLCAiUHJlZmVyZW5jZSBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC5jbGFzcywgIlNwZWNpYWwgUGFyc2luZyBUZXN0cyBmb3IgSlNQLUNTUyBjb250ZW50IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVZhbGlkYXRvclRlc3QuY2xhc3MsICJKYXZhIFZhbGlkYXRvciBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RJbXBvcnRlZE5vZGVzLmNsYXNzLCAiSW1wb3J0ZWQgTm9kZXMgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Rml4ZWRDTURvY3VtZW50cy5jbGFzcywgIkZpeGVkIENNRG9jdW1lbnQgQ3JlYXRpb24gVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0VGFnbGliQ01UZXN0cy5jbGFzcywgIkN1c3RvbSBUYWcgTGlicmFyeSBDb250ZW50IE1vZGVsIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQQWN0aW9uVmFsaWRhdG9yVGVzdC5jbGFzcywgIkFjdGlvbiBWYWxpZGF0b3IgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BCYXRjaFZhbGlkYXRvclRlc3QuY2xhc3MsICJCYXRjaCBWYWxpZGF0b3IgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BEaXJlY3RpdmVWYWxpZGF0b3JUZXN0LmNsYXNzLCAiRGlyZWN0aXZlIFZhbGlkYXRvciBUZXN0cyIpKTsKLQkJYWRkVGVzdChKU1BUcmFuc2xhdG9yUGVyc2lzdGVuY2VUZXN0LnN1aXRlKCkpOwotCi0JCWlmICh3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGRkYTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUENvcmVUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEpTUENvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSlNQQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSlNQQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMiKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy9TdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThlYWJmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgUGx1Z2luIGZQbHVnaW4gPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpOwotCXByaXZhdGUgc3RhdGljIEJ1bmRsZSBmQnVuZGxlID0gZlBsdWdpbi5nZXRCdW5kbGUoKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZlBsdWdpbklkID0gZkJ1bmRsZS5nZXRTeW1ib2xpY05hbWUoKTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgZlBsdWdpbklkLCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJZlBsdWdpbi5nZXRMb2coKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBmUGx1Z2luSWQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlmUGx1Z2luLmdldExvZygpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbHVnaW4gZm9yIHRoaXMgbG9nZ2VyIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIGZQbHVnaW4uaXNEZWJ1Z2dpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKGZQbHVnaW5JZCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTWFueVRlc3RJbmRleC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTWFueVRlc3RJbmRleC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2YxODBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL01hbnlUZXN0SW5kZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LlRlc3RJbmRleDsKLQotcHVibGljIGNsYXNzIE1hbnlUZXN0SW5kZXggZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBNYW55VGVzdEluZGV4KCk7Ci0JfQotCi0JcHVibGljIE1hbnlUZXN0SW5kZXgoKSB7Ci0JCXN1cGVyKCJTU0UgSlNQIENvcmUgVGVzdCBTdWl0ZSIpOwotCi0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyNTsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEluZGV4LmNsYXNzLCAiVGFnbGliSW5kZXggVGVzdHMgIiArIChpICsgMSkpKTsKLQkJfQotCi0JCWlmICh3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Nb2RlbENsb25lU3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL01vZGVsQ2xvbmVTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODNjYWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL01vZGVsQ2xvbmVTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBNb2RlbENsb25lU3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBNb2RlbENsb25lU3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgTW9kZWxDbG9uZVN1aXRlKCkgewotCQlzdXBlcigiTW9kZWxDbG9uZVN1aXRlIik7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZS5jbGFzcywgIlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZSIpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9OdWxsSW5wdXRTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTRmODMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1wdWJsaWMgY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDk2ZjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotCi0vKioKLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlByb2plY3RVdGlsIFNpbWlsYXIgUHJvamVjdCBVdGlscwotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLlByb2plY3RVdGlsIFNpbWlsYXIgUHJvamVjdCBVdGlscwotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLlByb2plY3RVdGlsIFNpbWlsYXIgUHJvamVjdCBVdGlscwotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFV0aWwgewotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgY3JlYXRlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHJvb3RFbnRyeSAtIGF2b2lkIHRyYWlsaW5nIHNlcGFyYXRvcnMKLQkgKiBAcGFyYW0gZnVsbFRhcmdldFBhdGgKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgewotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2Uocm9vdEVudHJ5LCBmdWxsVGFyZ2V0UGF0aCk7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCXRyeSB7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKHJ1bm5hYmxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCXN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0Q2VhbnVwRm9ybWF0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0Q2VhbnVwRm9ybWF0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNGRmNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdENlYW51cEZvcm1hdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdC5DbGVhbnVwVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LkZvcm1hdFRlc3RlcjsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENlYW51cEZvcm1hdCBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RDZWFudXBGb3JtYXQoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdENlYW51cEZvcm1hdCgpIHsKLQkJc3VwZXIoIlRlc3RDZWFudXBGb3JtYXQiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ2xlYW51cFRlc3Rlci5jbGFzcywgIkNsZWFudXBUZXN0ZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGb3JtYXRUZXN0ZXIuY2xhc3MsICJGb3JtYXRUZXN0ZXIiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdE1vZGVsTWFuYWdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdE1vZGVsTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjA5YjZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyBiYXNpYyBjcmVhdGlvbiBvZiBJTW9kZWxNYW5hZ2VyIHBsdWdpbiBhbmQgdGhlCi0gKiBNb2RlbE1hbmdlci4KLSAqIAotICogQXBwcm9wcmlhdGUgZm9yIEJWVC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsTWFuYWdlci4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbE1hbmFnZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlhc3NlcnRUcnVlKCJtb2RlbE1hbmFnZXIgbXVzdCBub3QgYmUgbnVsbCIsIG1vZGVsTWFuYWdlciAhPSBudWxsKTsKLQotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi4iICsgZ2V0TmFtZSgpICsgIi50ZXN0LmpzcCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQlhc3NlcnRUcnVlKCJiYXNpYyBKU1AgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPSBudWxsKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb3B5SlNQTW9kZWxGb3JFZGl0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QuanNwIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWxDb3B5ID0gbW9kZWxNYW5hZ2VyLmNvcHlNb2RlbEZvckVkaXQobW9kZWwuZ2V0SWQoKSwgZ2V0TmFtZSgpKyIubmV3SWQiKTsKLQkJCWFzc2VydE5vdE51bGwoImNvcGllZCBKU1AgbW9kZWwgd2FzIG51bGwiLCBtb2RlbENvcHkpOwotCQkJYXNzZXJ0RXF1YWxzKCJNb2RlbEhhbmRsZXJzIGRpZmZlciIsIG1vZGVsLmdldE1vZGVsSGFuZGxlcigpLCBtb2RlbENvcHkuZ2V0TW9kZWxIYW5kbGVyKCkpOwotCQkJYXNzZXJ0RXF1YWxzKCJTdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9uUGFyc2VycyBkaWZmZXIiLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXRQYXJzZXIoKS5nZXRDbGFzcygpLCBtb2RlbENvcHkuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0UGFyc2VyKCkuZ2V0Q2xhc3MoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIlRleHQgZG9jdW1lbnQgY29udGVudHMgZGlmZmVyIiwgbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCksIG1vZGVsQ29weS5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JCX0KLQkJY2F0Y2ggKFJlc291cmNlSW5Vc2UgZSkgewotCQkJZmFpbCgiUmVzb3VyY2UgaW4gdXNlIHJlcG9ydGVkIGZvciAiICsgbW9kZWwuZ2V0SWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROdWxsQXJndW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJRXhjZXB0aW9uIGUgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoKFN0cmluZykgbnVsbCwgbnVsbCwgbnVsbCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCWUgPSBleGNlcHRpb247Ci0JCQlhc3NlcnRUcnVlKCJpbGxlZ2FsIGFyZ3VtZW50IGZhaWxlZCB0byB0aHJvdyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLCBlIGluc3RhbmNlb2YgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTM5ZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbENsb25lLgotCSAqLwotCXB1YmxpYyBUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IGdldFRlc3QoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lKCJ0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxKU1BYTUwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkRG9jdW1lbnRYTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJzdHJ1Y3R1cmVkRG9jdW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgc3RydWN0dXJlZERvY3VtZW50ICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgY2xvbmVkU3RydWN0dXJlZERvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldEVuY29kaW5nTWVtZW50bygpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSkKLQkJCXBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBYTUwgc3RydWN0dXJlZERvY3VtZW50IGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBtb3N0IHVzZWZ1bCB0byBjaGVjayBicmVha3BvaW50cyBhbmQgZGlnIGRlZXAgaW4gb2JqZWN0IAotCSAqIHRvIGNoZWNrIGNsb25lcyB2YWx1ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkRG9jdW1lbnRKU1AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS5qc3AiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJzdHJ1Y3R1cmVkRG9jdW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgc3RydWN0dXJlZERvY3VtZW50ICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgY2xvbmVkU3RydWN0dXJlZERvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldEVuY29kaW5nTWVtZW50bygpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSkKLQkJCXBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBKU1Agc3RydWN0dXJlZERvY3VtZW50IGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBtb3N0IHVzZWZ1bCB0byBjaGVjayBicmVha3BvaW50cyBhbmQgZGlnIGRlZXAgaW4gb2JqZWN0IAotCSAqIHRvIGNoZWNrIGNsb25lcyB2YWx1ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkRG9jdW1lbnRKU1BYTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJU3RyaW5nIHRlc3RDb250ZW50ID0gIjxAISBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC94bWxcIiBAPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkuanNwIiwgdGVzdENvbnRlbnQsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJzdHJ1Y3R1cmVkRG9jdW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgc3RydWN0dXJlZERvY3VtZW50ICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgY2xvbmVkU3RydWN0dXJlZERvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldEVuY29kaW5nTWVtZW50bygpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSkKLQkJCXBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBKU1BYTUwgc3RydWN0dXJlZERvY3VtZW50IGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9DbGVhbnVwVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0NsZWFudXBUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0NTZjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0NsZWFudXBUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy51dGlsLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5IVE1MQ2xlYW51cFByb2Nlc3NvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5IVE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5BYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5jbGVhbnVwLklTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkNsZWFudXBQcm9jZXNzb3JYTUw7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhbnVwVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBQUklOVF9GQUlMRURfRk9STUFUX1RFU1RTID0gZmFsc2U7Ci0JcHJvdGVjdGVkIElNb2RlbE1hbmFnZXIgZk1vZGVsTWFuYWdlciA9IG51bGw7Ci0JcHJvdGVjdGVkIENsZWFudXBQcm9jZXNzb3JYTUwgZkNsZWFudXBQcm9jZXNzb3IgPSBudWxsOwotCXByb3RlY3RlZCBIVE1MQ2xlYW51cFByb2Nlc3NvckltcGwgZkhUTUxDbGVhbnVwUHJvY2Vzc29yID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQotCXB1YmxpYyBDbGVhbnVwVGVzdGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQkvLyBnZXQgbW9kZWwgbWFuYWdlcgotCQlmTW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQkvLyBnZXQgY2xlYW51cCBwcm9jZXNzb3IKLQkJZkNsZWFudXBQcm9jZXNzb3IgPSBuZXcgQ2xlYW51cFByb2Nlc3NvclhNTCgpOwotCi0JCS8vIGdldCBIVE1MIGNsZWFudXAgcHJvY2Vzc29yCi0JCWZIVE1MQ2xlYW51cFByb2Nlc3NvciA9IG5ldyBIVE1MQ2xlYW51cFByb2Nlc3NvckltcGwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImludm9pY2UueG1sIik7Ci0KLQkJLy8gdXNlIGZvciBkZWJ1Z2dpbmcKLQkJLy8gU3RyaW5nIHByZWNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycy54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEluc2VydFRhZ3MoKSB0aHJvd3MgSU9FeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImludm9pY2UueG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQotCQkvLyBjbGVhbnVwCi0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkNsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFncy54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cENvbXByZXNzRW1wdHlFbGVtZW50VGFncygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzbWFsbDIueG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAic21hbGwyLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLW5ld2ZtdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cEhUTUwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiY2xlYW51cC5odG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0VGFnTmFtZUNhc2UoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuVVBQRVIpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0QXR0ck5hbWVDYXNlKEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0KLQkJLy8gY2xlYW51cAotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmSFRNTENsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJjbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBIVE1MdHdpY2UoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbCIpOwotCi0JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZIVE1MQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFRhZ05hbWVDYXNlKEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlVQUEVSKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEF0dHJOYW1lQ2FzZShIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSlNQRW1wdHlUYWdzMSgpIHRocm93cwotCS8vIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyAvLyBnZXQgbW9kZWwKLQkvLyBJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJsb2dpbi5qc3AiKTsKLQkvLwotCS8vIC8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JLy8gSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0KLQkvLyBmSFRNTENsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldFRhZ05hbWVDYXNlKENvbW1vbk1vZGVsUHJlZmVyZW5jZU5hbWVzLlVQUEVSKTsKLQkvLyBjbGVhbnVwUHJlZmVyZW5jZXMuc2V0QXR0ck5hbWVDYXNlKENvbW1vbk1vZGVsUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQkvLyBjbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLQkvLyBjbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKHRydWUpOwotCS8vIGNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXModHJ1ZSk7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKLQkvLyBjbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQkvLwotCS8vIC8vIGNsZWFudXAKLQkvLyAoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpCi0JLy8gZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JLy8gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCS8vICgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikKLQkvLyBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCS8vCi0JLy8gLy8gY29tcGFyZQotCS8vIFN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCS8vIFN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImxvZ2luLmFmdGVyQ2xlYW51cC5qc3AiOwotCS8vIFN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JLy8gY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0JLy8KLQkvLyAvLyByZWxlYXNlIG1vZGVsCi0JLy8gc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCS8vIH0KLQkvLwotCS8vIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSlNQRW1wdHlUYWdzMigpIHRocm93cwotCS8vIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyAvLyBnZXQgbW9kZWwKLQkvLyBJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzdWJzY3JpcHRpb24uanNwIik7Ci0JLy8KLQkvLyAvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotCS8vIElTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9Ci0JLy8gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCS8vIGNsZWFudXBQcmVmZXJlbmNlcy5zZXRUYWdOYW1lQ2FzZShDb21tb25Nb2RlbFByZWZlcmVuY2VOYW1lcy5VUFBFUik7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldEF0dHJOYW1lQ2FzZShDb21tb25Nb2RlbFByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotCS8vIGNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkvLyBjbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotCS8vIGNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0JLy8gY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0JLy8KLQkvLyAvLyBjbGVhbnVwCi0JLy8gKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKQotCS8vIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCS8vIGZIVE1MQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkvLyAoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpCi0JLy8gZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQkvLwotCS8vIC8vIGNvbXBhcmUKLQkvLyBTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkvLyBTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzdWJzY3JpcHRpb24uYWZ0ZXJDbGVhbnVwLmpzcCI7Ci0JLy8gU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkvLyBjb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQkvLwotCS8vIC8vIHJlbGVhc2UgbW9kZWwKLQkvLyBzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JLy8gfQotCi0JcHJvdGVjdGVkIFN0cmluZyByZWFkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBpbnB1dFN0cmluZyA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGZpbGVJbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWZpbGVJbnB1dFN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlTmFtZSk7Ci0KLQkJCWJ5dGVbXSBpbnB1dEJ1ZmZlciA9IG5ldyBieXRlWzIwNDhdOwotCQkJaW5wdXRTdHJpbmcgPSBuZXcgU3RyaW5nKCk7Ci0JCQlpbnQgYnl0ZXNSZWFkID0gLTE7Ci0KLQkJCXdoaWxlICh0cnVlKSB7Ci0JCQkJYnl0ZXNSZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoaW5wdXRCdWZmZXIpOwotCQkJCWlmIChieXRlc1JlYWQgPT0gLTEpCi0JCQkJCWJyZWFrOwotCQkJCVN0cmluZyBidWZmZXJTdHJpbmcgPSBuZXcgU3RyaW5nKGlucHV0QnVmZmVyLCAwLCBieXRlc1JlYWQpOwotCQkJCS8vIGJ1ZmZlclN0cmluZyA9IGJ1ZmZlclN0cmluZy5zdWJzdHJpbmcoMCwgYnl0ZXNSZWFkKTsKLQkJCQlpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLmNvbmNhdChidWZmZXJTdHJpbmcpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGZpbGVJbnB1dFN0cmVhbSAhPSBudWxsKQotCQkJCWZpbGVJbnB1dFN0cmVhbS5jbG9zZSgpOwotCQl9Ci0KLQkJcmV0dXJuIGlucHV0U3RyaW5nOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbChTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlTdHJpbmcgaW5wdXQgPSBnZXRGaWxlKGZpbGVOYW1lKTsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGlucHV0LmdldEJ5dGVzKCJVVEYtOCIpKTsKLQkJCVN0cmluZyBpZCA9IGlucHV0U3RyZWFtLnRvU3RyaW5nKCkuY29uY2F0KGZpbGVOYW1lKTsKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IGZNb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGlkLCBpbnB1dFN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJLy8gc2luY2UgaW4gdGVzdCBjb2RlLCBubyBuZWVkIHRvIGNhdGNoIHRoaXMKLQkJLy8gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJLy8gTG9nZ2VyLmxvZ0V4Y2VwdGlvbihleGNlcHRpb24pOwotCQkvLyB9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQkvLyBob3BlbGVzcwotCQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCQlmYWlsKHMudG9TdHJpbmcoKSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RydWN0dXJlZE1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiByZWFkRmlsZSgidGVzdGZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY29tcGFyZShTdHJpbmcgdGVzdGNhc2VOYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyBjbGVhbmVkKSB7Ci0JCWFzc2VydFRydWUoIkNsZWFuZWQgdXAgZG9jdW1lbnQgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZC5cbkV4cGVjdGVkIENvbnRlbnRzOlxuIiArIGV4cGVjdGVkICsgIlxuQWN0dWFsIENvbnRlbnRzOlxuIiArIGNsZWFuZWQsIGZTdHJpbmdDb21wYXJlVXRpbC5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkLCBjbGVhbmVkKSk7Ci0vLwkJaWYgKGNsZWFuZWQuY29tcGFyZVRvKGV4cGVjdGVkKSAhPSAwKSB7Ci0vLwkJCWlmIChQUklOVF9GQUlMRURfRk9STUFUX1RFU1RTKSB7Ci0vLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLS8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Y2FzZU5hbWUgKyAiIGZhaWxlZCIpOwotLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKGV4cGVjdGVkKTsKLS8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBjbGVhbmVkIGZpbGUgPT09PT09PT09PSIpOwotLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKGNsZWFuZWQpOwotLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotLy8JCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZCwgIlxyIiwgIlxcciIpOwotLy8JCQkJZXhwZWN0ZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGV4cGVjdGVkU3RyaW5nLCAiXG4iLCAiXFxuIik7Ci0vLwkJCQlleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRTdHJpbmcsICJcdCIsICJcXHQiKTsKLS8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZFN0cmluZyk7Ci0vLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gY2xlYW5lZCBmaWxlID09PT09PT09PT0iKTsKLS8vCQkJCVN0cmluZyBjbGVhbmVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShjbGVhbmVkLCAiXHIiLCAiXFxyIik7Ci0vLwkJCQljbGVhbmVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShjbGVhbmVkU3RyaW5nLCAiXG4iLCAiXFxuIik7Ci0vLwkJCQljbGVhbmVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShjbGVhbmVkU3RyaW5nLCAiXHQiLCAiXFx0Iik7Ci0vLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2xlYW5lZFN0cmluZyk7Ci0vLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwotLy8JCQl9Ci0vLwkJCWFzc2VydFRydWUoZmFsc2UpOwotLy8JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0Zvcm1hdFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9Gb3JtYXRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4YTNkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0Zvcm1hdFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5mb3JtYXQuSFRNTEZvcm1hdFByb2Nlc3NvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5BYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5JU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LlN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTDsKLQotcHVibGljIGNsYXNzIEZvcm1hdFRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSSU5UX0ZBSUxFRF9GT1JNQVRfVEVTVFMgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSU1vZGVsTWFuYWdlciBmTW9kZWxNYW5hZ2VyID0gbnVsbDsKLQlwcm90ZWN0ZWQgRm9ybWF0UHJvY2Vzc29yWE1MIGZGb3JtYXRQcm9jZXNzb3IgPSBudWxsOwotCXByb3RlY3RlZCBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCBmSFRNTEZvcm1hdFByb2Nlc3NvciA9IG51bGw7Ci0KLQlwdWJsaWMgRm9ybWF0VGVzdGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JCS8vIGdldCBtb2RlbCBtYW5hZ2VyCi0JCWZNb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCS8vIGdldCBmb3JtYXQgcHJvY2Vzc29yCi0JCWZGb3JtYXRQcm9jZXNzb3IgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0KLQkJLy8gZ2V0IEhUTUwgZm9ybWF0IHByb2Nlc3NvcgotCQlmSFRNTEZvcm1hdFByb2Nlc3NvciA9IG5ldyBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXQyNjE5NjgoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCIyNjE5NjgueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gIjI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFnT3BlbigpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ09wZW4ueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInRhZ09wZW4ueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFnT3BlblRhZ0Nsb3NlKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgidGFnT3BlblRhZ0Nsb3NlLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJ0YWdPcGVuVGFnQ2xvc2UueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFncygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ3MueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInRhZ3MuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEVtcHR5KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiZW1wdHkueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImVtcHR5LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdE9uZVNwYWNlKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgib25lU3BhY2UueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImVtcHR5LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdE9uZUNoYXIoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJvbmVDaGFyLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJvbmVDaGFyLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdFNwYWNlcygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNwYWNlcy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiZW1wdHkueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0Q2hhcnMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJjaGFycy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2hhcnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BhY2VzQW5kQ2hhcnMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzcGFjZXNBbmRDaGFycy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2hhcnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDcyKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BsaXRMaW5lcygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNtYWxsLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoNzIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyU3BsaXRMaW5lc0Zvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCbG9ja0NvbW1lbnRzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiYmxvY2tDb21tZW50cy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiYmxvY2tDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SW5saW5lQ29tbWVudHMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJpbmxpbmVDb21tZW50cy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW5saW5lQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdElubGluZUNvbW1lbnRzU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRycygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImlubGluZUNvbW1lbnRzLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg3Mik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxGb3JtYXQoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJIaXRDb3VudGVySW50cm8uaHRtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZIVE1MRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDcyKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkhUTUxGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmSFRNTEZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkhUTUxGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJIaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCVN0cmluZyBpbnB1dFN0cmluZyA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGZpbGVJbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWZpbGVJbnB1dFN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlTmFtZSk7Ci0KLQkJCWJ5dGVbXSBpbnB1dEJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOwotCQkJaW5wdXRTdHJpbmcgPSBuZXcgU3RyaW5nKCk7Ci0JCQlpbnQgYnl0ZXNSZWFkID0gLTE7Ci0KLQkJCXdoaWxlICh0cnVlKSB7Ci0JCQkJYnl0ZXNSZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoaW5wdXRCdWZmZXIpOwotCQkJCWlmIChieXRlc1JlYWQgPT0gLTEpCi0JCQkJCWJyZWFrOwotCQkJCVN0cmluZyBidWZmZXJTdHJpbmcgPSBuZXcgU3RyaW5nKGlucHV0QnVmZmVyKTsKLQkJCQlidWZmZXJTdHJpbmcgPSBidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIGJ5dGVzUmVhZCk7Ci0JCQkJaW5wdXRTdHJpbmcgPSBpbnB1dFN0cmluZy5jb25jYXQoYnVmZmVyU3RyaW5nKTsKLQkJCX0KLQotCQkJaWYgKGZpbGVJbnB1dFN0cmVhbSAhPSBudWxsKQotCQkJCWZpbGVJbnB1dFN0cmVhbS5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0KLQkJcmV0dXJuIGlucHV0U3RyaW5nOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbChTdHJpbmcgZmlsZU5hbWUpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCVN0cmluZyBpbnB1dCA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQkJaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaW5wdXQuZ2V0Qnl0ZXMoIlVURjgiKSk7Ci0JCQlTdHJpbmcgaWQgPSBpbnB1dFN0cmVhbS50b1N0cmluZygpLmNvbmNhdChmaWxlTmFtZSk7Ci0JCQlzdHJ1Y3R1cmVkTW9kZWwgPSBmTW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChpZCwgaW5wdXRTdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQkJLy8gaG9wZWxlc3MKLQkJCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cnVjdHVyZWRNb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCXJldHVybiByZWFkRmlsZSgidGVzdGZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY29tcGFyZShTdHJpbmcgdGVzdGNhc2VOYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyBmb3JtYXR0ZWQpIHsKLQkJaWYgKGZvcm1hdHRlZC5jb21wYXJlVG8oZXhwZWN0ZWQpICE9IDApIHsKLQkJCWlmIChQUklOVF9GQUlMRURfRk9STUFUX1RFU1RTKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RjYXNlTmFtZSArICIgZmFpbGVkIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGZvcm1hdHRlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVkKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gZXhwZWN0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZCwgIlxyIiwgIlxcciIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWV4cGVjdGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShleHBlY3RlZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleHBlY3RlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGZvcm1hdHRlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTdHJpbmcgZm9ybWF0dGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShmb3JtYXR0ZWQsICJcciIsICJcXHIiKTsKLQkJCQlmb3JtYXR0ZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGZvcm1hdHRlZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWZvcm1hdHRlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZm9ybWF0dGVkU3RyaW5nLCAiXHQiLCAiXFx0Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKLQkJCX0KLQkJCWFzc2VydEVxdWFscyhleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjguYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDgzODgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI+PC90MgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0Mj4KLQkJL3QyPgotCQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQl0Mj4KLQk8L3QyPgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0MjwvdDI+Ci0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90MgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0MjwvdDI+Ci0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90Mj4KLQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI8L3QyPgotCXQzPgotCTwvdDM+Ci08L3RhZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjgueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvMjYxOTY4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk5ODFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI+PC90MgotICAgICAgIDx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0Mj4vdDI+Ci0gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgdDI+PC90Mj4KLSAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyPgotICAgICAgIDx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0MjwvdDIgICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPC90MiAgICAgID4gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPC90MiAgICAgID48dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyICAgICAgPnQzPjwvdDM+Ci08L3RhZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMTMyMDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmFmdGVyRGVmYXVsdEZvcm1hdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5QYWdlIEhpdCBDb3VudGVyIEludHJvZHVjdGlvbjwvVElUTEU+Ci08TElOSyByZWw9IlNUWUxFU0hFRVQiIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvSEVBRD4KLTxCT0RZPgotCTxDRU5URVI+Ci0JCTxGT1JNIG5hbWU9Im15Rm9ybSIgbWV0aG9kPSJwb3N0IgotCQkJYWN0aW9uPSIuLi9Db250cm9sbGVycy9TYW1wbGVDb250cm9sbGVyIj4KLQkJCTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQgY29sc3Bhbj0iMiI+PElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjEiCi0JCQkJCQkJaGVpZ2h0PSIyNSIgYWx0PSIiPgotCQkJCQkJPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREIHJvd3NwYW49IjIiIGFsaWduPSJMRUZUIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjMwMCI+PElNRwotCQkJCQkJCXNyYz0iLi4vaW1hZ2VzL2hpdENvdW50ZXIwMS5naWYiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAwIiBhbHQ9IiI+Ci0JCQkJCQk8L1REPgotCQkJCQkJPFREIGFsaWduPSJMRUZUIiB3aWR0aD0iMzgwIj4KLQkJCQkJCQk8UD4KLQkJCQkJCQkJPEZPTlQgc2l6ZT0iKzEiPjxCPlBhZ2UgSGl0IENvdW50ZXIgU2FtcGxlPC9CPgotCQkJCQkJCQk8L0ZPTlQ+Ci0JCQkJCQkJPC9QPjwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURCBhbGlnbj0iTEVGVCIgdmFsaWduPSJUT1AiPgotCQkJCQkJCTxQPgotCQkJCQkJCQk8Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgc2hvd3MgeW91IGhvdyB0byB1c2UgYSBKYXZhCi0JCQkJCQkJCQlzZXJ2bGV0IHRvIGNvdW50IGhvdyBtYW55IHRpbWVzIGEgcGFnZSB3YXMgdmlzaXRlZC48L0ZPTlQ+Ci0JCQkJCQkJPC9QPgotCQkJCQkJCTxQPgotCQkJCQkJCQk8Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgcmVxdWlyZXMgYSBkYXRhYmFzZSB0byBzdG9yZQotCQkJCQkJCQkJdGhlIGNvdW50ZXIuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IGluc3RhbGxlZCBhbmQgY29uZmlndXJlZAotCQkJCQkJCQkJeW91ciBkYXRhYmFzZSBmb3IgdGhlIFdlYlNwaGVyZSBzYW1wbGVzLCByZWZlciB0byA8QQotCQkJCQkJCQkJaHJlZj0iLi4vQ29uZmlndXJhdGlvbi9EQkNvbmZpZy5odG1sIj5EYXRhYmFzZQotCQkJCQkJCQkJCUNvbmZpZ3VyYXRpb248L0E+IGZvciBpbnN0cnVjdGlvbnMuIDwvRk9OVD4KLQkJCQkJCQk8L1A+Ci0JCQkJCQkJPFA+Ci0JCQkJCQkJCTxGT05UIHNpemU9Ii0xIj48QQotCQkJCQkJCQkJaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5teUZvcm0uc3VibWl0KCkiIHRhcmdldD0iX3NlbGYiPgotCQkJCQkJCQkJCTxCPlJ1biB0aGlzIHNhbXBsZTwvQj4KLQkJCQkJCQkJPC9BPiA8L0ZPTlQ+Ci0JCQkJCQkJPC9QPiA8SU5QVVQgbmFtZT0iY29tbWFuZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iSGl0Q291bnRlclZpZXciIC8+IDxJTlBVVAotCQkJCQkJCW5hbWU9ImRiX3JlZ2lvbiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0idHJ1ZSIgLz4KLQkJCQkJCTwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQk8L1RBQkxFPgotCQk8L0ZPUk0+Ci0JCTxCUj4KLQkJPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQkJCTxUQk9EWT4KLQkJCQk8VFI+Ci0JCQkJCTxURCBhbGlnbj0iQ0VOVEVSIj4KLQkJCQkJCTxQPgotCQkJCQkJCTxCPjxGT05UIHNpemU9Ii0xIj5Ib3cgdGhpcyBzYW1wbGUgd29ya3M6PC9GT05UPgotCQkJCQk8L1REPgotCQkJCTwvVFI+Ci0JCQkJPFRSPgotCQkJCQk8VEQ+Ci0JCQkJCQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+Ci0JCQkJCQkJPFRCT0RZPgotCQkJCQkJCQk8VFI+Ci0JCQkJCQkJCQk8VEQ+Ci0JCQkJCQkJCQkJPCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+Ci0JCQkJCQkJCQkJPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotCQkJCQkJCQkJPC9URD4KLQkJCQkJCQkJCTxURD4KLQkJCQkJCQkJCQk8UD4KLQkJCQkJCQkJCQkJPEZPTlQgc2l6ZT0iLTEiPlRoaXMgc2FtcGxlIGhhczo8L0ZPTlQ+Ci0JCQkJCQkJCQkJPC9QPgotCQkJCQkJCQkJCTxVTD4KLQkJCQkJCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgc2VydmxldCB0aGF0Ci0JCQkJCQkJCQkJCQkJaW5jcmVtZW50cyBhIGNvdW50ZXIgZXZlcnkgdGltZSBpdCBpcyBpbnZva2VkIDwvRk9OVD4KLQkJCQkJCQkJCQkJCTxVTD4KLQkJCQkJCQkJCQkJCQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgSmF2YSBTZXJ2ZXIgUGFnZSAoSlNQKQotCQkJCQkJCQkJCQkJCQkJdGhhdCBpbnZva2VzIHRoZSBzZXJ2bGV0IGFuZCBkaXNwbGF5cyB0aGUgY291bnRlciA8L0ZPTlQ+Ci0JCQkJCQkJCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIC5zZXJ2bGV0IGZpbGUgdGhhdAotCQkJCQkJCQkJCQkJCQkJcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZsZXQgdG8gdGhlIFdlYlNwaGVyZQotCQkJCQkJCQkJCQkJCQkJQXBwbGljYXRpb24gU2VydmVyIDwvRk9OVD4KLQkJCQkJCQkJCQkJCTwvVUw+Ci0JCQkJCQkJCQkJPC9VTD4KLQkJCQkJCQkJCQk8UD4KLQkJCQkJCQkJCQkJPEZPTlQgc2l6ZT0iLTEiPlRoZSBBcHBsaWNhdGlvbiBTZXJ2ZXIgcHJvY2Vzc2VzIC5qc3AKLQkJCQkJCQkJCQkJCWZpbGVzIHdpdGggaXRzIEpTUCAxLjAgcHJvY2Vzc29yIHNlcnZsZXQuIEl0IGhhbmRsZXMgdGhlCi0JCQkJCQkJCQkJCQkmbHQ7anNwOmluY2x1ZGUgLi4uIC8mZ3Q7IHRhZyBhcyBhIHNlcnZlci1zaWRlIGluY2x1ZGUsCi0JCQkJCQkJCQkJCQlyZXBsYWNpbmcgdGhlIHRhZyB3aXRoIHRoZSB2YXJpYWJsZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUKLQkJCQkJCQkJCQkJCXNlcnZsZXQuPC9GT05UPgotCQkJCQkJCQkJCTwvUD48L1REPgotCQkJCQkJCQkJPFREPgotCQkJCQkJCQkJCTwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRwotCQkJCQkJCQkJCXNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPgotCQkJCQkJCQkJCTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLQkJCQkJCQkJCTwvVEQ+Ci0JCQkJCQkJPC9UQk9EWT4KLQkJCQkJCTwvVEFCTEU+PC9URD4KLQkJCQk8L1RSPgotCQkJPC9UQk9EWT4KLQkJPC9UQUJMRT4KLQkJPEJSPgotCQk8VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiCi0JCQlib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIgotCQkJY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIiBib3JkZXI9IjAiCi0JCQljZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCQkJPFRCT0RZPgotCQkJCTxUUj4KLQkJCQkJPFREIGFsaWduPSJDRU5URVIiPgotCQkJCQkJPFA+Ci0JCQkJCQkJPEI+PEZPTlQgc2l6ZT0iLTEiPiBIb3cgdG8gdXNlIHRoaXMgc2FtcGxlIG9uIHlvdXIgd2ViCi0JCQkJCQkJCQlwYWdlOjwvRk9OVD4KLQkJCQkJCQk8L0I+Ci0JCQkJCQk8L1A+PC9URD4KLQkJCQk8L1RSPgotCQkJCTxUUj4KLQkJCQkJPFREPgotCQkJCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCQkJCTxUQk9EWT4KLQkJCQkJCQkJPFRSPgotCQkJCQkJCQkJPFREPgotCQkJCQkJCQkJCTwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRwotCQkJCQkJCQkJCXNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPgotCQkJCQkJCQkJCTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLQkJCQkJCQkJCTwvVEQ+Ci0JCQkJCQkJCQk8VEQ+Ci0JCQkJCQkJCQkJPFA+Ci0JCQkJCQkJCQkJCTxGT05UIHNpemU9Ii0xIj5Zb3UgY2FuIGFkZCB0aGlzIGV4YWN0IHRhZyB0byBhbnkgSFRNTAotCQkJCQkJCQkJCQkJcGFnZSB5b3UgaGF2ZSBvbiB5b3VyIHNpdGUuIFJlbmFtZSB0aGUgSFRNTCBmaWxlIHdpdGggYSAuanNwCi0JCQkJCQkJCQkJCQlmaWxlIGV4dGVuc2lvbiwgcHV0IHRoZSBKYXZhIC5jbGFzcyBhbmQgLnNlcnZsZXQgZmlsZXMgaW4KLQkJCQkJCQkJCQkJCXRoZSBjbGFzc2VzIGZvbGRlciwgcHVibGlzaC4uLi4gYW5kIHlvdSdyZSByZWFkeSB0byBnby48L0ZPTlQ+Ci0JCQkJCQkJCQkJPC9QPjwvVEQ+Ci0JCQkJCQkJCQk8VEQ+Ci0JCQkJCQkJCQkJPCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+Ci0JCQkJCQkJCQkJPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotCQkJCQkJCQkJPC9URD4KLQkJCQkJCQkJPC9UUj4KLQkJCQkJCQk8L1RCT0RZPgotCQkJCQkJPC9UQUJMRT48L1REPgotCQkJCTwvVFI+Ci0JCQk8L1RCT0RZPgotCQk8L1RBQkxFPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NjY2ExOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci0JCTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdgotPQotIkNvbnRlbnQtVHlwZSIKLWNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+UGFnZSBIaXQgQ291bnRlciBJbnRyb2R1Y3Rpb248L1RJVExFPgotPExJTksgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L0hFQUQ+Ci08Qk9EWT4KLTxDRU5URVI+Ci08Rk9STSBuYW1lICAgPSAgICJteUZvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIuLi9Db250cm9sbGVycy9TYW1wbGVDb250cm9sbGVyIj4KLQk8VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGNvbHNwYW49IjIiPgotCQkJPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMjUiIGFsdD0iIj48L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQgcm93c3Bhbj0iMiIgYWxpZ249IkxFRlQiIHdpZHRoPSIyMjAiIGhlaWdodD0iMzAwIj48SU1HIHNyYz0iLi4vaW1hZ2VzL2hpdENvdW50ZXIwMS5naWYiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAwIiBhbHQ9IiI+PC9URD4KLQkJCTxURCBhbGlnbj0iTEVGVCIgd2lkdGg9IjM4MCI+Ci0JCQk8UD48Rk9OVCBzaXplPSIrMSI+PEI+UGFnZSBIaXQgQ291bnRlciBTYW1wbGU8L0I+PC9GT05UPjwvUD4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURCBhbGlnbj0iTEVGVCIgdmFsaWduPSJUT1AiPgotCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPlRoaXMgc2FtcGxlIHNob3dzIHlvdSBob3cgdG8gdXNlIGEgSmF2YSBzZXJ2bGV0IHRvIGNvdW50IGhvdyBtYW55IHRpbWVzIGEgcGFnZSB3YXMgdmlzaXRlZC48L0ZPTlQ+PC9QPgotCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPlRoaXMgc2FtcGxlIHJlcXVpcmVzIGEgZGF0YWJhc2UgdG8gc3RvcmUgdGhlIGNvdW50ZXIuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IGluc3RhbGxlZCBhbmQgY29uZmlndXJlZCB5b3VyIGRhdGFiYXNlIGZvciB0aGUgV2ViU3BoZXJlIHNhbXBsZXMsIHJlZmVyIHRvIDxBIGhyZWY9Ii4uL0NvbmZpZ3VyYXRpb24vREJDb25maWcuaHRtbCI+RGF0YWJhc2UgQ29uZmlndXJhdGlvbjwvQT4gZm9yIGluc3RydWN0aW9ucy4gPC9GT05UPjwvUD4KLQkJCTxQPjxGT05UIHNpemU9Ii0xIj48QSBocmVmPSJqYXZhc2NyaXB0OmRvY3VtZW50Lm15Rm9ybS5zdWJtaXQoKSIgdGFyZ2V0PSJfc2VsZiI+IDxCPlJ1biB0aGlzIHNhbXBsZTwvQj48L0E+IDwvRk9OVD48L1A+Ci0JCQk8SU5QVVQgbmFtZT0iY29tbWFuZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iSGl0Q291bnRlclZpZXciIC8+IDxJTlBVVCBuYW1lPSJkYl9yZWdpb24iIHR5cGU9ImhpZGRlbiIgdmFsdWU9InRydWUiIC8+PC9URD4KLQkJPC9UUj4KLTwvVEFCTEU+Ci08L0ZPUk0+Ci08QlI+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJDRU5URVIiPgotCQkJPFA+PEI+PEZPTlQgc2l6ZT0iLTEiPkhvdyB0aGlzIHNhbXBsZSB3b3Jrczo8L0ZPTlQ+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPiA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJCTxURD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGlzIHNhbXBsZSBoYXM6PC9GT05UPjwvUD4KLQkJCQkJCTxVTD4KLQkJCQkJCQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgSmF2YSBzZXJ2bGV0IHRoYXQgaW5jcmVtZW50cyBhIGNvdW50ZXIgZXZlcnkgdGltZSBpdCBpcyBpbnZva2VkIDwvRk9OVD4KLTxVTD4KLQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgSmF2YSBTZXJ2ZXIgUGFnZSAoSlNQKSB0aGF0IGludm9rZXMgdGhlIHNlcnZsZXQgYW5kIGRpc3BsYXlzIHRoZSBjb3VudGVyIDwvRk9OVD4KLQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgLnNlcnZsZXQgZmlsZSB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2bGV0IHRvIHRoZSBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyIDwvRk9OVD4KLTwvVUw+Ci0JCQkJCQk8L1VMPgotCQkJCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPlRoZSBBcHBsaWNhdGlvbiBTZXJ2ZXIgcHJvY2Vzc2VzIC5qc3AgZmlsZXMgd2l0aCBpdHMgSlNQIDEuMCBwcm9jZXNzb3Igc2VydmxldC4gSXQgaGFuZGxlcyB0aGUgJmx0O2pzcDppbmNsdWRlIC4uLiAvJmd0OyB0YWcgYXMgYSBzZXJ2ZXItc2lkZSBpbmNsdWRlLCByZXBsYWNpbmcgdGhlIHRhZyB3aXRoIHRoZSB2YXJpYWJsZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgc2VydmxldC48L0ZPTlQ+PC9QPgotCQkJCQkJPC9URD4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+IDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTxCUj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkNFTlRFUiI+Ci0JCQk8UD48Qj48Rk9OVCBzaXplPSItMSI+Ci1Ib3cgdG8gdXNlIHRoaXMgc2FtcGxlIG9uIHlvdXIgd2ViIHBhZ2U6PC9GT05UPjwvQj48L1A+Ci0JCQk8L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQ+Ci0JCQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPiA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJCTxURD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5Zb3UgY2FuIGFkZCB0aGlzIGV4YWN0IHRhZyB0byBhbnkgSFRNTCBwYWdlIHlvdSBoYXZlIG9uIHlvdXIgc2l0ZS4gUmVuYW1lIHRoZSBIVE1MIGZpbGUgd2l0aCBhIC5qc3AgZmlsZSBleHRlbnNpb24sIHB1dCB0aGUgSmF2YSAuY2xhc3MgYW5kIC5zZXJ2bGV0IGZpbGVzIGluIHRoZSBjbGFzc2VzIGZvbGRlciwgcHVibGlzaC4uLi4gYW5kIHlvdSdyZSByZWFkeSB0byBnby48L0ZPTlQ+PC9QPgotCQkJCQkJPC9URD4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+IDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJCQk8L1RSPgotCQkJCQk8L1RCT0RZPgotCQkJCQkJPC9UQUJMRT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2Jsb2NrQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2Jsb2NrQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdiODQxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLTxtZW51IGRhdGU9IjExLzMwLzIwMDAiPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTxybmFtZT5MaWFtJ3MgQ2hvd2RlciBIb3VzZSBhbmQgR3JpbGw8L3JuYW1lPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwhLS0gYmxvY2sgY29tbWVudAotCQlCbGFjayA9ICMwMDAwMDAKLQkJU2lsdmVyPSAjQzBDMEMwCi0JCUdyYXkgID0gIzgwODA4MAotCQlXaGl0ZSA9ICNGRkZGRkYKLQktLT4KLQk8IS0tIGJsb2NrIGNvbW1lbnQKLQkJQmxhY2sgPSAjMDAwMDAwCi0JCVNpbHZlcj0gI0MwQzBDMAotCQlHcmF5ICA9ICM4MDgwODAKLQkJV2hpdGUgPSAjRkZGRkZGCi0JLS0+Ci0JPGl0ZW0gdHlwZT0iYXBwZXRpemVyIj4KLQkJPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JCTxwcmljZSB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci0JCTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci0JPC9pdGVtPgotCTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotCTwhLS0gICBjb21tZW50ICAgb24gICBhICAgbmV3ICAgbGluZSAgIC0tPgotCTwhLS1jb21tZW50IG9uIGEgbmV3IGxpbmUgd2l0aCBubyBzcGFjZS0tPgotCTwhLS0KLQkJTm8gc3BhY2UKLQktLT4KLQk8IS0tCi0JCU9uZVNwYWNlCi0JLS0+Ci0JPCEtLQotCQlPbmUgdGFiCi0JLS0+Ci0JPCEtLQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4tLT4KLQk8IS0tCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCS0tPgotCTwhLS0KLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCS0tPgotCTwhLS0KLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQktLT4KLQk8IS0tCi0JCQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQktLT4KLQk8IS0tCi0JCQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQlUaGUgdGV4dAotCQlpbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQkJCi0JLS0+Ci0JPCEtLQotCQkKLQkJCi0JCQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQkKLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCQkKLQkJCi0JCQotCS0tPgotCTxpdGVtIHR5cGU9ImFwcGV0aXplciI+Ci0JCTwhLS0gYQotCQkJYi0tPgotCQk8IS0tIGEKLQkJCWIgLS0+Ci0JCTwhLS0KLQkJCWEKLQkJCWItLT4KLQkJPCEtLQotCQkJYQotCQkJYiAtLT4KLQkJPCEtLQotCQkJYQotCQkJYgotCQktLT4KLQkJPCEtLSBhCi0JCQliCi0JCS0tPgotCQk8IS0tCi0JCQkKLQkJCQotCQkJCi0JCQlhCi0JCQkKLQkJCQotCQkJCi0JCQliCi0JCQkKLQkJCQotCQkJCi0JCS0tPgotCQk8ZGVzYz5Qcm9zY2l1dHRvIGhhbSB3aXRoIG1lbG9uPC9kZXNjPgotCQk8IS0tIHRoaXMgYmxvY2sgY29tbWVudCBzaG91bGQgbGluZSB1cCB3aXRoIHRoZSBzaWJpbGluZ3MKLQkJCUJsYWNrID0gIzAwMDAwMAotCQkJU2lsdmVyPSAjQzBDMEMwCi0JCQlHcmF5ICA9ICM4MDgwODAKLQkJCVdoaXRlID0gI0ZGRkZGRgotCQktLT4KLQkJPHByaWNlIHVuaXRzPSJ1c2QiPjcuOTU8L3ByaWNlPgotCQk8IS0tIGNvbW1lbnQgYmVmb3JlIG1pc3NpbmcgZW5kIHRhZyAtLT4KLTwvbWVudT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9ibG9ja0NvbW1lbnRzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2Jsb2NrQ29tbWVudHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTY5ODc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2Jsb2NrQ29tbWVudHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotCQk8bWVudSBkYXRlPSIxMS8zMC8yMDAwIj48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8cm5hbWU+TGlhbSdzIENob3dkZXIgSG91c2UgYW5kIEdyaWxsPC9ybmFtZT48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8IS0tIGJsb2NrIGNvbW1lbnQKLQkJQmxhY2sgPSAjMDAwMDAwCi0JCVNpbHZlcj0gI0MwQzBDMAotCQlHcmF5ICA9ICM4MDgwODAKLQkJV2hpdGUgPSAjRkZGRkZGCi0JLS0+Ci0JPCEtLSBibG9jayBjb21tZW50Ci0JCQlCbGFjayA9ICMwMDAwMDAKLQkJU2lsdmVyPSAjQzBDMEMwCi0JCQkJR3JheSAgPSAjODA4MDgwCi0JV2hpdGUgPSAjRkZGRkZGCi0tLT4KLQk8aXRlbSB0eXBlPSJhcHBldGl6ZXIiPgotCQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPjxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci0JPC9pdGVtPgotCTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotCTwhLS0gICBjb21tZW50ICAgb24gICBhICAgbmV3ICAgbGluZSAgIC0tPgotCTwhLS1jb21tZW50IG9uIGEgbmV3IGxpbmUgd2l0aCBubyBzcGFjZS0tPgotPCEtLQotTm8gc3BhY2UKLS0tPgotPCEtLQotIE9uZVNwYWNlCi0tLT4KLTwhLS0KLQlPbmUgdGFiCi0tLT4KLTwhLS0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLi0tPgotPCEtLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0tLT4KLTwhLS0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0tLT4KLTwhLS0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLS0tPgotPCEtLQotCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLS0tPgotPCEtLQotCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQotLS0+Ci08IS0tCi0KLQotCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLQotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0KLQotCi0tLT4KLQk8aXRlbSB0eXBlPSJhcHBldGl6ZXIiPgotPCEtLSBhCi0gICAgIGItLT4KLTwhLS0gYQotICAgICBiIC0tPgotPCEtLQotYQotICAgICBiLS0+Ci08IS0tCi1hCi0gICAgIGIgLS0+Ci08IS0tCi1hCi0gICAgIGIKLS0tPgotPCEtLSBhCi0gICAgIGIKLSAgICAgIC0tPgotPCEtLQotCi0KLQotYQotCi0KLQotYgotCi0KLQotLS0+Ci0JCTxkZXNjPlByb3NjaXV0dG8gaGFtIHdpdGggbWVsb248L2Rlc2M+Ci08IS0tIHRoaXMgYmxvY2sgY29tbWVudCBzaG91bGQgbGluZSB1cCB3aXRoIHRoZSBzaWJpbGluZ3MKLQlCbGFjayA9ICMwMDAwMDAKLQlTaWx2ZXI9ICNDMEMwQzAKLQlHcmF5ICA9ICM4MDgwODAKLQlXaGl0ZSA9ICNGRkZGRkYKLS0tPgotCTxwcmljZSB1bml0cz0idXNkIj43Ljk1PC9wcmljZT4KLQk8IS0tIGNvbW1lbnQgYmVmb3JlIG1pc3NpbmcgZW5kIHRhZyAtLT4KLTwvbWVudT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jaGFycy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jaGFycy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYmE4ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2hhcnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYWJjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0N2Q4ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi08SFRNTD4KLTxIRUFEPgotICAgPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSIgLz4KLSAgIDxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcyIFtlbl0gKFdpbmRvd3MgTlQgNS4wOyBVKSBbTmV0c2NhcGVdIiAvPgotPFRJVExFPjwvVElUTEU+Ci08L0hFQUQ+Ci0KLVRoaXMgaXMgYSBwYWdlIG9mIHNvbWUgb2YgdGhlIHRlY2huaWNhbCBzdHVmZiB0aGF0IEkndmUgd3JpdHRlbiB1c2luZyB2YXJpb3VzCi1wcm9ncmFtbWluZyBsYW5ndWFnZXMuICBDbGljayBvbiB0aGUgbGlua3MgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcHJvamVjdHMgb3IKLXRvIHNlZSB0aGUgc291cmNlIGNvZGUuPEJSPgotPEk+Tm90ZTogRmVlbCBmcmVlIHRvIGNvcHksIHN0ZWFsLCBtb2RpZnksIGRlc3Ryb3kgd2hhdCB5b3Ugd2lsbC4uLjwvST48QlI+PEJSPgotPEhSPgotCi08SDI+IFByb2dyYW1zIGFuZCBVdGlsaXRpZXMgPC9IMj4KLTxVTD4KLTxMST48QSBocmVmPSJtYWtlbWFrZS5odG1sIj4gPEk+IEF1dG9tYXRpYwotTWFrZWZpbGUgVXRpbGl0eTogPC9JPjwvQT4gVGhpcyBnZW5lcmF0ZXMgYSBNYWtlZmlsZSBhbmQgdXBkYXRlcyBpdCBhY2NvcmRpbmcKLXRvIHRoZSBmaWxlcyBjdXJyZW50bHkgaW4geW91ciBkaXJlY3RvcnkuCi1UYWtlIGEgZ2FuZGVyIGF0IHRoZSBzb3VyY2UgaGVyZTogPEEKLWhyZWY9Im1ha2VtYWtlLmMiPiA8ST4gbWFrZW1ha2UuYyAKLSA8L0k+PC9BPiAKLQotPEJSPjxCUj4KLTwvTEk+PExJPjxBIGhyZWY9Im1haWxzb3J0LnBsIiA+IDxJPgotbWFpbCBmaWxlIHNvcnRlcjogIDwvST4gPC9BPiAKLVRoaXMgdXRpbGl0eSBwYXJzZXMgYSBtYWlsIGZpbGUgYW5kIGNyZWF0ZXMgYW5vdGhlciBtYWlsIGZpbGUgY29udGFpbmluZyBvbmx5Ci10aGUgbWVzc2FnZXMgc3BlY2lmaWVkIGJ5IHBhcmFtYXRlcnMuICBGb3IgZXhhbXBsZSwgcGFyc2UgYSBtYWlsIGFyY2hpdmUgZmlsZQotKG9sZC1tYWlsLUphbi0yMDAwKSBhbmQgZXh0cmFjdCBhbGwgb2YgdGhlIG1lc3NhZ2VzIGZyb20gZGF2ZWtAeW91cm1vbS5jb20gb3IKLXdpdGggdGhlIHN1YmplY3QgTWFyaWxsaW9uLiAgVGhpcyBndXkgd2FzIHdoaXBwZWQgdXAgaW4gUGVybC4KLTxCUj48QlI+Ci0KLTwvTEk+PExJPjxBIGhyZWY9ImVsZWN0cm9uaWNOb3Rlcy5odG1sIiA+IDxJPgotRWxlY3Ryb25pYyBOb3RlczogIDwvST4gPC9BPiBUaGlzIGlzIGFuIG9yaWdpbmFsIGlkZWEgKGdhc3AhKSB0aGF0IEkgZGV2ZWxvcGVkIHdoaWNoIGlzIGEKLXN5c3RlbSBmb3Iga2VlcGluZyBsaXR0bGUgcmVtaW5kZXJzIHRvIHlvdXJzZWxmIGR1cmluZyB0aGUgZGF5IGFuZCBoYXZpbmcgdGhlbQotc2VudCB0byB5b3UgYWxsIGluIG9uZSBjb252ZW5pZW50IGZpbGUgdmlhIGVtYWlsIGF0IHRoZSBlbmQgb2YgdGhlIGRheS4gIAotPEJSPjxCUj4KLQotPC9MST48TEk+PEEgaHJlZj0iaGVhZGVyLmh0bWwiID4gPEk+IEMvQysrIEhlYWRlciBmaWxlCi10byBJbXBsZW1lbnRhdGlvbiBmaWxlIGNvbnZlcnRlcjogPC9JPiA8L0E+Ci1UaGlzIGlzIGEgdmVyeSB1c2VmdWwgdG9vbCB3cml0dGVuIGluIEMrKyB0aGF0IGNvbnZlcnRzIC5oIGZpbGVzIHRvIGVtcHR5Ci1pbXBsZW1lbnRhdGlvbiAoLkMpIGZpbGVzLiAgCi08QlI+PEJSPgotPC9MST48TEk+PEEgaHJlZj0ibWF0cml4Lmh0bWwiID4gPEk+IE1hdHJpeCBNYW5pcHVsYXRpb24KLVBhY2thZ2U6IDwvST48L0E+IFRoaXMgaXMgYSBwYWNrYWdlIHRoYXQgZG9lcyBhbGwgc29ydHMgb2YgY29vbCBtYW5pcHVsYXRpb25zCi13aXRoIG1hdHJpY2VzLCBzdWNoIGFzIEdhdXNzaWFuIEVsaW1pbmF0aW9uLCBOb3JtYWwgRXF1YXRpb25zLCBWYW5kZXJtb25kZQotTWF0cmljZXMsIENob2xlc2t5IEZhY3Rvcml6YXRpb24sIEVycm9yIEFuYWx5c2lzLCBhbmQgbW9yZSBzdHVmZiB0aGFuIHlvdSB3b3VsZAotZXZlciB3YW50IHRvIGRvIHdpdGggYSBtYXRyaXguICBJdCBpcyB3cml0dGVuIGluIGdvb2Qgb2wnIEMuCi0KLTxCUiA+PEJSICA+Ci08L0xJPjxMST4gCi08QSBocmVmPSJsaXNwLmh0bWwiID4gPEk+U2V0IE9wZXJhdGlvbnM6IDwvST48L0E+IDxJPjwvST4gQSBwcm9ncmFtIHRoYXQgcGVyZm9ybXMgc2V0Ci1vcGVyYXRpb25zIG9uIGEgbGlzdC4gIFRoaXMgaXMgd3JpdHRlbiBpbiBMaXNwLCBvZiBhbGwgdGhpbmdzLiAgVGhlcmUncyBhbHNvCi1zb21lIGV4YW1wbGVzIG9mIG15IG93biBpbnRlcnByZXRhdGlvbnMgb2Ygc29tZSBMaXNwIGZ1bmN0aW9ucy4gTGlzcCBpcyBhIGdvb2QKLWxhbmd1YWdlIGZvciBBSSBhbmQgdGhpbmdzIG9mIHRoYXQgbmF0dXJlLiAgCi1JdCByZWxpZXMgaGVhdmlseSBvbiByZWN1cnNpb24sIHNvIGl0IHRha2VzIGEgZGlmZmVyZW50Ci1taW5kc2V0IHRvIHByb2dyYW0gaW4gdGhpcyBsYW5ndWFnZS4gIEJ1dCB1c2VkIGNvcnJlY3RseSBhbmQgZm9yIGl0cyBpbnRlbmRlZAotcHVycG9zZSwgTGlzcCBpcyBhIHZlcnkgdW5pcXVlIGFuZCBwb3dlcmZ1bCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KLTxCUiAgID48QlIgICAgPgotCi08L0xJPjxMST4gCi08QSBocmVmPSJsb2MuaHRtbCIgPiA8ST4gTGluZXMgT2YgQ29kZSBDb3VudGVyOgotPC9JPjwvQT48ST48L0k+ICBUaGlzIGlzIGlzIExPQyBjb3VudGVyIHRoYXQgSSB3cm90ZSBpbiBQZXJsIHRoYXQgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mCi11bmNvbW1lbnRlZCBsaW5lcyBvZiBjb2RlIGluIGEgcHJvZ3JhbS4gIFRoaXMgd29ya3MgZm9yIGFueSBwcm9ncmFtbWluZwotbGFuZ3VhZ2UgYXMgeW91IGNhbiBzdXBwbHkgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGlzCi1hbiBleHRyZW1lbHkgdXNlZnVsIHByb2dyYW0gZm9yIHVzZSBpbiBzb2Z0d2FyZSBtZXRyaWNzLgotPEJSIGFiYz0iZGVmIj48QlIgYWJjPSJkZWYiID4KLQotPC9MST48TEk+PEEgaHJlZj0ibGlud2luLmh0bWwiPiA8ST4gU2ltcGxlICpuaXggdG8KLXdpbmRvd3MgdGV4dCBjb252ZXJ0ZXIgPC9JPjwvQT4gVGhpcyB0YWtlcyBmaWxlcyB3cml0dGVuIGluIExpbnV4IChhbmQgaW4gdmkgb3IKLSAgICAgICAgYW4gZWRpdG9yIHdpdGggYXV0b21hdGljIGxpbmUgYnJlYWtzIGFmdGVyIGV2ZXJ5IDgwIG9yIHNvIGNoYXJzKSBhbmQKLWZvcm1hdHMgaXQgc28gaXQgd2lsbCBkaXNwbGF5IHByb3Blcmx5IGluIFdpbmRvd3MgZW52aXJvbm1lbnQgc2hvdWxkIHlvdSBiZQotZm9yY2VkIHRvIGRvIHNvLiAgCi1QZXJ1c2UgKHBlcnVzZSwgbWluZCB5b3UuICBJIGRvbid0IHdhbnQgdG8gc2VlIGFueSA8ST5icm93c2luZzwvST4pIHRoZSBzb3VyY2UgaGVyZTogPEEKLWhyZWY9Imxpbndpbi5jIj4gPEk+IGxpbndpbi5jIAotIDwvST48L0E+IAotPEJSIGFiYyA9ICJkZWYiPjxCUiBhYmMgID0gICJkZWYiPgotCi0KLTwvTEk+PExJPjxCPiBSZWdyZXNzaW9uIGFuZCBTdGFuZGFyZCBEZXZpYXRpb246IDwvQj4gCi1BIG1hdGggY2xhc3Mgd3JpdHRlbiBpbiBKYXZhIHVzaW5nIE9iamVjdCBPcmllbnRlZCBkZXNpZ24gcHJpbmNpcGxlcy4gIFRoZSBtYWluCi1hc3BlY3RzIG9mIHRoZSBwcm9ncmFtIGFyZSBmb3IgZmlndXJpbmcgb3V0IFN0YW5kYXJkIERldmlhdGlvbiBhbmQgdGhlCi1SZWdyZXNzaW9uLCB3aGVuIHlvdSBpbnB1dCBhIHNldCBvZiB4IGFuZCB5IHZhbHVlcy4gIFJlZ3Jlc3Npb24gY2FsY3VsYXRpb25zCi1hcmUgb2Z0ZW4gdXNlZCBpbiBTb2Z0d2FyZSBNZXRyaWNzIHRvIHRvIGhlbHAgaW4gZXN0aW1hdGluZyBsZW5ndGggb2YgY29kZSwgYW5kCi10aW1lIHNwZW50IG9uIHRoZSBwcm9qZWN0LjxCUj4KLQotPEEgaHJlZj0iUmVncmVzc2lvbkNhbGMuaHRtbCIgPiAKLTxJPiBSZWdyZXNzaW9uQ2FsYy5qYXZhIDwvST4gPC9BPiAgVGhpcyBpcyB0aGUgbWFpbiBjbGFzcyB0aGF0IGRvZXMgdGhlCi1jYWxjdWxhdGlvbnMuICBJdCBjYWxjdWxhdGVzIEIxLCBCMCwgYW5kIHJeMiwgd2hpY2ggYXJlIGFsbCBwYXJhbWV0ZXJzIG9mCi1SZWdyZXNzaW9uLgotPEJSIGFiYz0gImRlZiI+Ci08QSBocmVmPSJNYXRoQ2xhc3MuaHRtbCIgPiAKLTxJPiBNYXRoQ2xhc3MuamF2YSA8L0k+ICA8L0E+IFRoaXMgaXMgc2ltcGx5IGEgc21hbGwgY2xhc3Mgd2hpY2ggY2FsY3VsYXRlcyB0aGUKLW1lYW4gYW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYSB2ZWN0b3Igb2YgbnVtYmVycy4gIFRoaXMgaXMgdXNlZCBieSB0aGUKLVJlZ3Jlc3Npb25DYWxjIGNsYXNzIGluIGl0cyBjYWxjdWxhdGlvbnMuCi08QlIgYWJjID0iZGVmIj4KLTxBIGhyZWY9IlJlZ3Jlc3Npb24uaHRtbCIgPiAKLTxJPiBSZWdyZXNzaW9uLmphdmEgPC9JPiAgPC9BPiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgbWFpbiByb3V0aW5lLCBvciB3aGVyZSB0aGUKLXByb2dyYW0gc3RhcnRzLiAgSXQgcHV0cyBhbGwgb2YgdGhlIGlucHV0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbnRvIHR3bwotc2VwYXJhdGUgdmVjdG9ycyBmb3IgdGhlIHggYW5kIHkgdmFsdWVzLjxCUj48QlI+Ci0KLUFuIGV4YW1wbGUgb2YgdGhlIHVzYWdlIG9mIHRoaXMgcHJvZ3JhbSB3b3VsZCBiZTogIDxCUj4KLUlmIHlvdSBoYWQgYSBoaXN0b3J5IG9mIGRhdGEgb24geW91ciBlc3RpbWF0ZWQgTGluZXMgT2YgQ29kZSAoTE9DKSBwZXIgY2xhc3MsCi1hcyB3ZWxsIGFzIHRoZSBhY3R1YWwgTE9DIHBlciBjbGFzcywgeW91IGNvdWxkIHB1dCB0aGVzZSBpbiB0aGUgZm9ybXVsYSBhbmQKLWZpbmQgb3V0IHRoZSBSZWdyZXNzaW9uIG9mIHRoZSBkYXRhIChvciBob3cgZmFyIGF3YXkgZWFjaCBwb2ludCBpcyBmcm9tIHRoZQotZnVuY3Rpb24gbGluZS4pICAKLQotWW91IHdvdWxkIGlucHV0IHRoZSBkYXRhIGZvciB0aGUgZXN0aW1hdGVkIExPQywgc2VwYXJhdGVkIGJ5IGEgY29tbWEsIGFuZAotZm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBMT0MuICBUaGUgcmVzdWx0IHdvdWxkIGJlIHRoZSByZWdyZXNzaW9uIGNhbGN1bGF0aW9uLgotPFBSRT4KLSVqYXZhIFJlZ3Jlc3Npb24gMTMwIDY1MCA5OSAxNTAgLCAxODYgNjk5IDEzMiAyNzIgCi0KLVggRGF0YSA9IFsgMTMwLjAgNjUwLjAgOTkuMCAxNTAuMCBdCi1ZIERhdGEgPSBbIDE4Ni4wIDY5OS4wIDEzMi4wIDI3Mi4wIF0KLU4gPSA0Ci1CZXRhMCA9IDcyLjY5MDUwMzA3ODAzNjEKLUJldGExID0gMC45NzAxMDQ5NDQzMDMwNjY3Ci1yU3F1YXJlZCA9IDIyMTIuNTA0Njk3NjczNjg5Ci08L1BSRT4KLQotPC9MST48L1VMPgotCi08SFI+Ci08SDI+IEtub3dsZWRnZSA8L0gyPgotPFVMPgotPExJPjxBIGhyZWY9InZpbS5odG1sIj4gPEk+IEVzcG91c2luZyBteSBsb3ZlCi1mb3IgdmltISA8L0k+PC9BPiB2aW0ganVzdCByb2Nrcywgb2theS4gIFJlYWxseS4gIElmIEkgaGFkIHRvIGNob29zZSBiZXR3ZWVuLAotbGlrZSwgc2V4LCBvciB1c2luZyB2aW0tLWxldCdzIGp1c3Qgc2F5IEknZCBiZSBvbmUgbWFzdGVyZnVsLWVkaXRpbmcgbW9uay4gCi08QlI+PEJSPgotCi0KLTwvTEk+PExJPgotPEEgaHJlZj0iTUJSLUxJTE8udHh0Ij4gCi08ST4gTG9zdCBMSUxPPyAgUmVjb3Zlci48L0k+ICA8L0E+IElmIHlvdSBoYXZlIExpbnV4IGluc3RhbGxlZCBpbiBhIG11bHRpLWJvb3QKLWVudmlyb25tZW50LCBhbmQgeW91IG92ZXJ3cml0ZSB5b3VyIE1CUiwgeW91IGNhbiBsb3NlIExJTE8uICBJIHJlaW5zdGFsbGVkCi1XaW5kb3dzIChoZXksIEkgbmVlZGVkIHRvIHBsYXkgRmluYWwgRmFudGFzeSBWSUlJISkgYW5kIGNvdWxkbid0IGJvb3QgaW50bwotTGludXguICBIZXJlJ3MgaG93IEkgcmVjb3ZlcmVkLgotPEJSPjxCUj4KLQotCi0KLTwvTEk+PC9VTD48Qk9EWT48L0JPRFk+Ci08L0hUTUw+PEhUTUw+Ci08L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2xlYW51cC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2xlYW51cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjk3YTAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NsZWFudXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi08aHRtbD4KLTxIRUFEPgotICAgPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSIgLz4KLSAgIDxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcyIFtlbl0gKFdpbmRvd3MgTlQgNS4wOyBVKSBbTmV0c2NhcGVdIiAvPgotPFRJVExFPjwvVElUTEU+Ci08L0hFQUQ+Ci0KLVRoaXMgaXMgYSBwYWdlIG9mIHNvbWUgb2YgdGhlIHRlY2huaWNhbCBzdHVmZiB0aGF0IEkndmUgd3JpdHRlbiB1c2luZyB2YXJpb3VzCi1wcm9ncmFtbWluZyBsYW5ndWFnZXMuICBDbGljayBvbiB0aGUgbGlua3MgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcHJvamVjdHMgb3IKLXRvIHNlZSB0aGUgc291cmNlIGNvZGUuPEJSPgotPEk+Tm90ZTogRmVlbCBmcmVlIHRvIGNvcHksIHN0ZWFsLCBtb2RpZnksIGRlc3Ryb3kgd2hhdCB5b3Ugd2lsbC4uLjwvST48QlI+PEJSPgotPEhSPgotCi08SDI+IFByb2dyYW1zIGFuZCBVdGlsaXRpZXMgPC9IMj4KLTxVTD4KLTxMST48QSBocmVmPSJtYWtlbWFrZS5odG1sIj4gPEk+IEF1dG9tYXRpYwotTWFrZWZpbGUgVXRpbGl0eTogPC9JPjwvQT4gVGhpcyBnZW5lcmF0ZXMgYSBNYWtlZmlsZSBhbmQgdXBkYXRlcyBpdCBhY2NvcmRpbmcKLXRvIHRoZSBmaWxlcyBjdXJyZW50bHkgaW4geW91ciBkaXJlY3RvcnkuCi1UYWtlIGEgZ2FuZGVyIGF0IHRoZSBzb3VyY2UgaGVyZTogPEEKLWhyZWY9Im1ha2VtYWtlLmMiPiA8ST4gbWFrZW1ha2UuYyAKLSA8L0k+PC9BPiAKLQotPGJyPjxCUj4KLTwvTEk+PExJPjxBIGhyZWY9Im1haWxzb3J0LnBsIiA+IDxJPgotbWFpbCBmaWxlIHNvcnRlcjogIDwvST4gPC9BPiAKLVRoaXMgdXRpbGl0eSBwYXJzZXMgYSBtYWlsIGZpbGUgYW5kIGNyZWF0ZXMgYW5vdGhlciBtYWlsIGZpbGUgY29udGFpbmluZyBvbmx5Ci10aGUgbWVzc2FnZXMgc3BlY2lmaWVkIGJ5IHBhcmFtYXRlcnMuICBGb3IgZXhhbXBsZSwgcGFyc2UgYSBtYWlsIGFyY2hpdmUgZmlsZQotKG9sZC1tYWlsLUphbi0yMDAwKSBhbmQgZXh0cmFjdCBhbGwgb2YgdGhlIG1lc3NhZ2VzIGZyb20gZGF2ZWtAeW91cm1vbS5jb20gb3IKLXdpdGggdGhlIHN1YmplY3QgTWFyaWxsaW9uLiAgVGhpcyBndXkgd2FzIHdoaXBwZWQgdXAgaW4gUGVybC4KLTxCUj48YnI+Ci0KLTwvTEk+PExJPjxBIGhyZWY9ImVsZWN0cm9uaWNOb3Rlcy5odG1sIiA+IDxJPgotRWxlY3Ryb25pYyBOb3RlczogIDwvST4gPC9BPiBUaGlzIGlzIGFuIG9yaWdpbmFsIGlkZWEgKGdhc3AhKSB0aGF0IEkgZGV2ZWxvcGVkIHdoaWNoIGlzIGEKLXN5c3RlbSBmb3Iga2VlcGluZyBsaXR0bGUgcmVtaW5kZXJzIHRvIHlvdXJzZWxmIGR1cmluZyB0aGUgZGF5IGFuZCBoYXZpbmcgdGhlbQotc2VudCB0byB5b3UgYWxsIGluIG9uZSBjb252ZW5pZW50IGZpbGUgdmlhIGVtYWlsIGF0IHRoZSBlbmQgb2YgdGhlIGRheS4gIAotPGJyPjxicj4KLQotPC9MST48TEk+PEEgaHJlZj0iaGVhZGVyLmh0bWwiID4gPEk+IEMvQysrIEhlYWRlciBmaWxlCi10byBJbXBsZW1lbnRhdGlvbiBmaWxlIGNvbnZlcnRlcjogPC9JPiA8L0E+Ci1UaGlzIGlzIGEgdmVyeSB1c2VmdWwgdG9vbCB3cml0dGVuIGluIEMrKyB0aGF0IGNvbnZlcnRzIC5oIGZpbGVzIHRvIGVtcHR5Ci1pbXBsZW1lbnRhdGlvbiAoLkMpIGZpbGVzLiAgCi08QlI+PEJSPgotPC9MST48TEk+PEEgaHJlZj0ibWF0cml4Lmh0bWwiID4gPEk+IE1hdHJpeCBNYW5pcHVsYXRpb24KLVBhY2thZ2U6IDwvST48L0E+IFRoaXMgaXMgYSBwYWNrYWdlIHRoYXQgZG9lcyBhbGwgc29ydHMgb2YgY29vbCBtYW5pcHVsYXRpb25zCi13aXRoIG1hdHJpY2VzLCBzdWNoIGFzIEdhdXNzaWFuIEVsaW1pbmF0aW9uLCBOb3JtYWwgRXF1YXRpb25zLCBWYW5kZXJtb25kZQotTWF0cmljZXMsIENob2xlc2t5IEZhY3Rvcml6YXRpb24sIEVycm9yIEFuYWx5c2lzLCBhbmQgbW9yZSBzdHVmZiB0aGFuIHlvdSB3b3VsZAotZXZlciB3YW50IHRvIGRvIHdpdGggYSBtYXRyaXguICBJdCBpcyB3cml0dGVuIGluIGdvb2Qgb2wnIEMuCi0KLTxCUiA+PEJSICA+Ci08L0xJPjxMST4gCi08QSBocmVmPSJsaXNwLmh0bWwiID4gPEk+U2V0IE9wZXJhdGlvbnM6IDwvST48L0E+IDxJPjwvST4gQSBwcm9ncmFtIHRoYXQgcGVyZm9ybXMgc2V0Ci1vcGVyYXRpb25zIG9uIGEgbGlzdC4gIFRoaXMgaXMgd3JpdHRlbiBpbiBMaXNwLCBvZiBhbGwgdGhpbmdzLiAgVGhlcmUncyBhbHNvCi1zb21lIGV4YW1wbGVzIG9mIG15IG93biBpbnRlcnByZXRhdGlvbnMgb2Ygc29tZSBMaXNwIGZ1bmN0aW9ucy4gTGlzcCBpcyBhIGdvb2QKLWxhbmd1YWdlIGZvciBBSSBhbmQgdGhpbmdzIG9mIHRoYXQgbmF0dXJlLiAgCi1JdCByZWxpZXMgaGVhdmlseSBvbiByZWN1cnNpb24sIHNvIGl0IHRha2VzIGEgZGlmZmVyZW50Ci1taW5kc2V0IHRvIHByb2dyYW0gaW4gdGhpcyBsYW5ndWFnZS4gIEJ1dCB1c2VkIGNvcnJlY3RseSBhbmQgZm9yIGl0cyBpbnRlbmRlZAotcHVycG9zZSwgTGlzcCBpcyBhIHZlcnkgdW5pcXVlIGFuZCBwb3dlcmZ1bCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KLTxCUiAgID48QlIgICAgPgotCi08L0xJPjxMST4gCi08QSBocmVmPSJsb2MuaHRtbCIgPiA8ST4gTGluZXMgT2YgQ29kZSBDb3VudGVyOgotPC9JPjwvQT48ST48L0k+ICBUaGlzIGlzIGlzIExPQyBjb3VudGVyIHRoYXQgSSB3cm90ZSBpbiBQZXJsIHRoYXQgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mCi11bmNvbW1lbnRlZCBsaW5lcyBvZiBjb2RlIGluIGEgcHJvZ3JhbS4gIFRoaXMgd29ya3MgZm9yIGFueSBwcm9ncmFtbWluZwotbGFuZ3VhZ2UgYXMgeW91IGNhbiBzdXBwbHkgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGlzCi1hbiBleHRyZW1lbHkgdXNlZnVsIHByb2dyYW0gZm9yIHVzZSBpbiBzb2Z0d2FyZSBtZXRyaWNzLgotPEJSIGFiYz0iZGVmIj48QlIgYWJjPSJkZWYiID4KLQotPC9MST48TEk+PEEgaHJlZj0ibGlud2luLmh0bWwiPiA8ST4gU2ltcGxlICpuaXggdG8KLXdpbmRvd3MgdGV4dCBjb252ZXJ0ZXIgPC9JPjwvQT4gVGhpcyB0YWtlcyBmaWxlcyB3cml0dGVuIGluIExpbnV4IChhbmQgaW4gdmkgb3IKLSAgICAgICAgYW4gZWRpdG9yIHdpdGggYXV0b21hdGljIGxpbmUgYnJlYWtzIGFmdGVyIGV2ZXJ5IDgwIG9yIHNvIGNoYXJzKSBhbmQKLWZvcm1hdHMgaXQgc28gaXQgd2lsbCBkaXNwbGF5IHByb3Blcmx5IGluIFdpbmRvd3MgZW52aXJvbm1lbnQgc2hvdWxkIHlvdSBiZQotZm9yY2VkIHRvIGRvIHNvLiAgCi1QZXJ1c2UgKHBlcnVzZSwgbWluZCB5b3UuICBJIGRvbid0IHdhbnQgdG8gc2VlIGFueSA8ST5icm93c2luZzwvST4pIHRoZSBzb3VyY2UgaGVyZTogPEEKLWhyZWY9Imxpbndpbi5jIj4gPEk+IGxpbndpbi5jIAotIDwvST48L0E+IAotPEJSIGFiYyA9ICJkZWYiPjxCUiBhYmMgID0gICJkZWYiPgotCi0KLTwvTEk+PExJPjxCPiBSZWdyZXNzaW9uIGFuZCBTdGFuZGFyZCBEZXZpYXRpb246IDwvQj4gCi1BIG1hdGggY2xhc3Mgd3JpdHRlbiBpbiBKYXZhIHVzaW5nIE9iamVjdCBPcmllbnRlZCBkZXNpZ24gcHJpbmNpcGxlcy4gIFRoZSBtYWluCi1hc3BlY3RzIG9mIHRoZSBwcm9ncmFtIGFyZSBmb3IgZmlndXJpbmcgb3V0IFN0YW5kYXJkIERldmlhdGlvbiBhbmQgdGhlCi1SZWdyZXNzaW9uLCB3aGVuIHlvdSBpbnB1dCBhIHNldCBvZiB4IGFuZCB5IHZhbHVlcy4gIFJlZ3Jlc3Npb24gY2FsY3VsYXRpb25zCi1hcmUgb2Z0ZW4gdXNlZCBpbiBTb2Z0d2FyZSBNZXRyaWNzIHRvIHRvIGhlbHAgaW4gZXN0aW1hdGluZyBsZW5ndGggb2YgY29kZSwgYW5kCi10aW1lIHNwZW50IG9uIHRoZSBwcm9qZWN0LjxCUj4KLQotPEEgaHJlZj0iUmVncmVzc2lvbkNhbGMuaHRtbCIgPiAKLTxJPiBSZWdyZXNzaW9uQ2FsYy5qYXZhIDwvST4gPC9BPiAgVGhpcyBpcyB0aGUgbWFpbiBjbGFzcyB0aGF0IGRvZXMgdGhlCi1jYWxjdWxhdGlvbnMuICBJdCBjYWxjdWxhdGVzIEIxLCBCMCwgYW5kIHJeMiwgd2hpY2ggYXJlIGFsbCBwYXJhbWV0ZXJzIG9mCi1SZWdyZXNzaW9uLgotPEJSIGFiYz0gImRlZiI+Ci08QSBocmVmPSJNYXRoQ2xhc3MuaHRtbCIgPiAKLTxJPiBNYXRoQ2xhc3MuamF2YSA8L0k+ICA8L0E+IFRoaXMgaXMgc2ltcGx5IGEgc21hbGwgY2xhc3Mgd2hpY2ggY2FsY3VsYXRlcyB0aGUKLW1lYW4gYW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYSB2ZWN0b3Igb2YgbnVtYmVycy4gIFRoaXMgaXMgdXNlZCBieSB0aGUKLVJlZ3Jlc3Npb25DYWxjIGNsYXNzIGluIGl0cyBjYWxjdWxhdGlvbnMuCi08QlIgYWJjID0iZGVmIj4KLTxBIGhyZWY9IlJlZ3Jlc3Npb24uaHRtbCIgPiAKLTxJPiBSZWdyZXNzaW9uLmphdmEgPC9JPiAgPC9BPiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgbWFpbiByb3V0aW5lLCBvciB3aGVyZSB0aGUKLXByb2dyYW0gc3RhcnRzLiAgSXQgcHV0cyBhbGwgb2YgdGhlIGlucHV0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbnRvIHR3bwotc2VwYXJhdGUgdmVjdG9ycyBmb3IgdGhlIHggYW5kIHkgdmFsdWVzLjxCUj48QlI+Ci0KLUFuIGV4YW1wbGUgb2YgdGhlIHVzYWdlIG9mIHRoaXMgcHJvZ3JhbSB3b3VsZCBiZTogIDxCUj4KLUlmIHlvdSBoYWQgYSBoaXN0b3J5IG9mIGRhdGEgb24geW91ciBlc3RpbWF0ZWQgTGluZXMgT2YgQ29kZSAoTE9DKSBwZXIgY2xhc3MsCi1hcyB3ZWxsIGFzIHRoZSBhY3R1YWwgTE9DIHBlciBjbGFzcywgeW91IGNvdWxkIHB1dCB0aGVzZSBpbiB0aGUgZm9ybXVsYSBhbmQKLWZpbmQgb3V0IHRoZSBSZWdyZXNzaW9uIG9mIHRoZSBkYXRhIChvciBob3cgZmFyIGF3YXkgZWFjaCBwb2ludCBpcyBmcm9tIHRoZQotZnVuY3Rpb24gbGluZS4pICAKLQotWW91IHdvdWxkIGlucHV0IHRoZSBkYXRhIGZvciB0aGUgZXN0aW1hdGVkIExPQywgc2VwYXJhdGVkIGJ5IGEgY29tbWEsIGFuZAotZm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBMT0MuICBUaGUgcmVzdWx0IHdvdWxkIGJlIHRoZSByZWdyZXNzaW9uIGNhbGN1bGF0aW9uLgotPFBSRT4KLSVqYXZhIFJlZ3Jlc3Npb24gMTMwIDY1MCA5OSAxNTAgLCAxODYgNjk5IDEzMiAyNzIgCi0KLVggRGF0YSA9IFsgMTMwLjAgNjUwLjAgOTkuMCAxNTAuMCBdCi1ZIERhdGEgPSBbIDE4Ni4wIDY5OS4wIDEzMi4wIDI3Mi4wIF0KLU4gPSA0Ci1CZXRhMCA9IDcyLjY5MDUwMzA3ODAzNjEKLUJldGExID0gMC45NzAxMDQ5NDQzMDMwNjY3Ci1yU3F1YXJlZCA9IDIyMTIuNTA0Njk3NjczNjg5Ci08L1BSRT4KLQotPC9MST48L1VMPgotCi08SFI+Ci08SDI+IEtub3dsZWRnZSA8L0gyPgotPFVMPgotPExJPjxBIGhyZWY9InZpbS5odG1sIj4gPEk+IEVzcG91c2luZyBteSBsb3ZlCi1mb3IgdmltISA8L0k+PC9BPiB2aW0ganVzdCByb2Nrcywgb2theS4gIFJlYWxseS4gIElmIEkgaGFkIHRvIGNob29zZSBiZXR3ZWVuLAotbGlrZSwgc2V4LCBvciB1c2luZyB2aW0tLWxldCdzIGp1c3Qgc2F5IEknZCBiZSBvbmUgbWFzdGVyZnVsLWVkaXRpbmcgbW9uay4gCi08QlI+PEJSPgotCi0KLTwvTEk+PExJPgotPEEgaHJlZj0iTUJSLUxJTE8udHh0Ij4gCi08ST4gTG9zdCBMSUxPPyAgUmVjb3Zlci48L0k+ICA8L0E+IElmIHlvdSBoYXZlIExpbnV4IGluc3RhbGxlZCBpbiBhIG11bHRpLWJvb3QKLWVudmlyb25tZW50LCBhbmQgeW91IG92ZXJ3cml0ZSB5b3VyIE1CUiwgeW91IGNhbiBsb3NlIExJTE8uICBJIHJlaW5zdGFsbGVkCi1XaW5kb3dzIChoZXksIEkgbmVlZGVkIHRvIHBsYXkgRmluYWwgRmFudGFzeSBWSUlJISkgYW5kIGNvdWxkbid0IGJvb3QgaW50bwotTGludXguICBIZXJlJ3MgaG93IEkgcmVjb3ZlcmVkLgotPEJSPjxCUj4KLQotCi0KLTwvTEk+PC9VTD48L2JvZHk+Ci08aHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2VtcHR5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2VtcHR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9lbXB0eS54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjJkNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTxyb290PgotCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgYW5kIGZvbGxvd2VkIGJ5IHRleHQgLS0+Ci0JCWRvbGxhcnMKLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+Ci0JCTxudW1iZXIgLz4KLQkJPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+PCEtLSBpbmxpbmUgY29tbWVudCAtLT48L3ByaWNlPgotCTx0aD4KLQkJPGI+RmFocmVuaGVpdDwhLS0gdGVzdGluZyAtLT48L2I+Ci0JPC90aD4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkZGFmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPHJvb3Q+Ci0JPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPgotCTxwcmljZSB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlCi0JCXVuaXRzPSJ1c2QiCi0JCXVuaXRzPSJ1c2QiPgotCQk2Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlCi0JCXVuaXRzPSJ1c2QiCi0JCXVuaXRzPSJ1c2QiPgotCQk2Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IGFuZCBmb2xsb3dlZCBieSB0ZXh0IC0tPgotCQlkb2xsYXJzCi0JPC9wcmljZT4KLQk8cHJpY2UKLQkJdW5pdHM9InVzZCIKLQkJdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPgotCQk8bnVtYmVyIC8+Ci0JCTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPjwhLS0gaW5saW5lIGNvbW1lbnQgLS0+PC9wcmljZT4KLQk8dGg+Ci0JCTxiPkZhaHJlbmhlaXQ8IS0tIHRlc3RpbmcgLS0+PC9iPgotCTwvdGg+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWExMWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxyb290PjxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+ICAgPCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPgotPHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIj48bnVtYmVyLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiPjxudW1iZXIvPiAgIDwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCI+ICAgPG51bWJlci8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCBhbmQgZm9sbG93ZWQgYnkgdGV4dCAtLT5kb2xsYXJzPC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj48bnVtYmVyLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48dW5pdC8+PC9wcmljZT4KLTxwcmljZT48bnVtYmVyLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48dW5pdC8+PC9wcmljZT4KLTxwcmljZT48bnVtYmVyLz4KLTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPjx1bml0Lz48L3ByaWNlPgotPHByaWNlPjwhLS0gaW5saW5lIGNvbW1lbnQgLS0+PC9wcmljZT4KLTx0aD48Yj5GYWhyZW5oZWl0IDwhLS0gdGVzdGluZyAtLT48L2I+PC90aD4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3MueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEyYzk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9MTIzNDU+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxCi0gICAgPC9ZZWFyPjwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Lz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9ICAgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9Lz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgbmFtZT1DcmFpZyAgICBwaG9uZSA9ICAgICA0MTYtNDQ4LTQ0MTQgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZSAgICBwaG9uZSA9ICAgICA0MTYtNDQ4LTQ0MTQgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZSAgID0gQ3JhaWcgICAgcGhvbmUvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciBuYW1lIHBob25lLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgWDU3MzkgbmFtZT0iQ3JhaWcgU2FsdGVyIiBwaG9uZT00MTYtNDQ4LTQ0MTQ+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGEKLSAgPC9jb3VudHJ5PjwvQWRkcmVzcz48L0JpbGxUbz48L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9cHJvbW90aW9uIHByaWNlPTU3PgotICAgIDxkZXNjcmlwdGlvbj5BIHdlZGRpbmcgcmluZzwvZGVzY3JpcHRpb24+PC9JdGVtPjwvSW52b2ljZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3NRdW90ZUF0dHJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFnc1F1b3RlQXR0cnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTc4MTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFnc1F1b3RlQXR0cnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDEKLSAgICA8L1llYXI+PC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iY3VzdE51bWJlciIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0gICAiY3VzdE51bWJlciIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0iY3VzdE51bWJlciIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAiY3VzdE51bWJlciIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iY3VzdE51bWJlciIgbmFtZT0iQ3JhaWciICAgIHBob25lID0gICAgICI0MTYtNDQ4LTQ0MTQiIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgICJYNTczOSIgbmFtZT0ibmFtZSIgICAgcGhvbmUgPSAgICAgIjQxNi00NDgtNDQxNCIgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgIlg1NzM5IiBuYW1lICAgPSAiQ3JhaWciICAgIHBob25lPSJwaG9uZSIvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iY3VzdE51bWJlciIgbmFtZT0ibmFtZSIgcGhvbmU9InBob25lIi8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgICJYNTczOSIgbmFtZT0iQ3JhaWcgU2FsdGVyIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYQotICA8L2NvdW50cnk+PC9BZGRyZXNzPjwvQmlsbFRvPjwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5BIHdlZGRpbmcgcmluZzwvZGVzY3JpcHRpb24+PC9JdGVtPjwvSW52b2ljZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGEyNmI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9MTIzNDU+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxCi0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0vPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0gICAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0vPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciBuYW1lPUNyYWlnICAgIHBob25lID0gICAgIDQxNi00NDgtNDQxNCAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICBYNTczOSBuYW1lICAgIHBob25lID0gICAgIDQxNi00NDgtNDQxNCAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICBYNTczOSBuYW1lICAgPSBDcmFpZyAgICBwaG9uZS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyIG5hbWUgcGhvbmUvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICBYNTczOSBuYW1lPSJDcmFpZyBTYWx0ZXIiIHBob25lPTQxNi00NDgtNDQxND4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYQotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9cHJvbW90aW9uIHByaWNlPTU3PgotICAgIDxkZXNjcmlwdGlvbj5BIHdlZGRpbmcgcmluZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmFmdGVyQ2xlYW51cC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5hZnRlckNsZWFudXAuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTkwNmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmFmdGVyQ2xlYW51cC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08VElUTEU+TG9naW48L1RJVExFPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvSEVBRD4NCi08Qk9EWSBiZ2NvbG9yPSIjZmZmZmNjIj4NCi08U0NSSVBUPg0KLSAgICAgIGZ1bmN0aW9uIHN1Ym1pdEZvcm0oZGVzdCl7DQotICAgICAgICAgZG9jdW1lbnQubXlGb3JtLmFjdGlvbiA9IGRlc3QNCi0gICAgICAgICBkb2N1bWVudC5teUZvcm0uc3VibWl0KCkNCi0gICAgICB9DQotICAgICAgPC9TQ1JJUFQ+DQotPENFTlRFUj4NCi08SDE+RGF0YWJhc2UgQ29ubmVjdGl2aXR5PC9IMT4NCi08SFI+DQotPC9DRU5URVI+DQotPFA+RW50ZXIgdGhlIHVzZXJuYW1lICZhbXA7IHBhc3N3b3JkIHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLjxCUj4NCi1UaGlzIHVzZXJuYW1lICZhbXA7IHBhc3N3b3JkIHNob3VsZCBiZSB0aGUgb25lIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlDQotZGF0YWJhc2UuPC9QPg0KLTwlIGlmKHNlc3Npb24uZ2V0QXR0cmlidXRlKCJlcnJvcl9tZXNzYWdlIikgIT0gbnVsbCkgeyAlPg0KLTxQPiogSW5jb3JyZWN0IExvZ2luIG9yIFBhc3N3b3JkPC9QPg0KLTwlICBzZXNzaW9uLnJlbW92ZUF0dHJpYnV0ZSgiZXJyb3JfbWVzc2FnZSIpOw0KLSAgICAgIH0gICU+DQotPEZPUk0gbmFtZT0ibXlGb3JtIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iLi4vTG9naW4vTG9nb25TZXJ2bGV0Ij48SU5QVVQNCi0JdHlwZT0iaGlkZGVuIiBuYW1lPSJjb21tYW5kIg0KLQl2YWx1ZT0nPCU9c2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImZpbmFsX3BhZ2UiKSAlPic+IDxJTlBVVCB0eXBlPSJoaWRkZW4iDQotCW5hbWU9InByZXZpb3VzX3BhZ2UiIHZhbHVlPSJMb2dpbi9Mb2dpbi5qc3AiPiA8QQ0KLQlocmVmPSJqYXZhc2NyaXB0OnN1Ym1pdEZvcm0oJy4uL0xvZ2luL0xvZ29uU2VydmxldCcpIj5PSzwvQT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi0JPFRCT0RZPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHVzZXJuYW1lOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InVzZXJJRCIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHBhc3N3b3JkOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IGRyaXZlcm5hbWU6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0iZHJpdmVyIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCINCi0JCQkJdmFsdWU9IkNPTS5pYm0uZGIyLmpkYmMuYXBwLkRCMkRyaXZlciI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gdXJsOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9InVybCIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiDQotCQkJCXZhbHVlPSJqZGJjOmRiMjpXU1NBTVBMRSI+PC9URD4NCi0JCTwvVFI+DQotCTwvVEJPRFk+DQotPC9UQUJMRT4NCi08L0ZPUk0+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzOWE2N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPFRJVExFPkxvZ2luPC9USVRMRT4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L0hFQUQ+DQotPEJPRFkgYmdjb2xvcj0iI2ZmZmZjYyI+DQotPFNDUklQVD4NCi0gICAgICBmdW5jdGlvbiBzdWJtaXRGb3JtKGRlc3Qpew0KLSAgICAgICAgIGRvY3VtZW50Lm15Rm9ybS5hY3Rpb24gPSBkZXN0DQotICAgICAgICAgZG9jdW1lbnQubXlGb3JtLnN1Ym1pdCgpDQotICAgICAgfQ0KLSAgICAgIDwvU0NSSVBUPg0KLTxDRU5URVI+DQotPEgxPkRhdGFiYXNlIENvbm5lY3Rpdml0eTwvSDE+DQotPEhSPg0KLTwvQ0VOVEVSPg0KLTxQPkVudGVyIHRoZSB1c2VybmFtZSAmYW1wOyBwYXNzd29yZCB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZS48QlI+DQotVGhpcyB1c2VybmFtZSAmYW1wOyBwYXNzd29yZCBzaG91bGQgYmUgdGhlIG9uZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSBkYXRhYmFzZS48L1A+DQotPCUgaWYoc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImVycm9yX21lc3NhZ2UiKSAhPSBudWxsKSB7ICU+DQotPFA+KiBJbmNvcnJlY3QgTG9naW4gb3IgUGFzc3dvcmQ8L1A+DQotPCUgIHNlc3Npb24ucmVtb3ZlQXR0cmlidXRlKCJlcnJvcl9tZXNzYWdlIik7DQotICAgICAgfSAgJT4NCi08Rk9STSBuYW1lPSJteUZvcm0iIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIuLi9Mb2dpbi9Mb2dvblNlcnZsZXQiPjxJTlBVVCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSc8JT1zZXNzaW9uLmdldEF0dHJpYnV0ZSgiZmluYWxfcGFnZSIpICU+Jz4gPElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0icHJldmlvdXNfcGFnZSIgdmFsdWU9IkxvZ2luL0xvZ2luLmpzcCI+IDxBIGhyZWY9ImphdmFzY3JpcHQ6c3VibWl0Rm9ybSgnLi4vTG9naW4vTG9nb25TZXJ2bGV0JykiPk9LPC9BPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLQk8VEJPRFk+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gdXNlcm5hbWU6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0idXNlcklEIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gcGFzc3dvcmQ6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gZHJpdmVybmFtZTogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJkcml2ZXIiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIiB2YWx1ZT0iQ09NLmlibS5kYjIuamRiYy5hcHAuREIyRHJpdmVyIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiB1cmw6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0idXJsIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCIgdmFsdWU9ImpkYmM6ZGIyOldTU0FNUExFIj48L1REPg0KLQkJPC9UUj4NCi0JPC9UQk9EWT4NCi08L1RBQkxFPg0KLTwvRk9STT4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZUNoYXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvb25lQ2hhci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNjVlZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvb25lQ2hhci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvb25lU3BhY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvb25lU3BhY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTE5ZWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL29uZVNwYWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlckNvbXByZXNzRW1wdHlFbGVtZW50VGFncy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlckNvbXByZXNzRW1wdHlFbGVtZW50VGFncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTljN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+WE1JIFRvb2xraXQ8L1hNSS5leHBvcnRlcj4KLQotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24gLz4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24gLz4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLm1ldGFtb2RlbCB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQotCTxYTUkuY29udGVudD4KLQkJPE1vZGVsX01hbmFnZW1lbnQuUGFja2FnZSB4bWkuaWQ9Il8xIiB4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCQllamIKLQkJCTwvRm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQudmlzaWJpbGl0eSB4bWkudmFsdWU9InB1YmxpYyIgLz4KLQkJCTxYTUkuZXh0ZW5zaW9uIHhtaS5leHRlbmRlcj0iSVhUIiB4bWkuZXh0ZW5kZXJJRD0iIj4KLQkJCQk8aXh0cyBzPSJJREwiPgotCQkJCQk8aXh0dHYgdD0idXVpZCIKLQkJCQkJCXY9IkRDRTpkOGEyNTY2MC04ODI2LTExZTEtMDAwMC0wMDVkOWU2YWRlYzQ6MSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZSI+Ci0JCQkJCTxpeHR0diB0PSJxdWlkIiB2PSIzNzgwRTI3MjAzMkQiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc191bml0IiB2PSJUUlVFIiAvPgotCQkJCQk8aXh0dHYgdD0iZmlsZV9uYW1lIgotCQkJCQkJdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc19sb2FkZWQiIHY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0diB0PSJjaGFyU2V0IiB2PSIwIiAvPgotCQkJCQk8aXh0dHYgdD0idmVyc2lvbiIgdj0iNDMiIC8+Ci0JCQkJCTxpeHR0diB0PSJfd3JpdHRlbiIgdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+Ci0JCQkJPC9peHRzPgotCQkJPC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2NmJhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+WE1JIFRvb2xraXQ8L1hNSS5leHBvcnRlcj4KLQotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLm1ldGFtb2RlbCB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQotCTxYTUkuY29udGVudD4KLQkJPE1vZGVsX01hbmFnZW1lbnQuUGFja2FnZSB4bWkuaWQ9Il8xIiB4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT5lamI8L0ZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50LnZpc2liaWxpdHkgeG1pLnZhbHVlPSJwdWJsaWMiIC8+Ci0JCQk8WE1JLmV4dGVuc2lvbiB4bWkuZXh0ZW5kZXI9IklYVCIgeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2IHQ9InV1aWQiIHY9IkRDRTpkOGEyNTY2MC04ODI2LTExZTEtMDAwMC0wMDVkOWU2YWRlYzQ6MSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZSI+Ci0JCQkJCTxpeHR0diB0PSJxdWlkIiB2PSIzNzgwRTI3MjAzMkQiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc191bml0IiB2PSJUUlVFIiAvPgotCQkJCQk8aXh0dHYgdD0iZmlsZV9uYW1lIiB2PSImIzM0OyRFQ0xJUFNFX1JFU09VUkNFU1xcZVRvb2xzIEVKQiBsaWJyYXJpZXNcXGVqYnNjaGVtYS5jYXQmIzM0OyIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX2xvYWRlZCIgdj0iVFJVRSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZVBldGFsIj4KLQkJCQkJPGl4dHR2IHQ9ImNoYXJTZXQiIHY9IjAiIC8+Ci0JCQkJCTxpeHR0diB0PSJ2ZXJzaW9uIiB2PSI0MyIgLz4KLQkJCQkJPGl4dHR2IHQ9Il93cml0dGVuIiB2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz4KLQkJCQk8L2l4dHM+Ci0JCQk8L1hNSS5leHRlbnNpb24+Ci0JCTwvTW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlPgotCTwvWE1JLmNvbnRlbnQ+Ci0KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc0Zvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzA4ZjZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc0Zvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08WE1JIHhtaS52ZXJzaW9uPSIxLjAiIHRpbWVzdGFtcD0iVHVlIE5vdiAyOCAwODoxOToyMSBFU1QgMjAwMCI+Ci0KLQk8WE1JLmhlYWRlcj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlcj5YTUkgVG9vbGtpdDwvWE1JLmV4cG9ydGVyPgotCi0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5tZXRhbW9kZWwgeG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQk8L1hNSS5oZWFkZXI+Ci0KLQk8WE1JLmNvbnRlbnQ+Ci0JCTxNb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2UgeG1pLmlkPSJfMSIgeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQkJZWpiCi0JCQk8L0ZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50LnZpc2liaWxpdHkgeG1pLnZhbHVlPSJwdWJsaWMiIC8+Ci0JCQk8WE1JLmV4dGVuc2lvbiB4bWkuZXh0ZW5kZXI9IklYVCIgeG1pLmV4dGVuZGVySUQ9IiI+Ci0JCQkJPGl4dHMgcz0iSURMIj4KLQkJCQkJPGl4dHR2IHQ9InV1aWQiCi0JCQkJCQl2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYgdD0icXVpZCIgdj0iMzc4MEUyNzIwMzJEIiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfdW5pdCIgdj0iVFJVRSIgLz4KLQkJCQkJPGl4dHR2IHQ9ImZpbGVfbmFtZSIKLQkJCQkJCXY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfbG9hZGVkIiB2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYgdD0iY2hhclNldCIgdj0iMCIgLz4KLQkJCQkJPGl4dHR2IHQ9InZlcnNpb24iIHY9IjQzIiAvPgotCQkJCQk8aXh0dHYgdD0iX3dyaXR0ZW4iIHY9IiYjMzQ7Um9zZSA2LjUuOTIzMi4xMCYjMzQ7IiAvPgotCQkJCTwvaXh0cz4KLQkJCTwvWE1JLmV4dGVuc2lvbj4KLQkJPC9Nb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2U+Ci0JPC9YTUkuY29udGVudD4KLQotPC9YTUk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNWJiZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08WE1JCi0JeG1pLnZlcnNpb249IjEuMCIKLQl0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCi0JPFhNSS5oZWFkZXI+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXI+WE1JIFRvb2xraXQ8L1hNSS5leHBvcnRlcj4KLQotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbgotCQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCQl4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uCi0JCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJCXhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24KLQkJCQkJeG1pLm5hbWU9IlVNTCIKLQkJCQkJeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uCi0JCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJCXhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkubWV0YW1vZGVsCi0JCQkJeG1pLm5hbWU9IlVNTCIKLQkJCQl4bWkudmVyc2lvbj0iMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQotCTxYTUkuY29udGVudD4KLQkJPE1vZGVsX01hbmFnZW1lbnQuUGFja2FnZQotCQkJeG1pLmlkPSJfMSIKLQkJCXhtaS51dWlkPSJOYW1lOmVqYiI+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJCWVqYgotCQkJPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIiAvPgotCQkJPFhNSS5leHRlbnNpb24KLQkJCQl4bWkuZXh0ZW5kZXI9IklYVCIKLQkJCQl4bWkuZXh0ZW5kZXJJRD0iIj4KLQkJCQk8aXh0cyBzPSJJREwiPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9InV1aWQiCi0JCQkJCQl2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9InF1aWQiCi0JCQkJCQl2PSIzNzgwRTI3MjAzMkQiIC8+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0iaXNfdW5pdCIKLQkJCQkJCXY9IlRSVUUiIC8+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0iZmlsZV9uYW1lIgotCQkJCQkJdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiIC8+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0iaXNfbG9hZGVkIgotCQkJCQkJdj0iVFJVRSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZVBldGFsIj4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJjaGFyU2V0IgotCQkJCQkJdj0iMCIgLz4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJ2ZXJzaW9uIgotCQkJCQkJdj0iNDMiIC8+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0iX3dyaXR0ZW4iCi0JCQkJCQl2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz4KLQkJCQk8L2l4dHM+Ci0JCQk8L1hNSS5leHRlbnNpb24+Ci0JCTwvTW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlPgotCTwvWE1JLmNvbnRlbnQ+Ci0KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI5NWQ1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08WE1JIHhtaS52ZXJzaW9uPSIxLjAiIHRpbWVzdGFtcD0iVHVlIE5vdiAyOCAwODoxOToyMSBFU1QgMjAwMCI+Ci0KLQk8WE1JLmhlYWRlcj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlcj4KLQkJCVhNSSBUb29sa2l0Ci0JCQk8L1hNSS5leHBvcnRlcj4KLQkJCQotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+ICAgIDEuMDUgICAgPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+IDwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lID0JIlVNTCIgeG1pLnZlcnNpb24gPSAiMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWUgPQkiVU1MIiB4bWkudmVyc2lvbiA9ICIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWUgPQkiVU1MIiB4bWkudmVyc2lvbiA9ICIxLjEiPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZSA9CSJVTUwiIHhtaS52ZXJzaW9uID0gIjEuMSI+ICAgIDEuMDUgICAgPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLm1ldGFtb2RlbCB4bWkubmFtZSAgICA9CQkJIlVNTCIgeG1pLnZlcnNpb24KLQkJPQotCQkiMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQotCTxYTUkuY29udGVudD4KLQkJPE1vZGVsX01hbmFnZW1lbnQuUGFja2FnZQotCQkJeG1pLmlkPSJfMSIJCQkJCXhtaS51dWlkPSJOYW1lOmVqYiI+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPmVqYiAgICA8L0ZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50LnZpc2liaWxpdHkgeG1pLnZhbHVlPSJwdWJsaWMiLz4KLQkJCTxYTUkuZXh0ZW5zaW9uIHhtaS5leHRlbmRlcj0iSVhUIiB4bWkuZXh0ZW5kZXJJRD0iIj4KLQkJCQk8aXh0cyBzPSJJREwiPgotCQkJCQk8aXh0dHYgdD0idXVpZCIgdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIgotCQkJCQkvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJxdWlkIgotCQkJCQkJdj0iMzc4MEUyNzIwMzJEIgotCQkJCQkJLz4KLQkJCQkJPGl4dHR2Ci0JCQkJCXQ9ImlzX3VuaXQiCi0JCQkJCXY9IlRSVUUiCi0JCQkJCS8+Ci0JCQkJCTxpeHR0diB0PSJmaWxlX25hbWUiCi0JCQkJCQl2PSImIzM0OyRFQ0xJUFNFX1JFU09VUkNFU1xcZVRvb2xzIEVKQiBsaWJyYXJpZXNcXGVqYnNjaGVtYS5jYXQmIzM0OyIKLQkJCQkJCQkJCS8+Ci0JCQkJCTxpeHR0diB0PSJpc19sb2FkZWQiIHY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0diB0PSJjaGFyU2V0IiB2PSIwIiAvPgotCQkJCQkJCTxpeHR0diB0PSJ2ZXJzaW9uIiB2PSI0MyIgLz4KLQk8aXh0dHYgdD0iX3dyaXR0ZW4iIHY9IiYjMzQ7Um9zZSA2LjUuOTIzMi4xMCYjMzQ7IiAvPjwvaXh0cz48L1hNSS5leHRlbnNpb24+Ci0JCTwvTW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlPgotCTwvWE1JLmNvbnRlbnQ+Ci0KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsMi5hZnRlckNvbXByZXNzRW1wdHlFbGVtZW50VGFncy1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwyLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNDlmOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwyLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPFhNSSB4bWkudmVyc2lvbj0iMS4wIiB0aW1lc3RhbXA9IlR1ZSBOb3YgMjggMDg6MTk6MjEgRVNUIDIwMDAiPgotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiAvPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiAvPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLm1ldGFtb2RlbCB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQk8WE1JLmNvbnRlbnQgLz4KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjliZTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08WE1JIHhtaS52ZXJzaW9uPSIxLjAiIHRpbWVzdGFtcD0iVHVlIE5vdiAyOCAwODoxOToyMSBFU1QgMjAwMCI+Ci0KLQk8WE1JLmhlYWRlcj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlcj5YTUkgVG9vbGtpdDwvWE1JLmV4cG9ydGVyPgotCQkJCi0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWUgPQkiVU1MIiB4bWkudmVyc2lvbiA9ICIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZSA9CSJVTUwiIHhtaS52ZXJzaW9uID0gIjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLm1ldGFtb2RlbCB4bWkubmFtZSAgICA9CQkJIlVNTCIgeG1pLnZlcnNpb24KLQkJPQotCQkiMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQotCTxYTUkuY29udGVudD4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhZDJmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzQW5kQ2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzQW5kQ2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzA0ZWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NwYWNlc0FuZENoYXJzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSAgIGFiYyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3N1YnNjcmlwdGlvbi5hZnRlckNsZWFudXAuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNTdmZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiBsYW5ndWFnZT0iamF2YSIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9hcHAudGxkIiBwcmVmaXg9ImFwcCIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtYmVhbi50bGQiIHByZWZpeD0iYmVhbiIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtaHRtbC50bGQiIHByZWZpeD0iaHRtbCIlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtbG9naWMudGxkIiBwcmVmaXg9ImxvZ2ljIiU+DQotPGFwcDpjaGVja0xvZ29uIC8+DQotDQotPCUtLSBJbiByZWFsIGxpZmUsIHRoZXNlIHdvdWxkIGJlIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UgLS0lPg0KLTwlDQotICBqYXZhLnV0aWwuQXJyYXlMaXN0IGxpc3QgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdCgpOw0KLSAgbGlzdC5hZGQobmV3IG9yZy5hcGFjaGUuc3RydXRzLnV0aWwuTGFiZWxWYWx1ZUJlYW4oIklNQVAgUHJvdG9jb2wiLCAiaW1hcCIpKTsNCi0gIGxpc3QuYWRkKG5ldyBvcmcuYXBhY2hlLnN0cnV0cy51dGlsLkxhYmVsVmFsdWVCZWFuKCJQT1AzIFByb3RvY29sIiwgInBvcDMiKSk7DQotICBwYWdlQ29udGV4dC5zZXRBdHRyaWJ1dGUoInNlcnZlclR5cGVzIiwgbGlzdCk7DQotJT4NCi0NCi08aHRtbDpodG1sPg0KLTxIRUFEPg0KLTxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCINCi0JdmFsdWU9IkNyZWF0ZSI+DQotCTxUSVRMRT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmNyZWF0ZSIgLz48L1RJVExFPg0KLTwvbG9naWM6ZXF1YWw+DQotPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0Ig0KLQl2YWx1ZT0iRGVsZXRlIj4NCi0JPFRJVExFPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuZGVsZXRlIiAvPjwvVElUTEU+DQotPC9sb2dpYzplcXVhbD4NCi08bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiIgc2NvcGU9InJlcXVlc3QiDQotCXZhbHVlPSJFZGl0Ij4NCi0JPFRJVExFPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuZWRpdCIgLz48L1RJVExFPg0KLTwvbG9naWM6ZXF1YWw+DQotPGh0bWw6YmFzZSAvPg0KLTwvSEVBRD4NCi08Qk9EWSBiZ2NvbG9yPSJ3aGl0ZSI+DQotDQotPGh0bWw6ZXJyb3JzIC8+DQotDQotPGh0bWw6Zm9ybSBhY3Rpb249Ii9zYXZlU3Vic2NyaXB0aW9uIiBmb2N1cz0iaG9zdCI+DQotCTxodG1sOmhpZGRlbiBwcm9wZXJ0eT0iYWN0aW9uIiAvPg0KLQk8VEFCTEUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+DQotDQotCQk8VFI+DQotCQkJPFRIIGFsaWduPSJyaWdodCI+PGJlYW46bWVzc2FnZSBrZXk9InByb21wdC51c2VybmFtZSIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxiZWFuOndyaXRlIG5hbWU9InVzZXIiIHByb3BlcnR5PSJ1c2VybmFtZSINCi0JCQkJZmlsdGVyPSJ0cnVlIiAvPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbEhvc3RuYW1lIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iDQotCQkJCXByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0JCQkJPGh0bWw6dGV4dCBwcm9wZXJ0eT0iaG9zdCIgc2l6ZT0iNTAiIC8+DQotCQkJPC9sb2dpYzplcXVhbD4gPGxvZ2ljOm5vdEVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iDQotCQkJCXByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0JCQkJPGh0bWw6aGlkZGVuIHByb3BlcnR5PSJob3N0IiB3cml0ZT0idHJ1ZSIgLz4NCi0JCQk8L2xvZ2ljOm5vdEVxdWFsPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbFVzZXJuYW1lIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6dGV4dCBwcm9wZXJ0eT0idXNlcm5hbWUiIHNpemU9IjUwIiAvPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbFBhc3N3b3JkIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6cGFzc3dvcmQgcHJvcGVydHk9InBhc3N3b3JkIiBzaXplPSI1MCIgLz48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxTZXJ2ZXJUeXBlIiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6c2VsZWN0IHByb3BlcnR5PSJ0eXBlIj4NCi0JCQkJPGh0bWw6b3B0aW9ucyBjb2xsZWN0aW9uPSJzZXJ2ZXJUeXBlcyIgcHJvcGVydHk9InZhbHVlIg0KLQkJCQkJbGFiZWxQcm9wZXJ0eT0ibGFiZWwiIC8+DQotCQkJPC9odG1sOnNlbGVjdD48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0LmF1dG9Db25uZWN0IiAvPjo8L1RIPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGh0bWw6Y2hlY2tib3ggcHJvcGVydHk9ImF1dG9Db25uZWN0IiAvPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQkJPFRSPg0KLQkJCTxURCBhbGlnbj0icmlnaHQiPjxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIg0KLQkJCQlwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotCQkJCTxodG1sOnN1Ym1pdD4NCi0JCQkJCTxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIgLz4NCi0JCQkJPC9odG1sOnN1Ym1pdD4NCi0JCQk8L2xvZ2ljOmVxdWFsPiA8bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0JCQkJc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJEZWxldGUiPg0KLQkJCQk8aHRtbDpzdWJtaXQ+DQotCQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLmNvbmZpcm0iIC8+DQotCQkJCTwvaHRtbDpzdWJtaXQ+DQotCQkJPC9sb2dpYzplcXVhbD4gPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotCQkJCXNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRWRpdCI+DQotCQkJCTxodG1sOnN1Ym1pdD4NCi0JCQkJCTxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIgLz4NCi0JCQkJPC9odG1sOnN1Ym1pdD4NCi0JCQk8L2xvZ2ljOmVxdWFsPjwvVEQ+DQotCQkJPFREIGFsaWduPSJsZWZ0Ij48bG9naWM6bm90RXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSINCi0JCQkJcHJvcGVydHk9ImFjdGlvbiIgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJEZWxldGUiPg0KLQkJCQk8aHRtbDpyZXNldD4NCi0JCQkJCTxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24ucmVzZXQiIC8+DQotCQkJCTwvaHRtbDpyZXNldD4NCi0JCQk8L2xvZ2ljOm5vdEVxdWFsPiAmbmJzcDsgPGh0bWw6Y2FuY2VsPg0KLQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLmNhbmNlbCIgLz4NCi0JCQk8L2h0bWw6Y2FuY2VsPjwvVEQ+DQotCQk8L1RSPg0KLQ0KLQk8L1RBQkxFPg0KLQ0KLTwvaHRtbDpmb3JtPg0KLQ0KLTwvQk9EWT4NCi08L2h0bWw6aHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zdWJzY3JpcHRpb24uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiZjNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zdWJzY3JpcHRpb24uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgbGFuZ3VhZ2U9ImphdmEiICU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL2FwcC50bGQiICAgIHByZWZpeD0iYXBwIiAlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtYmVhbi50bGQiIHByZWZpeD0iYmVhbiIgJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvc3RydXRzLWh0bWwudGxkIiBwcmVmaXg9Imh0bWwiICU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3N0cnV0cy1sb2dpYy50bGQiIHByZWZpeD0ibG9naWMiICU+DQotPGFwcDpjaGVja0xvZ29uLz4NCi0NCi08JS0tIEluIHJlYWwgbGlmZSwgdGhlc2Ugd291bGQgYmUgbG9hZGVkIGZyb20gYSBkYXRhYmFzZSAtLSU+DQotPCUNCi0gIGphdmEudXRpbC5BcnJheUxpc3QgbGlzdCA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7DQotICBsaXN0LmFkZChuZXcgb3JnLmFwYWNoZS5zdHJ1dHMudXRpbC5MYWJlbFZhbHVlQmVhbigiSU1BUCBQcm90b2NvbCIsICJpbWFwIikpOw0KLSAgbGlzdC5hZGQobmV3IG9yZy5hcGFjaGUuc3RydXRzLnV0aWwuTGFiZWxWYWx1ZUJlYW4oIlBPUDMgUHJvdG9jb2wiLCAicG9wMyIpKTsNCi0gIHBhZ2VDb250ZXh0LnNldEF0dHJpYnV0ZSgic2VydmVyVHlwZXMiLCBsaXN0KTsNCi0lPg0KLQ0KLTxodG1sOmh0bWw+DQotPGhlYWQ+DQotPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJDcmVhdGUiPg0KLSAgPHRpdGxlPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuY3JlYXRlIi8+PC90aXRsZT4NCi08L2xvZ2ljOmVxdWFsPg0KLTxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0gIDx0aXRsZT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmRlbGV0ZSIvPjwvdGl0bGU+DQotPC9sb2dpYzplcXVhbD4NCi08bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkVkaXQiPg0KLSAgPHRpdGxlPjxiZWFuOm1lc3NhZ2Uga2V5PSJzdWJzY3JpcHRpb24udGl0bGUuZWRpdCIvPjwvdGl0bGU+DQotPC9sb2dpYzplcXVhbD4NCi08aHRtbDpiYXNlLz4NCi08L2hlYWQ+DQotPGJvZHkgYmdjb2xvcj0id2hpdGUiPg0KLQ0KLTxodG1sOmVycm9ycy8+DQotDQotPGh0bWw6Zm9ybSBhY3Rpb249Ii9zYXZlU3Vic2NyaXB0aW9uIiBmb2N1cz0iaG9zdCI+DQotPGh0bWw6aGlkZGVuIHByb3BlcnR5PSJhY3Rpb24iLz4NCi08dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+DQotDQotICA8dHI+DQotICAgIDx0aCBhbGlnbj0icmlnaHQiPg0KLSAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQudXNlcm5hbWUiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgICA8YmVhbjp3cml0ZSBuYW1lPSJ1c2VyIiBwcm9wZXJ0eT0idXNlcm5hbWUiIGZpbHRlcj0idHJ1ZSIvPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRoIGFsaWduPSJyaWdodCI+DQotICAgICAgPGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsSG9zdG5hbWUiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJDcmVhdGUiPg0KLSAgICAgICAgPGh0bWw6dGV4dCBwcm9wZXJ0eT0iaG9zdCIgc2l6ZT0iNTAiLz4NCi0gICAgICA8L2xvZ2ljOmVxdWFsPg0KLSAgICAgIDxsb2dpYzpub3RFcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0gICAgICAgIDxodG1sOmhpZGRlbiBwcm9wZXJ0eT0iaG9zdCIgd3JpdGU9InRydWUiLz4NCi0gICAgICA8L2xvZ2ljOm5vdEVxdWFsPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRoIGFsaWduPSJyaWdodCI+DQotICAgICAgPGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsVXNlcm5hbWUiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGh0bWw6dGV4dCBwcm9wZXJ0eT0idXNlcm5hbWUiIHNpemU9IjUwIi8+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGggYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxQYXNzd29yZCIvPjoNCi0gICAgPC90aD4NCi0gICAgPHRkIGFsaWduPSJsZWZ0Ij4NCi0gICAgICA8aHRtbDpwYXNzd29yZCBwcm9wZXJ0eT0icGFzc3dvcmQiIHNpemU9IjUwIi8+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGggYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxTZXJ2ZXJUeXBlIi8+Og0KLSAgICA8L3RoPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgIDxodG1sOnNlbGVjdCBwcm9wZXJ0eT0idHlwZSI+DQotICAgICAgICA8aHRtbDpvcHRpb25zIGNvbGxlY3Rpb249InNlcnZlclR5cGVzIiBwcm9wZXJ0eT0idmFsdWUiDQotICAgICAgICAgICAgICAgICAgIGxhYmVsUHJvcGVydHk9ImxhYmVsIi8+DQotICAgICAgPC9odG1sOnNlbGVjdD4NCi0gICAgPC90ZD4NCi0gIDwvdHI+DQotDQotICA8dHI+DQotICAgIDx0aCBhbGlnbj0icmlnaHQiPg0KLSAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQuYXV0b0Nvbm5lY3QiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGh0bWw6Y2hlY2tib3ggcHJvcGVydHk9ImF1dG9Db25uZWN0Ii8+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGQgYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotICAgICAgICA8aHRtbDpzdWJtaXQ+DQotICAgICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIvPg0KLSAgICAgICAgPC9odG1sOnN1Ym1pdD4NCi0gICAgICA8L2xvZ2ljOmVxdWFsPg0KLSAgICAgIDxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0gICAgICAgIDxodG1sOnN1Ym1pdD4NCi0gICAgICAgICAgPGJlYW46bWVzc2FnZSBrZXk9ImJ1dHRvbi5jb25maXJtIi8+DQotICAgICAgICA8L2h0bWw6c3VibWl0Pg0KLSAgICAgIDwvbG9naWM6ZXF1YWw+DQotICAgICAgPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJFZGl0Ij4NCi0gICAgICAgIDxodG1sOnN1Ym1pdD4NCi0gICAgICAgICAgPGJlYW46bWVzc2FnZSBrZXk9ImJ1dHRvbi5zYXZlIi8+DQotICAgICAgICA8L2h0bWw6c3VibWl0Pg0KLSAgICAgIDwvbG9naWM6ZXF1YWw+DQotICAgIDwvdGQ+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGxvZ2ljOm5vdEVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJEZWxldGUiPg0KLSAgICAgICAgPGh0bWw6cmVzZXQ+DQotICAgICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24ucmVzZXQiLz4NCi0gICAgICAgIDwvaHRtbDpyZXNldD4NCi0gICAgICA8L2xvZ2ljOm5vdEVxdWFsPg0KLSAgICAgICZuYnNwOw0KLSAgICAgIDxodG1sOmNhbmNlbD4NCi0gICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uY2FuY2VsIi8+DQotICAgICAgPC9odG1sOmNhbmNlbD4NCi0gICAgPC90ZD4NCi0gIDwvdHI+DQotDQotPC90YWJsZT4NCi0NCi08L2h0bWw6Zm9ybT4NCi0NCi08L2JvZHk+DQotPC9odG1sOmh0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3Blbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmYTc4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuVGFnQ2xvc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3BlblRhZ0Nsb3NlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4N2U0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdPcGVuVGFnQ2xvc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTIzNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPHRhZz4KLQk8dGFnPjwvdGFnPgotCTx0YWc+PC90YWc+Ci0JPHRhZz48L3RhZz4KLQk8dGFnPjwvdGFnPgotCTx0YWc+Ci0JCTx0YWc+PC90YWc+Ci0JCTx0YWc+PC90YWc+Ci0JCTx0YWc+PC90YWc+Ci0JCTx0YWc+PC90YWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhOTQ5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy90YWdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTx0YWc+Ci08dGFnPjwvdGFnPgotPHRhZz48L3RhZyA+Ci08dGFnPiA8L3RhZz4KLTx0YWc+IDwvdGFnID4KLTx0YWcgPgotPHRhZyA+PC90YWc+Ci08dGFnID48L3RhZyA+Ci08dGFnID4gPC90YWc+Ci08dGFnID4gPC90YWcgPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbHMvVGVzdEZpeGVkQ01Eb2N1bWVudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbHMvVGVzdEZpeGVkQ01Eb2N1bWVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2NzliOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50bW9kZWxzL1Rlc3RGaXhlZENNRG9jdW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50bW9kZWxzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5KU1BDTURvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5KU1AxMU5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5KU1AyME5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudG1vZGVsLkNNRG9jVHlwZTsKLQotcHVibGljIGNsYXNzIFRlc3RGaXhlZENNRG9jdW1lbnRzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIFRlc3RGaXhlZENNRG9jdW1lbnRzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjbV9kb2NfdHlwZQotCSAqIEBwYXJhbSBlbGVtZW50TmFtZQotCSAqIEBwYXJhbSBhdHRyTmFtZUltcG9ydAotCSAqLwotCXByaXZhdGUgdm9pZCBjaGVja0F0dHJOYW1lcyhTdHJpbmcgZG9jdW1lbnRLZXksIFN0cmluZyBlbGVtZW50TmFtZSwgU3RyaW5nW10gYXR0ck5hbWVzKSB7Ci0JCUNNRG9jdW1lbnQgZG9jdW1lbnQgPSBKU1BDTURvY3VtZW50RmFjdG9yeS5nZXRDTURvY3VtZW50KGRvY3VtZW50S2V5KTsKLQkJQ01Ob2RlIGVsZW1lbnREZWNsYXJhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCkuZ2V0TmFtZWRJdGVtKGVsZW1lbnROYW1lKTsKLQkJYXNzZXJ0RXF1YWxzKCJub3QgYW4gZWxlbWVudCBkZWNsYXJhdGlvbjoiICsgZWxlbWVudERlY2xhcmF0aW9uLCBDTU5vZGUuRUxFTUVOVF9ERUNMQVJBVElPTiwgZWxlbWVudERlY2xhcmF0aW9uLmdldE5vZGVUeXBlKCkpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIGVsZW1lbnQgZGVjbGFyYXRpb246IiArIGVsZW1lbnROYW1lLCBlbGVtZW50RGVjbGFyYXRpb24pOwotCQkKLQkJQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9ICgoQ01FbGVtZW50RGVjbGFyYXRpb24pIGVsZW1lbnREZWNsYXJhdGlvbikuZ2V0QXR0cmlidXRlcygpOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyTmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgYXR0cmlidXRlIGRlY2xhcmF0aW9uOiIgKyBhdHRyTmFtZXNbaV0sIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKGF0dHJOYW1lc1tpXSkpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiQXR0cmlidXRlcyBkZWZpbmVkIGluIGNvbnRlbnQgbW9kZWwgdGhhdCBhcmUgbm90IGV4cGVjdGVkIGJ5IHRoZSB0ZXN0IiwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKSwgYXR0ck5hbWVzLmxlbmd0aCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRG9jdW1lbnQoT2JqZWN0IGRvY3VtZW50S2V5KSB7Ci0JCUNNRG9jdW1lbnQgZG9jdW1lbnQgPSBKU1BDTURvY3VtZW50RmFjdG9yeS5nZXRDTURvY3VtZW50KGRvY3VtZW50S2V5LnRvU3RyaW5nKCkpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIGRvYzoiICsgZG9jdW1lbnRLZXkudG9TdHJpbmcoKSwgZG9jdW1lbnQpOwotCQlDTU5hbWVkTm9kZU1hcCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJQ01Ob2RlIGl0ZW0gPSBlbGVtZW50cy5pdGVtKGkpOwotCQkJdmVyaWZ5RWxlbWVudERlY2xhcmF0aW9uSGFzTmFtZShpdGVtKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AxMUZvcndhcmQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AxMV9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRk9SV0FSRCwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQUdFfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDExR2V0UHJvcGVydHkoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AxMV9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuR0VUUFJPUEVSVFksIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTkFNRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1BST1BFUlRZfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDExSW5jbHVkZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDExX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5JTkNMVURFLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1BBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9GTFVTSH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AxMUluY2x1ZGVEaXJlY3RpdmUoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AxMV9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElSRUNUSVZFX0lOQ0xVREUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfRklMRX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AxMVBhZ2VEaXJlY3RpdmUoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AxMV9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElSRUNUSVZFX1BBR0UsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTEFOR1VBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9FWFRFTkRTLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSU1QT1JULCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0VTU0lPTiwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0JVRkZFUiwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0FVVE9GTFVTSCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0lTX1RIUkVBRF9TQUZFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSU5GTywgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0VSUk9SX1BBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JU19FUlJPUl9QQUdFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQ09OVEVOVF9UWVBFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUEFHRV9FTkNPRElOR30pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AxMVBhcmFtKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSlNQMTFfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLlBBUkFNLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9WQUxVRX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AxMVBsdWdpbigpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDExX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5QTFVHSU4sIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVFlQRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0NPREUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9DT0RFQkFTRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9BUkNISVZFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQUxJR04sIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9IRUlHSFQsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9XSURUSCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0hTUEFDRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1ZTUEFDRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0pSRVZFUlNJT04sIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9OU1BMVUdJTlVSTCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0lFUExVR0lOVVJMfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDExUm9vdCgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDExX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5ST09ULCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1hNTE5TX0pTUCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1ZFUlNJT059KTsKLQl9Ci0JCi0vLwlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSlNQMjFQYWdlRGlyZWN0aXZlKCkgewotLy8JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMV9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElSRUNUSVZFX1BBR0UsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTEFOR1VBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9FWFRFTkRTLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSU1QT1JULCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0VTU0lPTiwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0JVRkZFUiwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0FVVE9GTFVTSCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0lTX1RIUkVBRF9TQUZFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSU5GTywgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0VSUk9SX1BBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JU19FUlJPUl9QQUdFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQ09OVEVOVF9UWVBFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUEFHRV9FTkNPRElORywgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0RFRkVSUkVEX1NZTlRBWF9BTExPV0VEX0FTX0xJVEVSQUwsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9UUklNX0RJUkVDVElWRV9XSElURVNQQUNFUywgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0lTRUxJR05PUkVEfSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSlNQMTFTZXRQcm9wZXJ0eSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDExX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5TRVRQUk9QRVJUWSwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUFJPUEVSVFksIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQVJBTSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1ZBTFVFfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDExVGFnbGliRGlyZWN0aXZlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSlNQMTFfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLkRJUkVDVElWRV9UQUdMSUIsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVVJJLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUFJFRklYfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDExVXNlQmVhbigpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDExX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5VU0VCRUFOLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0lELCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0NPUEUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9DTEFTUywgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1RZUEUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9CRUFOX05BTUV9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSlNQMjBBdHRyaWJ1dGUoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMjBOYW1lc3BhY2UuRWxlbWVudE5hbWUuQVRUUklCVVRFLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9UUklNfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDIwRWxlbWVudCgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDIwX0RPQ19UWVBFLCBKU1AyME5hbWVzcGFjZS5FbGVtZW50TmFtZS5FTEVNRU5ULCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUV9KTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMEZvcndhcmQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRk9SV0FSRCwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQUdFfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMEdldFByb3BlcnR5KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSlNQMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLkdFVFBST1BFUlRZLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QUk9QRVJUWX0pOwotCX0KLQotCS8vIEpTUCAyLjEgYXR0cmlidXRlcyBvbiB0YWcgZGlyZWN0aXZlcwotLy8JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPblRBRzIxVGFnRGlyZWN0aXZlKCkgewotLy8JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMV9ET0NfVFlQRSwgSlNQMjBOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElSRUNUSVZFX1RBRywgbmV3IFN0cmluZ1tde0pTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9ESVNQTEFZX05BTUUsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9CT0RZX0NPTlRFTlQsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9EWU5BTUlDX0FUVFJJQlVURVMsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9TTUFMTF9JQ09OLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfTEFSR0VfSUNPTiwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0RFU0NSSVBUSU9OLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfRVhBTVBMRSwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0xBTkdVQUdFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSU1QT1JULCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUEFHRV9FTkNPRElORywgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0lTRUxJR05PUkVELCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfREVGRVJSRURfU1lOVEFYX0FMTE9XRURfQVNfTElURVJBTCwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1RSSU1fRElSRUNUSVZFX1dISVRFU1BBQ0VTfSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSlNQMjBJbmNsdWRlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSlNQMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLklOQ0xVREUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUEFHRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0ZMVVNIfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMEluY2x1ZGVEaXJlY3RpdmUoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElSRUNUSVZFX0lOQ0xVREUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfRklMRX0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uSlNQMjBPdXRwdXQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMjBOYW1lc3BhY2UuRWxlbWVudE5hbWUuT1VUUFVULCBuZXcgU3RyaW5nW117SlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX09NSVRfWE1MX0RFQ0wsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9ET0NUWVBFX1BVQkxJQywgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0RPQ1RZUEVfUk9PVF9FTEVNRU5ULCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfRE9DVFlQRV9TWVNURU19KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDIwUGFnZURpcmVjdGl2ZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDIwX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5ESVJFQ1RJVkVfUEFHRSwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9MQU5HVUFHRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0VYVEVORFMsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JTVBPUlQsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9TRVNTSU9OLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQlVGRkVSLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQVVUT0ZMVVNILCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSVNfVEhSRUFEX1NBRkUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JTkZPLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfRVJST1JfUEFHRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0lTX0VSUk9SX1BBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9DT05URU5UX1RZUEUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQUdFX0VOQ09ESU5HLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfSVNFTElHTk9SRUR9KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDIwUGFyYW0oKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuUEFSQU0sIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTkFNRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1ZBTFVFfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMFBsdWdpbigpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLkpTUDIwX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5QTFVHSU4sIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVFlQRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0NPREUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9DT0RFQkFTRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9BUkNISVZFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQUxJR04sIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9IRUlHSFQsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9XSURUSCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0hTUEFDRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1ZTUEFDRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0pSRVZFUlNJT04sIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9OU1BMVUdJTlVSTCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0lFUExVR0lOVVJMLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfTUFZU0NSSVBUfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMFJvb3QoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuUk9PVCwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9YTUxOU19KU1AsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9WRVJTSU9OfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMFNldFByb3BlcnR5KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSlNQMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNFVFBST1BFUlRZLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QUk9QRVJUWSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1BBUkFNLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVkFMVUV9KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPbkpTUDIwVGFnbGliRGlyZWN0aXZlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuSlNQMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLkRJUkVDVElWRV9UQUdMSUIsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVVJJLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUFJFRklYLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfVEFHRElSfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25KU1AyMFVzZUJlYW4oKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5KU1AyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuVVNFQkVBTiwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JRCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1NDT1BFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQ0xBU1MsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQkVBTl9OQU1FfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMEF0dHJpYnV0ZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLlRBRzIwX0RPQ19UWVBFLCBKU1AyME5hbWVzcGFjZS5FbGVtZW50TmFtZS5BVFRSSUJVVEUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTkFNRSwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1RSSU19KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPblRBRzIwQXR0cmlidXRlRGlyZWN0aXZlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDIwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkRJUkVDVElWRV9BVFRSSUJVVEUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTkFNRSwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1JFUVVJUkVELCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfRlJBR01FTlQsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9SVEVYUFJWQUxVRSwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1RZUEUsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9ERVNDUklQVElPTn0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uVEFHMjBEb0JvZHkoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMjBOYW1lc3BhY2UuRWxlbWVudE5hbWUuRE9CT0RZLCBuZXcgU3RyaW5nW117SlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1ZBUiwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1ZBUlJFQURFUiwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1NDT1BFfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMEVsZW1lbnQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMjBOYW1lc3BhY2UuRWxlbWVudE5hbWUuRUxFTUVOVCwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMEZvcndhcmQoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRk9SV0FSRCwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQUdFfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMEdldFByb3BlcnR5KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLkdFVFBST1BFUlRZLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QUk9QRVJUWX0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uVEFHMjBJbmNsdWRlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLklOQ0xVREUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUEFHRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0ZMVVNIfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMEluY2x1ZGVEaXJlY3RpdmUoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElSRUNUSVZFX0lOQ0xVREUsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfRklMRX0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uVEFHMjBJbnZva2UoKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMjBOYW1lc3BhY2UuRWxlbWVudE5hbWUuSU5WT0tFLCBuZXcgU3RyaW5nW117SlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0ZSQUdNRU5ULCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfVkFSLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfVkFSUkVBREVSLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0NPUEV9KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPblRBRzIwT3V0cHV0KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDIwTmFtZXNwYWNlLkVsZW1lbnROYW1lLk9VVFBVVCwgbmV3IFN0cmluZ1tde0pTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9PTUlUX1hNTF9ERUNMLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfRE9DVFlQRV9QVUJMSUMsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9ET0NUWVBFX1JPT1RfRUxFTUVOVCwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0RPQ1RZUEVfU1lTVEVNfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMFBhcmFtKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLlBBUkFNLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX05BTUUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9WQUxVRX0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uVEFHMjBQbHVnaW4oKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuUExVR0lOLCBuZXcgU3RyaW5nW117SlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1RZUEUsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9DT0RFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQ09ERUJBU0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQVJDSElWRSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX0FMSUdOLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfSEVJR0hULCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfV0lEVEgsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9IU1BBQ0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9WU1BBQ0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9KUkVWRVJTSU9OLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfTlNQTFVHSU5VUkwsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JRVBMVUdJTlVSTCwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX01BWVNDUklQVH0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uVEFHMjBSb290KCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLlJPT1QsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfWE1MTlNfSlNQLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVkVSU0lPTn0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlc09uVEFHMjBTZXRQcm9wZXJ0eSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLlRBRzIwX0RPQ19UWVBFLCBKU1AxMU5hbWVzcGFjZS5FbGVtZW50TmFtZS5TRVRQUk9QRVJUWSwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUFJPUEVSVFksIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQVJBTSwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1ZBTFVFfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMFRhZ0RpcmVjdGl2ZSgpIHsKLQkJY2hlY2tBdHRyTmFtZXMoQ01Eb2NUeXBlLlRBRzIwX0RPQ19UWVBFLCBKU1AyME5hbWVzcGFjZS5FbGVtZW50TmFtZS5ESVJFQ1RJVkVfVEFHLCBuZXcgU3RyaW5nW117SlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0RJU1BMQVlfTkFNRSwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0JPRFlfQ09OVEVOVCwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0RZTkFNSUNfQVRUUklCVVRFUywgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX1NNQUxMX0lDT04sIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9MQVJHRV9JQ09OLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfREVTQ1JJUFRJT04sIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9FWEFNUExFLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfTEFOR1VBR0UsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JTVBPUlQsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9QQUdFX0VOQ09ESU5HLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfSVNFTElHTk9SRUR9KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNPblRBRzIwVGFnbGliRGlyZWN0aXZlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDExTmFtZXNwYWNlLkVsZW1lbnROYW1lLkRJUkVDVElWRV9UQUdMSUIsIG5ldyBTdHJpbmdbXXtKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfVVJJLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfUFJFRklYLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfVEFHRElSfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMFVzZUJlYW4oKSB7Ci0JCWNoZWNrQXR0ck5hbWVzKENNRG9jVHlwZS5UQUcyMF9ET0NfVFlQRSwgSlNQMTFOYW1lc3BhY2UuRWxlbWVudE5hbWUuVVNFQkVBTiwgbmV3IFN0cmluZ1tde0pTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9JRCwgSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1NDT1BFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQ0xBU1MsIEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfQkVBTl9OQU1FfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzT25UQUcyMFZhcmlhYmxlRGlyZWN0aXZlKCkgewotCQljaGVja0F0dHJOYW1lcyhDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUsIEpTUDIwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkRJUkVDVElWRV9WQVJJQUJMRSwgbmV3IFN0cmluZ1tde0pTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9OQU1FX0dJVkVOLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfTkFNRV9GUk9NX0FUVFJJQlVURSwgSlNQMjBOYW1lc3BhY2UuQVRUUl9OQU1FX0FMSUFTLCBKU1AyME5hbWVzcGFjZS5BVFRSX05BTUVfVkFSSUFCTEVfQ0xBU1MsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9ERUNMQVJFLCBKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0NPUEUsIEpTUDIwTmFtZXNwYWNlLkFUVFJfTkFNRV9ERVNDUklQVElPTn0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q0hUTUxkb2N1bWVudCgpIHsKLQkJY2hlY2tEb2N1bWVudChDTURvY1R5cGUuQ0hUTUxfRE9DX1RZUEUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDRkb2N1bWVudCgpIHsKLQkJY2hlY2tEb2N1bWVudChDTURvY1R5cGUuSFRNTF9ET0NfVFlQRSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1AxMWRvY3VtZW50KCkgewotCQljaGVja0RvY3VtZW50KENNRG9jVHlwZS5KU1AxMV9ET0NfVFlQRSk7Ci0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUDEyZG9jdW1lbnQoKSB7Ci0JCWNoZWNrRG9jdW1lbnQoQ01Eb2NUeXBlLkpTUDEyX0RPQ19UWVBFKTsKLQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMjBkb2N1bWVudCgpIHsKLQkJY2hlY2tEb2N1bWVudChDTURvY1R5cGUuSlNQMjBfRE9DX1RZUEUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VGFnMjBkb2N1bWVudCgpIHsKLQkJY2hlY2tEb2N1bWVudChDTURvY1R5cGUuVEFHMjBfRE9DX1RZUEUpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgdmVyaWZ5QXR0cmlidXRlRGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbURlY2wsIENNTm9kZSBhdHRyKSB7Ci0JCWFzc2VydFRydWUoYXR0ci5nZXROb2RlVHlwZSgpID09IENNTm9kZS5BVFRSSUJVVEVfREVDTEFSQVRJT04pOwotCQlhc3NlcnROb3ROdWxsKCJubyBuYW1lIG9uIGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiIsIGF0dHIuZ2V0Tm9kZU5hbWUoKSk7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cjsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gYXR0cmlidXRlICd0eXBlJyBvbiBhbiBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gIiArIGVsZW1EZWNsLmdldE5vZGVOYW1lKCkgKyAiLyIgKyBhdHRyLmdldE5vZGVOYW1lKCksIGF0dHJEZWNsLmdldEF0dHJUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCB2ZXJpZnlFbGVtZW50RGVjbGFyYXRpb25IYXNOYW1lKENNTm9kZSBpdGVtKSB7Ci0JCWFzc2VydFRydWUoaXRlbS5nZXROb2RlVHlwZSgpID09IENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gbmFtZSBvbiBhbiBlbGVtZW50IGRlY2xhcmF0aW9uIiwgaXRlbS5nZXROb2RlTmFtZSgpKTsKLQkJQ01OYW1lZE5vZGVNYXAgYXR0cnMgPSAoKENNRWxlbWVudERlY2xhcmF0aW9uKSBpdGVtKS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJQ01Ob2RlIGF0dHIgPSBhdHRycy5pdGVtKGkpOwotCQkJdmVyaWZ5QXR0cmlidXRlRGVjbGFyYXRpb24oKChDTUVsZW1lbnREZWNsYXJhdGlvbikgaXRlbSksIGF0dHIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudG1vZGVscy9UZXN0VGFnbGliQ01UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudG1vZGVscy9UZXN0VGFnbGliQ01UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjllN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbHMvVGVzdFRhZ2xpYkNNVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC50bGQuQ01Eb2N1bWVudEZhY3RvcnlUTEQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC50bGQuQ01FbGVtZW50RGVjbGFyYXRpb25JbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5KU1AyME5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLklUYWdsaWJSZWNvcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5UYWdsaWJJbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguQnVuZGxlUmVzb3VyY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgVGVzdFRhZ2xpYkNNVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RGSUxFU19QQVRIU1RSSU5HID0gIi90ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gInRlc3RMb2FkVGFnbGlicyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19OQU1FID0gImxvZ2ljOmVtcHR5IjsKLQotCXB1YmxpYyBUZXN0VGFnbGliQ01UZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdFRhZ2xpYkNNVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RUYWdsaWJDTVRlc3RzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpOwotCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbnVsbCk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFRFU1RGSUxFU19QQVRIU1RSSU5HICsgUFJPSkVDVF9OQU1FLCBQYXRoLlJPT1QuYXBwZW5kKFBST0pFQ1RfTkFNRSkudG9TdHJpbmcoKSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9zdHJ1dHMuamFyIiwgUGF0aC5ST09ULmFwcGVuZChQUk9KRUNUX05BTUUpLmFwcGVuZCgid2ViIHN0dWZmL1dFQi1JTkYvbGliL3N0cnV0cy5qYXIiKS50b1N0cmluZygpKTsKLQkJCXByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlwcm9qZWN0LmJ1aWxkKEluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXIuRlVMTF9CVUlMRCwgbnVsbCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9hZEN1c3RvbVRhZ3NUaHJvdWdoSlNQU3ludGF4KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUganNwRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShQYXRoLlJPT1QuYXBwZW5kKFBST0pFQ1RfTkFNRSkuYXBwZW5kKCJ3ZWIgc3R1ZmYvdGVzdDEuanNwIikpOwotCQlhc3NlcnRUcnVlKCJ0ZXN0IGZpbGUgIiArIGpzcEZpbGUuZ2V0RnVsbFBhdGgoKSArICIgZG9lcyBub3QgZXhpc3QiLCBqc3BGaWxlLmV4aXN0cygpKTsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChqc3BGaWxlKTsKLQkJCU5vZGVMaXN0IHByZXNlbnRzID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZShUQUdfTkFNRSk7Ci0JCQlhc3NlcnROb3ROdWxsKFRBR19OQU1FICsgIiB3YXMgbWlzc2luZyBmcm9tIGRvY3VtZW50IiwgcHJlc2VudHMuaXRlbSgwKSk7Ci0JCQlNb2RlbFF1ZXJ5QWRhcHRlciBtb2RlbFF1ZXJ5QWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBwcmVzZW50cy5pdGVtKDApKS5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJCUNNRWxlbWVudERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gbW9kZWxRdWVyeUFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNRWxlbWVudERlY2xhcmF0aW9uKChFbGVtZW50KSBwcmVzZW50cy5pdGVtKDApKTsKLQkJCWFzc2VydE5vdE51bGwoIm5vIENNRWxlbWVudERlbGNhcmF0aW9uIGZvciAiICsgVEFHX05BTUUsIGRlY2xhcmF0aW9uKTsKLQkJCWFzc2VydEVxdWFscygicXVhbGlmaWVkIG5hbWUgZnJvbSBlbGVtZW50IGRlY2xhcmF0aW9uIHdhcyBkaWZmZXJlbnQiLCBUQUdfTkFNRSwgZGVjbGFyYXRpb24uZ2V0Tm9kZU5hbWUoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvYWRDdXN0b21UYWdzVGhyb3VnaFhNTFN5bnRheCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGpzcEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoUGF0aC5ST09ULmFwcGVuZChQUk9KRUNUX05BTUUpLmFwcGVuZCgid2ViIHN0dWZmL3Rlc3RYLmpzcCIpKTsKLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlICIgKyBqc3BGaWxlLmdldEZ1bGxQYXRoKCkgKyAiIGRvZXMgbm90IGV4aXN0IiwganNwRmlsZS5leGlzdHMoKSk7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoanNwRmlsZSk7Ci0JCQlOb2RlTGlzdCBwcmVzZW50cyA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVEFHX05BTUUpOwotCQkJYXNzZXJ0Tm90TnVsbChUQUdfTkFNRSArICIgd2FzIG1pc3NpbmcgZnJvbSBkb2N1bWVudCIsIHByZXNlbnRzLml0ZW0oMCkpOwotCQkJTW9kZWxRdWVyeUFkYXB0ZXIgbW9kZWxRdWVyeUFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgcHJlc2VudHMuaXRlbSgwKSkuZ2V0QWRhcHRlckZvcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IG1vZGVsUXVlcnlBZGFwdGVyLmdldE1vZGVsUXVlcnkoKS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbigoRWxlbWVudCkgcHJlc2VudHMuaXRlbSgwKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJubyBDTUVsZW1lbnREZWNsYXJhdGlvbiBmb3IgIiArIFRBR19OQU1FLCBkZWNsYXJhdGlvbik7Ci0JCQlhc3NlcnRFcXVhbHMoInF1YWxpZmllZCBuYW1lIGZyb20gZWxlbWVudCBkZWNsYXJhdGlvbiB3YXMgZGlmZmVyZW50IiwgVEFHX05BTUUsIGRlY2xhcmF0aW9uLmdldE5vZGVOYW1lKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VGFnRmlsZVJlZmVyZW5jZWRJblRMRCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBEUFJPSkVDVF9OQU1FID0gIkR5bmFtaWNXZWJQcm9qZWN0IjsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChEUFJPSkVDVF9OQU1FKTsKLQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChEUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlWmlwcGVkRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvanNwRXJyb3JQcm9qZWN0LnppcCIsIFBhdGguUk9PVCk7Ci0JCX0KLQkJcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQotCQlJRmlsZSBqc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKFBhdGguUk9PVC5hcHBlbmQoIkR5bmFtaWNXZWJQcm9qZWN0L1dlYkNvbnRlbnQvaW5kZXguanNwIikpOwotCQlhc3NlcnRUcnVlKCJ0ZXN0IGZpbGUgIiArIGpzcEZpbGUuZ2V0RnVsbFBhdGgoKSArICIgZG9lcyBub3QgZXhpc3QiLCBqc3BGaWxlLmV4aXN0cygpKTsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChqc3BGaWxlKTsKLQkJCVN0cmluZyBEVEFHTkFNRSA9ICJkYXRlOnJldHVybmRhdGUiOwotCQkJTm9kZUxpc3QgcmV0dXJuRGF0ZXMgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKERUQUdOQU1FKTsKLQkJCWFzc2VydE5vdE51bGwoImRhdGU6cmV0dXJuZGF0ZSB3YXMgbWlzc2luZyBmcm9tIGRvY3VtZW50IiwgcmV0dXJuRGF0ZXMuaXRlbSgwKSk7Ci0JCQlNb2RlbFF1ZXJ5QWRhcHRlciBtb2RlbFF1ZXJ5QWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSByZXR1cm5EYXRlcy5pdGVtKDApKS5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJCUNNRWxlbWVudERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gbW9kZWxRdWVyeUFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNRWxlbWVudERlY2xhcmF0aW9uKChFbGVtZW50KSByZXR1cm5EYXRlcy5pdGVtKDApKTsKLQkJCWFzc2VydE5vdE51bGwoIm5vIENNRWxlbWVudERlY2xhcmF0aW9uIGZvciBkYXRlOnJldHVybmRhdGUiLCBkZWNsYXJhdGlvbik7Ci0JCQlhc3NlcnRFcXVhbHMoInF1YWxpZmllZCBuYW1lIGZyb20gZWxlbWVudCBkZWNsYXJhdGlvbiB3YXMgZGlmZmVyZW50IiwgRFRBR05BTUUsIGRlY2xhcmF0aW9uLmdldE5vZGVOYW1lKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUYWdGaWxlSGFzSFRNTENvbnRlbnRNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBEUFJPSkVDVF9OQU1FID0gZ2V0TmFtZSgpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KERQUk9KRUNUX05BTUUpOwotCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KERQUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQl9Ci0JCXByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0KLQkJSUZpbGUgdGFnRmlsZSA9IHByb2plY3QuZ2V0RmlsZSgidGVzdDEudGFnIik7Ci0JCXRhZ0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIElSZXNvdXJjZS5GT1JDRSwgbnVsbCk7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQodGFnRmlsZSk7Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxiLz4iKTsKLQkJCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCkpLmdldEFkYXB0ZXJGb3IoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBtb2RlbFF1ZXJ5QWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24obW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJubyBDTUVsZW1lbnREZWNsYXJhdGlvbiBmb3IgJ2InIiwgZGVjbGFyYXRpb24pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFRhZ0ZpbGVIYXNUYWdDb250ZW50TW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgRFBST0pFQ1RfTkFNRSA9IGdldE5hbWUoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChEUFJPSkVDVF9OQU1FKTsKLQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChEUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJfQotCQlwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCi0JCUlGaWxlIHRhZ0ZpbGUgPSBwcm9qZWN0LmdldEZpbGUoInRlc3QxLnRhZyIpOwotCQl0YWdGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCBJUmVzb3VyY2UuRk9SQ0UsIG51bGwpOwotCi0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KHRhZ0ZpbGUpOwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8IitKU1AyME5hbWVzcGFjZS5FbGVtZW50TmFtZS5ET0JPRFkrIi8+Iik7Ci0JCQlNb2RlbFF1ZXJ5QWRhcHRlciBtb2RlbFF1ZXJ5QWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpKS5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJCUNNRWxlbWVudERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gbW9kZWxRdWVyeUFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpLmdldENNRWxlbWVudERlY2xhcmF0aW9uKG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gQ01FbGVtZW50RGVjbGFyYXRpb24gZm9yICciK0pTUDIwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkRPQk9EWSsiJyIsIGRlY2xhcmF0aW9uKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdER5bmFtaWNBdHRyaWJ1dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0RHluYW1pY0F0dHJpYnV0ZXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQlwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QodGVzdE5hbWUsIG51bGwsIG51bGwpOwotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShURVNURklMRVNfUEFUSFNUUklORyArICJ0ZXN0RHluYW1pY0F0dHJpYnV0ZXMiLCAiL3Rlc3REeW5hbWljQXR0cmlidXRlcyIpOwotCQl9Ci0JCXByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0KLQkJQ01Eb2N1bWVudEZhY3RvcnlUTEQgZmFjdG9yeSA9IG5ldyBDTURvY3VtZW50RmFjdG9yeVRMRCgpOwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi8iKyB0ZXN0TmFtZSArICIvIikpOwotCQlhc3NlcnRFcXVhbHMoIlRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSB0YWdsaWIgcmVjb3JkIiwgMSwgcmVjb3Jkcy5sZW5ndGgpOwotCQlDTURvY3VtZW50IGRvY3VtZW50ID0gZmFjdG9yeS5jcmVhdGVDTURvY3VtZW50KHJlY29yZHNbMF0pOwotCQlDTU5hbWVkTm9kZU1hcCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0JCWFzc2VydE5vdE51bGwoIk5vIGVsZW1lbnRzIGZvciB0aGUgQ00gRG9jdW1lbnQiLCBlbGVtZW50cyk7Ci0JCUNNTm9kZSBub2RlID0gZWxlbWVudHMuZ2V0TmFtZWRJdGVtKCJiYXIiKTsKLQkJYXNzZXJ0VHJ1ZSgiTm9kZSBtdXN0IGJlIGEgQ01FbGVtZW50RGVjbGFyYXRpb25JbXBsIiwgbm9kZSBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uSW1wbCk7Ci0JCWFzc2VydEVxdWFscygiRHluYW1pYyBhdHRyaWJ1dGVzIG11c3QgYmUgc2V0IHRvICd0cnVlJyIsICJ0cnVlIiwgKChDTUVsZW1lbnREZWNsYXJhdGlvbkltcGwpIG5vZGUpLmdldER5bmFtaWNBdHRyaWJ1dGVzKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvTnVsbFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9OdWxsU3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMTZmODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9OdWxsU3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RDb250ZW50VHlwZUhhbmRsZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RDb250ZW50VHlwZUhhbmRsZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOTJiYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0Q29udGVudFR5cGVIYW5kbGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudHR5cGVpZGVudGlmaWVyLmNvbnRlbnRzcGVjaWZpYzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdG8gdGVzdCB2ZXJ5IGJhc2ljcyBvZiBjb250ZW50IHR5cGUgaGFuZGxlcnMuCi0gKiAKLSAqIEl0IHRlc3RzIHRoYXQKLSAqIAotICogQlZUOiBjb250ZW50IHJlZ2lzdHJ5IGNhbiBiZSAvIGlzIGNyZWF0ZWQgNSBleHBlY3RlZCBjb250ZW50VHlwZUlkZW50aWZpZXJzCi0gKiBjYW4gYmUgY3JlYXRlZC9mb3VuZCBiYXNlZCBvbiBpZC4gdGhlcmUgaXMgb25lIGFuZCBvbmx5IG9uZSBkZWZhdWx0IGNvbnRlbnQKLSAqIHR5cGUgaGFuZGxlci4KLSAqIAotICogCi0gKiAKLSAqICAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZUhhbmRsZXJzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Q29udGVudFR5cGVIYW5kbGVycyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJQ29udGVudFR5cGVNYW5hZ2VyIGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKSB7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKTsKLQkJcmV0dXJuIHJlZ2lzdHJ5OwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbigpIHsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZlciByZWdpc3RyeSBtdXN0IGV4aXN0IiwgcmVnaXN0cnkgIT0gbnVsbCk7Ci0JCWlmIChERUJVRykgewotCQkJSUNvbnRlbnRUeXBlW10gYWxsVHlwZXMgPSByZWdpc3RyeS5nZXRBbGxDb250ZW50VHlwZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oYWxsVHlwZXNbaV0pOwotCi0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfU1NFWE1MOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIGN1c3RvbSBYTUwgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUw7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciAiICsgaWQgKyAiIGRvZXMgbm90IGhhdmUgSFRNTCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUDsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyICIgKyBpZCArICIgZG9lcyBub3QgaGF2ZSBKU1AgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1M7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciAiICsgaWQgKyAiIGRvZXMgbm90IGhhdmUgQ1NTIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RFRERXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmR0ZHNvdXJjZSI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciAiICsgaWQgKyAiIGRvZXMgbm90IGhhdmUgRFREIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRXhpc3RzQnlGaWxlRXh0ZW5zaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QueG1sIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyIGZvciAiICsgZmlsZW5hbWUgKyAiIGRvZXMgbm90IGhhdmUgWE1MIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEV4aXN0c0J5RmlsZUV4dGVuc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0Lmh0bWwiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgZm9yICIgKyBmaWxlbmFtZSArICIgZG9lcyBub3QgaGF2ZSBIVE1MIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhpc3RzQnlGaWxlRXh0ZW5zaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuanNwIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyIGZvciAiICsgZmlsZW5hbWUgKyAiIGRvZXMgbm90IGhhdmUgSlNQIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTRXhpc3RzQnlGaWxlRXh0ZW5zaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuY3NzIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyIGZvciAiICsgZmlsZW5hbWUgKyAiIGRvZXMgbm90IGhhdmUgQ1NTIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RFRERXhpc3RzQnlGaWxlRXh0ZW5zaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuZHRkIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyIGZvciAiICsgZmlsZW5hbWUgKyAiIGRvZXMgbm90IGhhdmUgRFREIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVEZWZpbml0aW9ucygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1M7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmNzcyI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyMSA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJtdWxpdHBsZSBjb250ZW50IHR5cGUgaWRlbnRpZmllcnMgbmVlZCB0byBiZSBlcXVhbCAoYnV0IG5vdCBzYW1lIGluc3RhbmNlKSAiLCBpZGVudGlmaWVyMS5lcXVhbHMoaWRlbnRpZmllcjIpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U2YzkzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RNb2RlbEhhbmRsZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLkVtYmVkZGVkVHlwZUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxIYW5kbGVycyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBNb2RlbEhhbmRsZXJSZWdpc3RyeSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpIHsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCQlyZXR1cm4gcmVnaXN0cnk7Ci0JfQotCi0JcHVibGljIFRlc3RNb2RlbEhhbmRsZXJzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbigpIHsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IG11c3QgZXhpc3QiLCByZWdpc3RyeSAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTOyAgCi0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoaWQpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgQ1NTIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTRXhpc3RzRnJvbUZpbGVuYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuY3NzIjsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yKGZpbGVuYW1lLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIENTUyB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RFRERXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmR0ZHNvdXJjZSI7IAotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIERURCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERUREV4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmR0ZCI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBEVEQgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscygib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmR0ZHNvdXJjZSIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIEhUTUwgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhpZCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MRXhpc3RzRnJvbUZpbGVuYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuaHRtbCI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBIVE1MIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUDsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBKU1AgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhpZCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFeGlzdHNGcm9tRmlsZW5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5qc3AiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgSlNQIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUw7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoaWQpOwotCQlhc3NlcnRFcXVhbHMoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBYTUwgdHlwZSAiLCBpZCwgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRXhpc3RzRnJvbUZpbGVuYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QueG1sIjsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yKGZpbGVuYW1lLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgWE1MIHR5cGUgIiwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlTdGF0ZUZvckVtYmVkZGVkQ29udGVudFR5cGVUZXh0SFRNTCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgbmFtZSA9ICJidWcyNDMyNDMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChuYW1lLCBudWxsLCBudWxsKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnMjQzMjQzIiwgIi9idWcyNDMyNDMiKTsKLQkJfQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiaHRtbC5qc3AiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKHRlc3RGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIm5ld2x5IG9wZW5lZCBtb2RlbCB3YXMgZGlydHkgIiArIHRlc3RGaWxlLmdldE5hbWUoKSwgbW9kZWwuaXNEaXJ0eSgpKTsKLQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REaXJ0eVN0YXRlRm9yRW1iZWRkZWRDb250ZW50VHlwZVRleHRDU1MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIG5hbWUgPSAiYnVnMjQzMjQzIjsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQlwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QobmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1ZzI0MzI0MyIsICIvYnVnMjQzMjQzIik7Ci0JCX0KLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoImNzcy5qc3AiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKHRlc3RGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIm5ld2x5IG9wZW5lZCBtb2RlbCB3YXMgZGlydHkgIiArIHRlc3RGaWxlLmdldE5hbWUoKSwgbW9kZWwuaXNEaXJ0eSgpKTsKLQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlTdGF0ZUZvckVtYmVkZGVkQ29udGVudFR5cGVUZXh0WE1MKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBuYW1lID0gImJ1ZzI0MzI0MyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KG5hbWUsIG51bGwsIG51bGwpOwotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWcyNDMyNDMiLCAiL2J1ZzI0MzI0MyIpOwotCQl9Ci0JCUlGaWxlIHRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ4bWwuanNwIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZCh0ZXN0RmlsZSk7Ci0JCWFzc2VydEZhbHNlKCJuZXdseSBvcGVuZWQgbW9kZWwgd2FzIGRpcnR5ICIgKyB0ZXN0RmlsZS5nZXROYW1lKCksIG1vZGVsLmlzRGlydHkoKSk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlTdGF0ZUZvck1pc3NwZWxsZWRFbWJlZGRlZENoYXJzZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gIlRlc3RNb2RlbEhhbmRsZXJzLiIgKyBnZXROYW1lKCk7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoImNoYXJhc2V0LmpzcCIpOwotCQlTdHJpbmcgY29udGVudHMgPSAiPCVAIHBhZ2UgbGFuZ3VhZ2U9XCJqYXZhXCIgY29udGVudFR5cGU9XCJ0ZXh0L3htbDsgY2hhcmFzZXQ9VVRGLThcIiBwYWdlRW5jb2Rpbmc9XCJVVEYtOFwiJT5cbiIgKyAKLQkJCQkiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iICsgCi0JCQkJIjxDb250ZW50cz5cbiIgKyAKLQkJCQkiPEVycm9yIHN0YXRlPVwiZmF0YWxcIiBjb2RlPVwiXCI+XG4iICsgCi0JCQkJIjwvRXJyb3I+XG4iICsgCi0JCQkJIjwvQ29udGVudHM+IjsKLQkJaWYgKCF0ZXN0RmlsZS5leGlzdHMoKSkgewotCQkJdGVzdEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygidXRmOCIpKSwgSVJlc291cmNlLkZPUkNFLCBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCXRlc3RGaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygidXRmOCIpKSwgSVJlc291cmNlLkZPUkNFLCBudWxsKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQodGVzdEZpbGUpOwotCi0JCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQotCQkJYXNzZXJ0RmFsc2UoIm5ld2x5IG9wZW5lZCBtb2RlbCB3YXMgZGlydHksIGVtYmVkZGVkIGhhbmRsZXIgY2hhbmdlZD8gY3VycmVudCBmYW1pbHk6IiArIGVtYmVkZGVkSGFuZGxlci5nZXRGYW1pbHlJZCgpLCBtb2RlbC5pc0RpcnR5KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REaXJ0eVN0YXRlRm9yRW1iZWRkZWRDaGFyc2V0V2l0aG91dENvbnRlbnRUeXBlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJUZXN0TW9kZWxIYW5kbGVycy4iICsgZ2V0TmFtZSgpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQlwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQl9Ci0JCUlGaWxlIHRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJjaGFyYXNldC5qc3AiKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gIjwlQCBwYWdlIGxhbmd1YWdlPVwiamF2YVwiIGNvbnRlbnRUeXBlPVwiY2hhcnNldD1VVEYtOFwiIHBhZ2VFbmNvZGluZz1cIlVURi04XCIlPlxuIiArIAotCQkJCSI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiIgKyAKLQkJCQkiPENvbnRlbnRzPlxuIiArIAotCQkJCSI8RXJyb3Igc3RhdGU9XCJmYXRhbFwiIGNvZGU9XCJcIj5cbiIgKyAKLQkJCQkiPC9FcnJvcj5cbiIgKyAKLQkJCQkiPC9Db250ZW50cz4iOwotCQlpZiAoIXRlc3RGaWxlLmV4aXN0cygpKSB7Ci0JCQl0ZXN0RmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCJ1dGY4IikpLCBJUmVzb3VyY2UuRk9SQ0UsIG51bGwpOwotCQl9Ci0JCWVsc2UgewotCQkJdGVzdEZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCJ1dGY4IikpLCBJUmVzb3VyY2UuRk9SQ0UsIG51bGwpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZCh0ZXN0RmlsZSk7Ci0KLQkJCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCi0JCQlhc3NlcnRGYWxzZSgibmV3bHkgb3BlbmVkIG1vZGVsIHdhcyBkaXJ0eSwgZW1iZWRkZWQgaGFuZGxlciBjaGFuZ2VkPyBjdXJyZW50IGZhbWlseToiICsgZW1iZWRkZWRIYW5kbGVyLmdldEZhbWlseUlkKCksIG1vZGVsLmlzRGlydHkoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlTdGF0ZUZvclVuc3VwcG9ydGVkRW1iZWRkZWRDb250ZW50VHlwZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiVGVzdE1vZGVsSGFuZGxlcnMuIiArIGdldE5hbWUoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJfQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgidW5zdXBwb3J0ZWQuanNwIik7Ci0JCVN0cmluZyBjb250ZW50cyA9ICI8JUAgcGFnZSBsYW5ndWFnZT1cImphdmFcIiBjb250ZW50VHlwZT1cImltYWdlL2dpZlwiJT5cbiIgKyAKLQkJIm91dC53cml0ZShcIkdJRjg5YVwiIjsKLQkJaWYgKCF0ZXN0RmlsZS5leGlzdHMoKSkgewotCQkJdGVzdEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygidXRmOCIpKSwgSVJlc291cmNlLkZPUkNFLCBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCXRlc3RGaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygidXRmOCIpKSwgSVJlc291cmNlLkZPUkNFLCBudWxsKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQodGVzdEZpbGUpOwotCQkJYXNzZXJ0RmFsc2UoIm5ld2x5IG9wZW5lZCBtb2RlbCB3YXMgZGlydHkgIiArIHRlc3RGaWxlLmdldE5hbWUoKSwgbW9kZWwuaXNEaXJ0eSgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REaXJ0eVN0YXRlRm9yRW1iZWRkZWRDb250ZW50VHlwZVN1YlhNTCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgbmFtZSA9ICJidWcyNDMyNDMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChuYW1lLCBudWxsLCBudWxsKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnMjQzMjQzIiwgIi9idWcyNDMyNDMiKTsKLQkJfQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgicmRmLmpzcCIpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQodGVzdEZpbGUpOwotCQlhc3NlcnRGYWxzZSgibmV3bHkgb3BlbmVkIG1vZGVsIHdhcyBkaXJ0eSAiICsgdGVzdEZpbGUuZ2V0TmFtZSgpLCBtb2RlbC5pc0RpcnR5KCkpOwotCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5U3RhdGVGb3JEZWZhdWx0RW1iZWRkZWRDb250ZW50VHlwZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgbmFtZSA9ICJidWcyNDMyNDMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChuYW1lLCBudWxsLCBudWxsKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnMjQzMjQzIiwgIi9idWcyNDMyNDMiKTsKLQkJfQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiZGVmYXVsdC5qc3AiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKHRlc3RGaWxlKTsKLQkJYXNzZXJ0RmFsc2UoIm5ld2x5IG9wZW5lZCBtb2RlbCB3YXMgZGlydHkgIiArIHRlc3RGaWxlLmdldE5hbWUoKSwgbW9kZWwuaXNEaXJ0eSgpKTsKLQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REaXJ0eVN0YXRlV2l0aE5vUGFnZURpcmVjdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgbmFtZSA9ICJidWcyNDMyNDMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChuYW1lLCBudWxsLCBudWxsKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnMjQzMjQzIiwgIi9idWcyNDMyNDMiKTsKLQkJfQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgibm9kaXJlY3RpdmUuanNwIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZCh0ZXN0RmlsZSk7Ci0JCWFzc2VydEZhbHNlKCJuZXdseSBvcGVuZWQgbW9kZWwgd2FzIGRpcnR5ICIgKyB0ZXN0RmlsZS5nZXROYW1lKCksIG1vZGVsLmlzRGlydHkoKSk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vQXR0clZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL0F0dHJWYWx1ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5Y2Y1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vQXR0clZhbHVlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnBhcnNlci5Db250ZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgQXR0clZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFZBTFVFUyA9IHsiPDxQcmV2aW91cyIsICI8cGFnZT4iLCAiTmV4dD4+In07Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlVmFsdWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIik7Ci0KLQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0KLQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGJ1dHRvbiB2YWx1ZT1cIiIrIFZBTFVFU1swXSArIlwiPjwvYnV0dG9uPjxidXR0b24gdmFsdWU9XCIiICsgVkFMVUVTWzFdICsgIlwiPjwvYnV0dG9uPjxidXR0b24gdmFsdWU9XCIiICsgVkFMVUVTWzJdICsgIlwiPjwvYnV0dG9uPiIpOwotCi0JCUlET01Eb2N1bWVudCBkb20gPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlOb2RlTGlzdCBub2RlcyA9IGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7Ci0JCWFzc2VydFRydWUoIk11c3QgYmUgMyBidXR0b24gZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50LiIsIG5vZGVzLmdldExlbmd0aCgpID09IDMpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKLQkJCU5vZGUgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgidmFsdWUiKTsKLQkJCWFzc2VydFRydWUoIkF0dHJpYnV0ZSAndmFsdWUnIG5vdCBwcmVzZW50LiIsIGF0dHIgIT0gbnVsbCAmJiBhdHRyLmdldE5vZGVWYWx1ZSgpLmxlbmd0aCgpID4gMCk7Ci0JCQlhc3NlcnRFcXVhbHMoIkF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBlcXVhbCIsIFZBTFVFU1tpXSwgYXR0ci5nZXROb2RlVmFsdWUoKSk7IAotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkVGFnVmFsdWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIik7Ci0KLQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0KLQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgaHJlZj1cIjxjOm91dCB2YWx1ZT0ndGVzdC5odG1sJz48L2M6b3V0PlwiPlRlc3Q8L2E+Iik7Ci0KLQkJSURPTURvY3VtZW50IGRvbSA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCU5vZGVMaXN0IG5vZGVzID0gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIik7Ci0JCWFzc2VydFRydWUoIk11c3QgYmUgMSBhbmNob3IgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQuIiwgbm9kZXMuZ2V0TGVuZ3RoKCkgPT0gMSk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJSVRleHRSZWdpb24gZW1iZWRkZWRSZWdpb24gPSByZWdpb24uZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoOSk7Ci0JCWFzc2VydFRydWUoIlRoZSBhdHRyaWJ1dGUgaXMgbm90IGEgQ29udGV4dFJlZ2lvbkNvbnRhaW5lciIsIGVtYmVkZGVkUmVnaW9uIGluc3RhbmNlb2YgQ29udGV4dFJlZ2lvbkNvbnRhaW5lcik7Ci0JCU5vZGUgbm9kZSA9IG5vZGVzLml0ZW0oMCk7Ci0JCU5vZGUgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgiaHJlZiIpOwotCQlhc3NlcnRFcXVhbHMoIkF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBlcXVhbCIsICI8YzpvdXQgdmFsdWU9J3Rlc3QuaHRtbCc+PC9jOm91dD4iLCBhdHRyLmdldE5vZGVWYWx1ZSgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2RvbS9UZXN0SW1wb3J0ZWROb2Rlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RJbXBvcnRlZE5vZGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZTY5ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RJbXBvcnRlZE5vZGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEltcG9ydGVkTm9kZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbXBvcnRlZENvbW1lbnRzKCkgewotCQlJRE9NTW9kZWwgb3JnTW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLgotCi0JCWNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcigib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIpOwotCQlJRE9NTW9kZWwgZm9yZWlnbk1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS4KLQotCQljcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiKTsKLQkJZm9yZWlnbk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPCUtLSBhYmMgLS0lPiIpOwotCQlOb2RlIGNoaWxkID0gZm9yZWlnbk1vZGVsLmdldERvY3VtZW50KCkuZ2V0TGFzdENoaWxkKCk7Ci0JCS8vIGltcG9ydCBjb21tZW50IG5vZGUKLQkJY2hpbGQgPSBvcmdNb2RlbC5nZXREb2N1bWVudCgpLmltcG9ydE5vZGUoY2hpbGQsIHRydWUpOwotCQlvcmdNb2RlbC5nZXREb2N1bWVudCgpLmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJLy8gY3JlYXRlIHRleHQgbm9kZSBhbmQgaW5zZXJ0IGl0IGFmdGVyIGNvbW1lbnQgbm9kZQotCQljaGlsZCA9IG9yZ01vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoImFiYyIpOwotCQlvcmdNb2RlbC5nZXREb2N1bWVudCgpLmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJU3RyaW5nIHRleHQgPSBvcmdNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJkb2N1bWVudCB0ZXh0IHdhcyBub3QgZXhwZWN0ZWQiLCAiPCUtLSBhYmMgLS0lPmFiYyIsIHRleHQpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RPcnBoYW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2RvbS9UZXN0T3JwaGFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMTA1YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RPcnBoYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuQXR0ckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgInJlZ2lvbiBtYW5hZ2VtZW50IGVycm9yIiB0byBiZSB0aHJvd24gaW4gRE9NIHBhcnNlcgotICogKGFuZCBpdHMgc3Vic2VxdWVudCAnaGFuZGxlUmVmcmVzaCcgdG8gYmUgY2FsbGVkKS4gVGhpcyBpcyAibm9ybWFsIiBpbiB0aGlzCi0gKiBlcnJvciBjYXNlLCBvZiBhcHBlbmRpbmcgYW4ganNwIGVsZW1lbnQgdG8gYW4gaHRtbCBkb2N1bWVudC4gVGhpcwotICogZXJyb3IvZXhjZXB0aW9uIGlzIG5vdCBub3JtYWxseSBwcmludGVkIG91dCwgYnV0IGlzIGlmICdkZWJ1ZycgaXMgdHVybmVkIG9uLgotICovCi0KLXB1YmxpYyBjbGFzcyBUZXN0T3JwaGFuIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGZDYXRlZ29yeSA9ICJ1bml0dGVzdHMiOwotCi0JcHVibGljIFRlc3RPcnBoYW4oU3RyaW5nIG5hbWUpIHsKLQotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIERvY3VtZW50IGdldEpTUERvYygpIHsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlEb2N1bWVudCBkb2MgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJcmV0dXJuIGRvYzsKLQl9Ci0KLQlwcml2YXRlIERvY3VtZW50IGdldEhUTUxEb2MoKSB7Ci0KLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCURvY3VtZW50IGRvYyA9IHN0cnVjdHVyZWRNb2RlbC5nZXREb2N1bWVudCgpOwotCQlyZXR1cm4gZG9jOwotCX0KLQotCXByaXZhdGUgRWxlbWVudCBtYWtlRWxlbWVudChEb2N1bWVudCBkb2N1bWVudCkgewotCi0JCUVsZW1lbnQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgIjxiZWFuOm1lc3NhZ2UgLz4iKTsKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluSFRNTERvYygpIHsKLQotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAidGVzdE5vbk9ycGhhbkluSFRNTERvYyIpOwotCQlEb2N1bWVudCBkb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG1ha2VFbGVtZW50KGRvYyk7Ci0JCUF0dHJJbXBsIGF0dHIgPSAoQXR0ckltcGwpIGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJhdHRyVmFsdWU6ICIgKyBhdHRyVmFsdWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluSlNQRG9jKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5KU1BEb2MiKTsKLQkJRG9jdW1lbnQgZG9jID0gZ2V0SlNQRG9jKCk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IG1ha2VFbGVtZW50KGRvYyk7Ci0JCUF0dHJJbXBsIGF0dHIgPSAoQXR0ckltcGwpIGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCVN0cmluZyBhdHRyVmFsdWUgPSBhdHRyLmdldFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJhdHRyVmFsdWU6ICIgKyBhdHRyVmFsdWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0VHJ1ZShpc0pzcFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uT3JwaGFuSW5Cb3RoKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5Cb3RoIik7Ci0JCURvY3VtZW50IGpzcERvYyA9IGdldEpTUERvYygpOwotCQlFbGVtZW50IGNvbW1vbkVsZW1lbnQgPSBtYWtlRWxlbWVudChqc3BEb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBjb21tb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJanNwRG9jLmFwcGVuZENoaWxkKGNvbW1vbkVsZW1lbnQpOwotCQlib29sZWFuIGlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydFRydWUoaXNKc3BWYWx1ZSk7Ci0JCURvY3VtZW50IGh0bWxEb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCS8vIHRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgInJlZ2lvbiBtYW5hZ2VtZW50IGVycm9yIiB0byBiZQotCQkvLyB0aHJvd24gaW4gcGFyc2VyIChhbmQgaXRzIHN1YnNlcXVlbnQgJ2hhbmRsZVJlZnJlc2gnKS4KLQkJLy8gdGhpcyBpcyAibm9ybWFsIiBpbiB0aGlzIGVycm9yIGNhc2UsIG9mIGFwcGVuZGluZyBhbiBqc3AKLQkJLy8gZWxlbWVudCB0byBhbiBodG1sIGRvY3VtZW50LiBUaGlzIGVycm9yL2V4Y2VwdGlvbiBpcyBub3QKLQkJLy8gbm9ybWFsbHkgcHJpbnRlZCBvdXQsIGJ1dCBpcyBpZiAnZGVidWcnIGlzIHR1cm5lZCBvbi4KLQkJaHRtbERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluQm90aFJldmVyc2VkT3JkZXIoKSB7Ci0KLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgInRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyIik7Ci0JCURvY3VtZW50IGh0bWxEb2MgPSBnZXRIVE1MRG9jKCk7Ci0JCUVsZW1lbnQgY29tbW9uRWxlbWVudCA9IG1ha2VFbGVtZW50KGh0bWxEb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBjb21tb25FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJaHRtbERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJYm9vbGVhbiBpc0pzcFZhbHVlID0gYXR0ci5oYXNOZXN0ZWRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiaXNKc3BWYWx1ZTogIiArIGlzSnNwVmFsdWUpOwotCQlhc3NlcnRGYWxzZShpc0pzcFZhbHVlKTsKLQkJRG9jdW1lbnQganNwRG9jID0gZ2V0SlNQRG9jKCk7Ci0JCS8vIHRoaXMgbGl0dGxlIHRlc3Qgc2hvd3MgaXRzIGltcG9ydGFudCB0bwotCQkvLyBhY3R1YWxseSBjcmVhdGUgdGhlIGVsZW1lbnQgd2l0aCB0aGUgcmlnaHQga2luZCBvZgotCQkvLyBkb2N1bWVudCwgbm90IGp1c3QgYXBwZW5kLgotCQkvLyAoYW5kLCBhcHBlbmQgaXMgbmVlZGVkIHRvbywgYXMgY2FuIGJlIHNlZW4gYnkKLQkJLy8gY29tbWVudGluZyBvdXQgb25lIG9yIHRoZSBvdGhlciBvZiB0aGUgZm9sbG93aW5nCi0JCS8vIHR3byBsaW5lcy4KLQkJY29tbW9uRWxlbWVudCA9IG1ha2VFbGVtZW50KGpzcERvYyk7Ci0JCWpzcERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJLy8KLQkJYXR0ciA9IChBdHRySW1wbCkgY29tbW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJzcmMiKTsKLQkJYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0VHJ1ZShpc0pzcFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb0JvdGhUZXN0cygpIHsKLQotCQl0ZXN0Tm9uT3JwaGFuSW5IVE1MRG9jKCk7Ci0JCXRlc3ROb25PcnBoYW5JbkpTUERvYygpOwotCQl0ZXN0Tm9uT3JwaGFuSW5Cb3RoKCk7Ci0JCXRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsQWRhcHRlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEFkYXB0ZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNzczOTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsQWRhcHRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotCi0vKioKLSAqIEBkZXByZWNhdGVkIC0gd2UgZG9uJ3QgaGF2ZSBJTm9kZUFkYXB0ZXJzIGRpcmVjdGx5IG9uIG91ciBtb2RlbHMgYW5kIHRoaXMKLSAqICAgICAgICAgICAgIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c3VhbCB0ZXN0IHN1aXRlICh0ZXN0LnhtbCkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbEFkYXB0ZXJzIGV4dGVuZHMgVGVzdENhc2UgewotCi0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlET01Nb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQl0cnkgewotCQkJYm9vbGVhbiB0ZXN0ID0gc3RydWN0dXJlZE1vZGVsLmdldElkKCkuZXF1YWxzKElNb2RlbE1hbmFnZXIuVU5NQU5BR0VEX01PREVMKTsKLQkJCWFzc2VydFRydWUodGVzdCk7Ci0JCQlNb2RlbFF1ZXJ5QWRhcHRlciBtb2RlbFF1ZXJ5QWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgc3RydWN0dXJlZE1vZGVsLmdldEFkYXB0ZXIoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaW5pdGlhbCBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCBtb2RlbFF1ZXJ5QWRhcHRlcik7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsID0gc3RydWN0dXJlZE1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCQkvLyBJRE9NRG9jdW1lbnQgbmV3RG9jdW1lbnQgPSAoKElET01Nb2RlbCkKLQkJCS8vIG5ld01vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJLy8gSU5vZGVOb3RpZmllciBub3RpZmllciA9IG5ld0RvY3VtZW50OwotCQkJTW9kZWxRdWVyeUFkYXB0ZXIgcmVzdWx0ID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBuZXdNb2RlbC5nZXRBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJCWFzc2VydE5vdE51bGwoIm5ld0luc3RhbmNlIG1vZGVsUXVlcnlBZGFwdGVyIHNob3VsZCBub3QgYmUgbnVsbCIsIHJlc3VsdCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCS8vIGV2ZW4gdGhvdWdoIG1vZGVsIGlzIHVubWFuYWdlZCwgcmVsZWFzZSBzdGlsbCByZXF1aXJlZCwgc2luY2UKLQkJCS8vIGFkYXB0ZXIgZmFjdG9yaWVzLCBldGMuLCBtYXkgYmUgZGVwZW5kaW5nIG9uIGl0LgotCQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJLy8gaWYgYWJvdmUgY29tcGxldGUncyBub3JtYWxseSAod2l0aCBubyBleGNlcHRpb25zKQotCQkJLy8gY29uc2lkZXIgcGFzc2VkLgotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNb2RlbE1hbmFnZXIoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJcmV0dXJuIG1vZGVsTWFuYWdlcjsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxJbmNsdWRlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsSW5jbHVkZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3ZTI3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxJbmNsdWRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnRsZC5wcm92aXNpb25hbC5UTERFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguQnVuZGxlUmVzb3VyY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuTW9kZWxRdWVyeVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVXcmFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUZXN0cyBmb3IgSlNQIGluY2x1ZGUgZGlyZWN0aXZlcwotICovCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsSW5jbHVkZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JU3RyaW5nIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHRoZSBjdXN0b20gdGFnIGNvbnRlbnQgbW9kZWwgd2hlbiBzaW5nbGUgbGluZSBmcmFnbWVudHMgYXJlIHVzZWQKLQkgKiB3aXRob3V0IHRyYWlsaW5nIHdoaXRlIHNwYWNlCi0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudE1vZGVsU2luZ2xlTGluZUluY2x1ZGVkRmlsZVdpdGhOb1NwYWNlc0J1dFdpdGhUYWdsaWJJbkluY2x1ZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gInByajExOTU3Nl9hIjsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHByb2plY3ROYW1lLCAiLyIgKyBwcm9qZWN0TmFtZSk7Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpLmV4aXN0cygpKTsKLQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCIvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5Mi5qc3AiKSk7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFzIG5vIGNvbnRlbnQiLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXRMZW5ndGgoKSA+IDApOwotCi0JCQlFbGVtZW50IGVsZW1lbnQgPSAoRWxlbWVudCkgbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbig3NSk7Ci0JCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBlZCA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkobW9kZWwpLmdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gKFRMRCkgZWxlbWVudCBkZWNsYXJhdGlvbiBmb3VuZCBmb3IgIiArIGVsZW1lbnQuZ2V0Tm9kZU5hbWUoKSwgZWQpOwotCQkJYXNzZXJ0VHJ1ZSgibm90IGEgd3JhcHBpbmcgY29udGVudCBtb2RlbCBlbGVtZW50IGRlY2xhcmF0aW9uOiAiICsgZWQuZ2V0Tm9kZU5hbWUoKSwgZWQgaW5zdGFuY2VvZiBDTU5vZGVXcmFwcGVyKTsKLQkJCWFzc2VydFRydWUoIm5vdCBhIHRhZ2xpYiBjb250ZW50IG1vZGVsIGVsZW1lbnQgZGVjbGFyYXRpb246ICIgKyBlZC5nZXROb2RlTmFtZSgpLCAoKENNTm9kZVdyYXBwZXIpIGVkKS5nZXRPcmlnaW5Ob2RlKCkgaW5zdGFuY2VvZiBUTERFbGVtZW50RGVjbGFyYXRpb24pOwotCQkJU3RyaW5nIHRhZ0NsYXNzTmFtZSA9ICgoVExERWxlbWVudERlY2xhcmF0aW9uKSAoKENNTm9kZVdyYXBwZXIpIGVkKS5nZXRPcmlnaW5Ob2RlKCkpLmdldFRhZ2NsYXNzKCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJubyB0YWcgY2xhc3MgbmFtZSBmb3VuZCIsIHRhZ0NsYXNzTmFtZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFZlcmlmeSBpbmNsdWRlZCBmaWxlcyBhcmUgdHJhbnNsYXRlZCBwcm9wZXJseSB3aGVuIHRoZXkgY29udGFpbiBhCi0JICogbXVsdGlwbGUgbGluZXMKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUcmFuc2xhdGVNdWx0aUxpbmVJbmNsdWRlZEZpbGVXaXRoU3BhY2VzQW5kU2NyaXB0bGV0SW5JbmNsdWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJwcmoxMTk1NzZfYyI7Ci0KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOwotCQlhc3NlcnRUcnVlKCJwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKS5leGlzdHMoKSk7Ci0KLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiLyIgKyBwcm9qZWN0TmFtZSArICIvV2ViQ29udGVudC9ib2R5My5qc3AiKSk7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFzIG5vIGNvbnRlbnQiLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXRMZW5ndGgoKSA+IDApOwotCQkJTW9kZWxIYW5kbGVyRm9ySlNQLmVuc3VyZVRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkobW9kZWwpOwotCi0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJU3RyaW5nIHNvdXJjZSA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKS5nZXRKYXZhVGV4dCgpOwotCQkJYXNzZXJ0VHJ1ZSgic2NyaXB0bGV0IHdpdGggdmFyaWFibGUgZGVjbGFyYXRpb24gbm90IGZvdW5kXG4iICsgc291cmNlLCBzb3VyY2UuaW5kZXhPZigiamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSIpID4gLTEpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWZXJpZnkgaW5jbHVkZWQgZmlsZXMgYXJlIHRyYW5zbGF0ZWQgcHJvcGVybHkgd2hlbiB0aGV5IGNvbnRhaW4gYQotCSAqIHNpbmdsZSBsaW5lIGFuZCBkb2N1bWVudCByZWdpb24gYW5kIG5vIHRyYWlsaW5nIHdoaXRlIHNwYWNlLgotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zbGF0ZVNpbmdsZUxpbmVJbmNsdWRlZEZpbGVXaXRoTm9TcGFjZXNCdXRTY3JpcHRsZXRJbkluY2x1ZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gInByajExOTU3Nl9iIjsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHByb2plY3ROYW1lLCAiLyIgKyBwcm9qZWN0TmFtZSk7Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpLmV4aXN0cygpKTsKLQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCIvIiArIHByb2plY3ROYW1lICsgIi9XZWJDb250ZW50L2JvZHkzLmpzcCIpKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBoYXMgbm8gY29udGVudCIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldExlbmd0aCgpID4gMCk7Ci0JCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlTdHJpbmcgc291cmNlID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpLmdldEphdmFUZXh0KCk7Ci0JCQlhc3NlcnRUcnVlKCJzY3JpcHRsZXQgd2l0aCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBub3QgZm91bmQiLCBzb3VyY2UuaW5kZXhPZigiamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSIpID4gLTEpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxSZWxlYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxSZWxlYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZjUzOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsUmVsZWFzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbFJlbGVhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQTW9kZWwoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlET01Nb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlib29sZWFuIHRlc3QgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0SWQoKS5lcXVhbHMoSU1vZGVsTWFuYWdlci5VTk1BTkFHRURfTU9ERUwpOwotCQlhc3NlcnRUcnVlKHRlc3QpOwotCQkvLyBldmVuIHRob3VnaCBtb2RlbCBpcyB1bm1hbmFnZWQsIHJlbGVhc2Ugc3RpbGwgcmVxdWlyZWQsIHNpbmNlIAotCQkvLyBhZGFwdGVyIGZhY3RvcmllcywgZXRjLiwgbWF5IGJlIGRlcGVuZGluZyBvbiBpdC4gCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJLy8gaWYgYWJvdmUgY29tcGxldGUncyBub3JtYWxseSAod2l0aCBubyBleGNlcHRpb25zKSAKLQkJLy8gY29uc2lkZXIgcGFzc2VkLiAKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZ2V0TW9kZWxNYW5hZ2VyKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXJldHVybiBtb2RlbE1hbmFnZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsV2l0aE5vRmlsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsV2l0aE5vRmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2E5MjY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbFdpdGhOb0ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuSlNQQ29yZVRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxXaXRoTm9GaWxlIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdEpTUE1vZGVsKCkgewotCQlJRE9NTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWJvb2xlYW4gdGVzdCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRJZCgpLmVxdWFscyhJTW9kZWxNYW5hZ2VyLlVOTUFOQUdFRF9NT0RFTCk7Ci0JCWFzc2VydFRydWUodGVzdCk7Ci0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTE2MDY2XzEoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KCJidWcxMTYwNjZfMSIsIG51bGwsIG51bGwpOwotCi0JCUlGaWxlIHRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJub25FeGlzdGFudC5qc3AiKTsKLQkJYXNzZXJ0RmFsc2UoIm5vbkV4aXN0YW50LmpzcCB0ZXN0IGZpbGUgYWxyZWFkeSBleGlzdHMgKG5vdCBhIGNsZWFuIHdvcmtzcGFjZSk/IiwgdGVzdEZpbGUuZXhpc3RzKCkpOwotCi0JCS8vIEdldCB0aGUgbW9kZWwgYW5kIHNldCBhIHJlZmVyZW5jZSB0byB0aGF0IHRhZyBsaWJyYXJ5IGludG8gaXQKLQkJdHJ5IHsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdCh0ZXN0RmlsZSwgZmFsc2UpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IG5ldyBtb2RlbCBmb3IgIiArIHRlc3RGaWxlLmdldEZ1bGxQYXRoKCksIG1vZGVsKTsKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPCVAdGFnbGliIHByZWZpeD1cInRhZ2RlcGVuZGVudFwiIHVyaT1cInRhZ2RlcGVuZGVudFwiPlxuPHRhZ2RlcGVuZGVudDpjb2RlPiA8PDwgPC90YWdkZXBlbmRlbnQ6Y29kZT4iKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTE2MDY2XzIoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KCJidWcxMTYwNjZfMiIsIG51bGwsIG51bGwpOwotCQkvLyBDb3B5IGEgVExEIGludG8gdGhlIHByb2plY3QKLQkJSUZpbGUgdGxkID0gY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8xMTYwNjYvdGFnZGVwLnRsZCIsICIvYnVnMTE2MDY2XzIvdGFnZGVwLnRsZCIpOwotCQlhc3NlcnROb3ROdWxsKCJUTEQgZW50cnkgd2FzIG5vdCBjb3BpZWQgcHJvcGVybHkiLCB0bGQpOwotCQlhc3NlcnRUcnVlKCJUTEQgSUZpbGUgZG9lcyBub3QgZXhpc3QiLCB0bGQuZXhpc3RzKCkpOwotCi0JCUlGaWxlIHRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJub25FeGlzdGFudC5qc3AiKTsKLQkJYXNzZXJ0RmFsc2UoIm5vbkV4aXN0YW50LmpzcCB0ZXN0IGZpbGUgYWxyZWFkeSBleGlzdHMgKG5vdCBhIGNsZWFuIHdvcmtzcGFjZSk/IiwgdGVzdEZpbGUuZXhpc3RzKCkpOwotCi0JCS8vIEdldCB0aGUgbW9kZWwgYW5kIHNldCBhIHJlZmVyZW5jZSB0byB0aGF0IHRhZyBsaWJyYXJ5IGludG8gaXQKLQkJdHJ5IHsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdCh0ZXN0RmlsZSwgZmFsc2UpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IG5ldyBtb2RlbCBmb3IgIiArIHRlc3RGaWxlLmdldEZ1bGxQYXRoKCksIG1vZGVsKTsKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPCVAdGFnbGliIHByZWZpeD1cInRhZ2RlcGVuZGVudFwiIHVyaT1cInRhZ2RlcGVuZGVudFwiPlxuPHRhZ2RlcGVuZGVudDpjb2RlPiA8PDwgPC90YWdkZXBlbmRlbnQ6Y29kZT4iKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXByaXZhdGUgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvSlNQVG9rZW5pemVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvc291cmNlL0pTUFRva2VuaXplclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyMmRkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvSlNQVG9rZW5pemVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuc291cmNlOwotCi0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnBhcnNlci5pbnRlcm5hbC5KU1BUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEpTUFRva2VuaXplclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBKU1BUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQotCXByaXZhdGUgdm9pZCByZXNldChSZWFkZXIgaW4pIHsKLQkJdG9rZW5pemVyLnJlc2V0KGluKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVzZXQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpbGVSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKSwgInV0ZjgiKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCQllLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJcmVzZXQocmVhZGVyKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQl0b2tlbml6ZXIgPSBuZXcgSlNQVG9rZW5pemVyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJdG9rZW5pemVyID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTQ0ODA3X0F0dHJOYW1lKCkgewotCQlTdHJpbmcgaW5wdXQgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCA0MDA7IGkrKykgewotCQkJaW5wdXQgPSBpbnB1dCArPSAiPGEgIjsKLQkJfQotCQl0cnkgewotCQkJcmVzZXQobmV3IFN0cmluZ1JlYWRlcihpbnB1dCkpOwotCQkJYXNzZXJ0VHJ1ZSgiZW1wdHkgaW5wdXQiLCB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCk7Ci0JCQl3aGlsZSAodG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpIHsKLQkJCQkvLyByZWFsbHksIHdlIGp1c3Qgd2FudCB0byBsb29wCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxNDQ4MDdfQXR0clZhbHVlKCkgewotCQlTdHJpbmcgaW5wdXQgPSAiPGEgYj0iOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7Ci0JCQlpbnB1dCA9IGlucHV0ICs9ICI8YSAiOwotCQl9Ci0JCXRyeSB7Ci0JCQlyZXNldChuZXcgU3RyaW5nUmVhZGVyKGlucHV0KSk7Ci0JCQlhc3NlcnRUcnVlKCJlbXB0eSBpbnB1dCIsIHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKTsKLQkJCXdoaWxlICh0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCkgewotCQkJCS8vIHJlYWxseSwgd2UganVzdCB3YW50IHRvIGxvb3AKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCQllLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDE0NDgwN19FcXVhbHMoKSB7Ci0JCVN0cmluZyBpbnB1dCA9ICI8YSBiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCA0MDA7IGkrKykgewotCQkJaW5wdXQgPSBpbnB1dCArPSAiPGEgIjsKLQkJfQotCQl0cnkgewotCQkJcmVzZXQobmV3IFN0cmluZ1JlYWRlcihpbnB1dCkpOwotCQkJYXNzZXJ0VHJ1ZSgiZW1wdHkgaW5wdXQiLCB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCk7Ci0JCQl3aGlsZSAodG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpIHsKLQkJCQkvLyByZWFsbHksIHdlIGp1c3Qgd2FudCB0byBsb29wCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRDb21tZW50KCkgewotCQlyZXNldCgianNwY29tbWVudDAxLmpzcCIpOwotCQl0cnkgewotCQkJYXNzZXJ0VHJ1ZSgiZW1wdHkgaW5wdXQiLCB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCk7Ci0JCQl3aGlsZSAodG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpIHsKLQkJCQkvLyByZWFsbHksIHdlIGp1c3Qgd2FudCB0byBsb29wCi0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaCAoU3RhY2tPdmVyZmxvd0Vycm9yIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQkKLQkJLy8gc3VjY2VzcyBpZiBTdGFja092ZXJGbG93RXJyb3IgZG9lcyBub3Qgb2NjdXIgd2l0aCB0b2tlbml6ZXIuCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCS8vIFsyNjAwMDRdCi0JcHVibGljIHZvaWQgdGVzdDI2MDA0KCkgewotCQlTdHJpbmcgaW5wdXQgPSAiPGM6c2V0IHZhcj1cImZvb1wiIHZhbHVlPVwiJHtmb299IGJhciAjXCIgLz4gPGRpdiBpZD1cImNvbnRhaW5lclwiID5UZXN0PC9kaXY+IjsKLQkJdHJ5IHsKLQkJCXJlc2V0KG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpKTsKLQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCWFzc2VydFRydWUoImVtcHR5IGlucHV0IiwgcmVnaW9uICE9IG51bGwpOwotCQkJd2hpbGUgKHJlZ2lvbiAhPSBudWxsKSB7Ci0JCQkJaWYgKHJlZ2lvbi5nZXRUeXBlKCkgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSkgewotCQkJCQlyZWdpb24gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCWFzc2VydE5vdE51bGwoImRvY3VtZW50IGNvbnN1bWVkIGJ5IHRyYWlsaW5nICQgb3IgIyIsIHJlZ2lvbik7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJcmVnaW9uID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQlmYWlsKHMudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0JLy8gWzE1MDc5NF0KLQlwdWJsaWMgdm9pZCB0ZXN0MTUwNzk0KCkgewotCQlTdHJpbmcgaW5wdXQgPSAiPGEgaHJlZj1cIjxqc3A6Z2V0UHJvcGVydHkvPlwiPiI7Ci0JCXRyeSB7Ci0JCQlyZXNldChuZXcgU3RyaW5nUmVhZGVyKGlucHV0KSk7Ci0JCQlJVGV4dFJlZ2lvbiByZWdpb24gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlhc3NlcnRUcnVlKCJlbXB0eSBpbnB1dCIsIHJlZ2lvbiAhPSBudWxsKTsKLQkJCXdoaWxlIChyZWdpb24gIT0gbnVsbCkgewotCQkJCWlmIChyZWdpb24uZ2V0VHlwZSgpID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUpIHsKLQkJCQkJcmVnaW9uID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlhc3NlcnROb3ROdWxsKCJkb2N1bWVudCBjb25zdW1lZCBieSBlbWJlZGRlZCBKU1AgdGFnIiwgcmVnaW9uKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlyZWdpb24gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIHRlc3QgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlZ3Jlc3Npb24gb2YgMjk5MTQ2IHdoZXJlICYjMTYwIHdhcyBiZWluZwotCSAqIGJyb2tlbiB1cCBpbnRvICYgIzEgNjAgYW5kIHRoZW4gd2hlbiBhIDsgd2FzIHR5cGVkIGNvdWxkIG5vdCBiZSByZWNvZ25pemVkCi0JICogYXMgYSBVbmljb2RlIGNoYXJhY3RlciByZWZlcmVuY2UuICBJdCBzaG91bGQgYmUgZGV0ZWN0ZWQgYXMgJiAjMTYwIHdoaWNoIGlzCi0JICogd2hhdCBpcyB0ZXN0ZWQgZm9yIGhlcmUuPC9wPgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3QyOTkxNDYoKSB7Ci0JCVN0cmluZyBpbnB1dCA9ICI8cm9vdD4mIzE2MDwvcm9vdD4iOwotCQl0cnkgewotCQkJcmVzZXQobmV3IFN0cmluZ1JlYWRlcihpbnB1dCkpOwotCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbnVsbDsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKLQkJCQlyZWdpb24gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQl9Ci0JCQlhc3NlcnROb3ROdWxsKCJUaGlzIHJlZ2lvbiBzaG91bGQgZXhpc3QiLCByZWdpb24pOwotCQkJYXNzZXJ0RXF1YWxzKCJUaGUgcmVnaW9uIGRpZCBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgc3RhcnQgbG9jYXRpb24iLCA3LCByZWdpb24uZ2V0U3RhcnQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIlRoZSByZWdpb24gZGlkIG5vdCBoYXZlIHRoZSBleHBlY3RlZCBsZW5ndGgiLCA0LCByZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQlmYWlsKHMudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0JCi0JLy8gTmVlZCB0byBzaW11bGF0ZSB0eXBpbmcgY2hhcmFjdGVycyBpbnRvIHRoZSBkb2N1bWVudCB0byBjYXVzZSB0aGUgc3RhY2sgb3ZlcmZsb3cuCi0JLy8gVGVzdCBpcyBpcnJlbGV2YW50IGR1ZSB0byBjaGFuZ2VzIGluIFsyODA0OTZdCi0JLypwdWJsaWMgdm9pZCB0ZXN0MjY1MzgwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJidWdfMjY1MzgwIjsKLQkJaW50IG9sZERlcHRoID0gQm9vbGVhblN0YWNrLm1heERlcHRoOwotCQkvLyBNYWtlIHRoZSBtYXhEZXB0aCBlcXVpdmFsZW50IHRvIHRoYXQgd2UnZCBzZWUgaW4gYSBub3JtYWwgZWRpdG9yCi0JCUJvb2xlYW5TdGFjay5tYXhEZXB0aCA9IDEwMDsKLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHByb2plY3ROYW1lLCAiLyIgKyBwcm9qZWN0TmFtZSk7Ci0JCUlGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUoInRlc3QyNjUzODAuanNwIik7Ci0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCQotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBqc3BEb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkKLQkJCS8vIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdG8gYmVnaW4gaW5zZXJ0aW5nIHRleHQKLQkJCWludCBvZmZzZXQgPSA0MTQ7Ci0JCQkvLyBTdHJpbmcgdG8gaW5zZXJ0IGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIKLQkJCVN0cmluZyBjaWYgPSAiPGM6b3V0IHZhbHVlPVwibG9yZW0gaXBzdW1cIj48L2M6b3V0PlxuIjsKLQkJCS8vIEl0IHRha2VzIHNldmVyYWwgdGFncyB0byBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIHN0YWNrIHdhcyBvdmVyZmxvd2VkCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGNpZi5sZW5ndGgoKTsgaisrKQotCQkJCQlqc3BEb2N1bWVudC5yZXBsYWNlKG9mZnNldCsrLCAwLCBTdHJpbmcudmFsdWVPZihjaWYuY2hhckF0KGopKSk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKFN0YWNrT3ZlcmZsb3dFcnJvciBlKSB7Ci0JCQlmYWlsKCJTdGFjayBvdmVyZmxvdyBlbmNvdW50ZXJlZCB3aGlsZSBlZGl0aW5nIGRvY3VtZW50LiIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlCb29sZWFuU3RhY2subWF4RGVwdGggPSBvbGREZXB0aDsKLQkJfQotCX0qLwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvc291cmNlL2pzcGNvbW1lbnQwMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvanNwY29tbWVudDAxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhOGMwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvanNwY29tbWVudDAxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+Ci08JS0tIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAtLSU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9CdW5kbGVSZXNvdXJjZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RhZ2xpYmluZGV4L0J1bmRsZVJlc291cmNlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Y1NTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RhZ2xpYmluZGV4L0J1bmRsZVJlc291cmNlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXg7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuSlNQQ29yZVRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgQnVuZGxlUmVzb3VyY2VVdGlsIHsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aChmdWxsUGF0aCk7Ci0JCQkvLyBmb3IgKGludCBqID0gMTsgaiA8PSBwYXRoLnNlZ21lbnRDb3VudCgpIC0gMjsgaisrKSB7Ci0JCQkvLyBJUGF0aCBmb2xkZXJQYXRoID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMocGF0aC5zZWdtZW50Q291bnQoKQotCQkJLy8gLSBqKTsKLQkJCS8vIElGb2xkZXIgZm9sZGVyID0KLQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKGZvbGRlclBhdGgpOwotCQkJLy8gaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCS8vIGZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJaW50IGkgPSAtMTsKLQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQl9Ci0JCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiY2FuJ3QgZmluZCAiICsgZW50cnluYW1lKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJdHJ5IHsKLQkJCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbnVsbCwgZSkpOwotCQkJCX0KLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElGaWxlIGZpbGVbXSA9IG5ldyBJRmlsZVsxXTsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQl0cnkgewotCQkJCQlmaWxlWzBdID0gX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnluYW1lLCBmdWxsUGF0aCk7Ci0JCQkJfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG51bGwsIGUpKTsKLQkJCQl9Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZVppcHBlZEVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyB6aXBGaWxlRW50cnksIGZpbmFsIElQYXRoIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCQkJVVJMIGVudHJ5ID0gSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSh6aXBGaWxlRW50cnkpOwotCQkJCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJCQkJWmlwSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgWmlwSW5wdXRTdHJlYW0oZW50cnkub3BlblN0cmVhbSgpKTsKLQotCQkJCQkJWmlwRW50cnkgbmV4dEVudHJ5ID0gaW5wdXQuZ2V0TmV4dEVudHJ5KCk7Ci0JCQkJCQl3aGlsZSAobmV4dEVudHJ5ICE9IG51bGwpIHsKLQkJCQkJCQlJUGF0aCBwYXRoID0gZnVsbFRhcmdldFBhdGguYXBwZW5kKG5leHRFbnRyeS5nZXROYW1lKCkpOwotCi0JCQkJCQkJaWYgKG5leHRFbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIocGF0aCk7Ci0JCQkJCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UgewotCQkJCQkJCQlJUGF0aCBmb2xkZXJQYXRoID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0JCQkJCQkJCWZvciAoaW50IGkgPSBmb2xkZXJQYXRoLnNlZ21lbnRDb3VudCgpOyBpID4gMDsgaS0tKSB7Ci0JCQkJCQkJCQlJUGF0aCBwYXJlbnRGb2xkZXJQYXRoID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoaSk7Ci0JCQkJCQkJCQlpZiAocGFyZW50Rm9sZGVyUGF0aC5zZWdtZW50Q291bnQoKSA+IDEpIHsKLQkJCQkJCQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKHBhcmVudEZvbGRlclBhdGgpOwotCQkJCQkJCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCQkJCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7Ci0JCQkJCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQkJCQkJCWludCBpID0gLTE7Ci0JCQkJCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWVsc2UgewotCQkJCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQkJCQkJbmV4dEVudHJ5ID0gaW5wdXQuZ2V0TmV4dEVudHJ5KCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJjYW4ndCBmaW5kICIgKyB6aXBGaWxlRW50cnkpOwotCQkJCX0KLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9qZWN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIC0KLQkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0Ci0JICogQHBhcmFtIGxvY2F0aW9uIC0KLQkgKiAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJvamVjdCwgb3IgbnVsbCBpZiB0aGUgZGVmYXVsdCBvZgotCSAqICAgICAgICAgICAgIi9uYW1lIiB3aXRoaW4gdGhlIHdvcmtzcGFjZSBpcyB0byBiZSB1c2VkCi0JICogQHBhcmFtIG5hdHVyZUlkcyAtCi0JICogICAgICAgICAgICBhbiBhcnJheSBvZiBuYXR1cmVzIElEcyB0byBzZXQgb24gdGhlIHByb2plY3QsIG51bGwgaWYgbm9uZQotCSAqICAgICAgICAgICAgc2hvdWxkIGJlIHNldAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9OQVRVUkVfSUQgPSAib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSI7Ci0KLQkvKioKLQkgKiBBZGQgYSBsaWJyYXJ5IGVudHJ5IChsaWtlIGEgamFyKSB0byB0aGUgY2xhc3NwYXRoIG9mIGEgcHJvamVjdC4gVGhlIGphcgotCSAqIG11c3QgYmUgaW4geW91ciBwb2plY3QuIFlvdSBjYW4gY29weSB0aGUgamFyIGludG8geW91ciB3b3Jrc3BhY2UgdXNpbmcKLQkgKiBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkKLQkgKiAKLQkgKiBAcGFyYW0gcHJvagotCSAqICAgICAgICAgICAgYXNzdW1lZCBpdCBoYXMgamF2YSBuYXR1cmUKLQkgKiBAcGFyYW0gcGF0aFRvSmFyCi0JICogICAgICAgICAgICBwcm9qZWN0IHJlbGF0aXZlLCBubyBsZWFkaW5nIHNsYXNoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZExpYnJhcnlFbnRyeShJUHJvamVjdCBwcm9qLCBTdHJpbmcgcGF0aFRvSmFyKSB7Ci0KLQkJSVBhdGggcHJvakxvY2F0aW9uID0gcHJvai5nZXRMb2NhdGlvbigpOwotCQlJUGF0aCBhYnNKYXJQYXRoID0gcHJvakxvY2F0aW9uLmFwcGVuZChwYXRoVG9KYXIpOwotCi0JCUlKYXZhUHJvamVjdCBqUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShwcm9qKTsKLQotCQlJQ2xhc3NwYXRoRW50cnkgc3RydXRzSmFyRW50cnkgPSBKYXZhQ29yZS5uZXdMaWJyYXJ5RW50cnkoYWJzSmFyUGF0aCwgbnVsbCwgbnVsbCk7Ci0JCXRyeSB7Ci0JCQlJQ2xhc3NwYXRoRW50cnlbXSBjdXJyZW50RW50cmllcyA9IGpQcm9qLmdldFJhd0NsYXNzcGF0aCgpOwotCi0JCQlMaXN0IGwgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlsLmFkZEFsbChBcnJheXMuYXNMaXN0KGN1cnJlbnRFbnRyaWVzKSk7Ci0JCQlsLmFkZChzdHJ1dHNKYXJFbnRyeSk7Ci0KLQkJCUlDbGFzc3BhdGhFbnRyeVtdIG5ld0VudHJpZXMgPSAoSUNsYXNzcGF0aEVudHJ5W10pIGwudG9BcnJheShuZXcgSUNsYXNzcGF0aEVudHJ5W2wuc2l6ZSgpXSk7Ci0JCQlqUHJvai5zZXRSYXdDbGFzc3BhdGgobmV3RW50cmllcywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvVGVzdEluZGV4LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9UZXN0SW5kZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkZTU1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90YWdsaWJpbmRleC9UZXN0SW5kZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXg7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLnJlc291cmNlcy5SZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTXVsdGlTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuY29yZS5DbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnRsZC5wcm92aXNpb25hbC5UTEREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnRsZC5wcm92aXNpb25hbC5UTERFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5JSmFyUmVjb3JkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuSVRhZ2xpYlJlY29yZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLklVUkxSZWNvcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5UYWdsaWJJbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50bW9kZWwuQ01Ob2RlV3JhcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBUYWdsaWJJbmRleC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RJbmRleCBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQlpbnQgTUFYX1JFVFJZUyA9IDU7Ci0JaW50IFBBVVNFX1RJTUUgPSAxOwotCWJvb2xlYW4gREVCVUcgPSB0cnVlOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiKTsKLQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQl3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBub25pbnRlcmFjdGl2ZTsKLQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCAidHJ1ZSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmICh3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQkJcmVtb3ZlQWxsUHJvamVjdHMoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXZhaWxhYmxlQWZ0ZXJBZGRpbmdKQVJUb0J1aWxkUGF0aCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUyX2Zvcl8xMTgyNTEtZSI7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgiYnVnXzExODI1MS1lIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZSIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYmVmb3JlIHVucGFja2luZyIsIDAsIHJlY29yZHMubGVuZ3RoKTsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZSIsICIvYnVnXzExODI1MS1lIik7Ci0JCS8vIGJ1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAotCQkvLyBidWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKLQkJLy8gYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKLQkJLy8gYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwCi0JCS8vIGJ1Z18xMTgyNTEtZS8uY2xhc3NwYXRoCi0JCS8vIGJ1Z18xMTgyNTEtZS8ucHJvamVjdAotCQlJVGFnbGliUmVjb3JkIHRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0TnVsbCgidW5leHBlY3RlZCByZWNvcmQgZm91bmQgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIHVucGFja2luZyBidXQgYmVmb3JlIGNvcHlpbmciLCAyLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJLyoKLQkJICogaW5jcmVhc2UgYnkgPGI+b25lPC9iPiBmb3IgdGhlIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgKG9uZQotCQkgKiBpbXBsaWNpdCBmb3IgdGhlIFRMRCBpbiB0aGUgamFyIGFzIGEgcmVzb3VyY2UgYW5kIGFub3RoZXIgaW1wbGljaXQKLQkJICogb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgc2FtZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIG9uIHRoZQotCQkgKiBjbGFzc3BhdGgpCi0JCSAqLwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9zYW1wbGVfdGxkLmphciIpOwotCi0JCXVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiI7Ci0JCXRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgcmVjb3JkIG1pc3NpbmcgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCAzLCByZWNvcmRzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF2YWlsYWJsZUFmdGVyQ29weWluZ0pBUkludG9Qcm9qZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoImJ1Z18xMTgyNTEtZiIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGJlZm9yZSB1bnBhY2tpbmciLCAwLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYiLCAiL2J1Z18xMTgyNTEtZiIpOwotCQkvLyBidWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKLQkJLy8gYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCi0JCS8vIGJ1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCi0JCS8vIGJ1Z18xMTgyNTEtZi9XZWJDb250ZW50L3Rlc3QxLmpzcAotCQkvLyBidWdfMTE4MjUxLWYvLmNsYXNzcGF0aAotCQkvLyBidWdfMTE4MjUxLWYvLnByb2plY3QKLQkJU3RyaW5nIHVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiI7Ci0JCUlUYWdsaWJSZWNvcmQgdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROdWxsKCJ1bmV4cGVjdGVkIHJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgdW5wYWNraW5nIGJ1dCBiZWZvcmUgY29weWluZyIsIDMsIHJlY29yZHMubGVuZ3RoKTsKLQotCQkvKgotCQkgKiBpbmNyZWFzZSBieSA8Yj5vbmU8L2I+IGZvciB0aGUgVVJMIHRvIHRoZSBUTEQgaW4gdGhlIGphciAob25lCi0JCSAqIGltcGxpY2l0IGZvciB0aGUgVExEIGluIHRoZSBqYXIgYXMgYSByZXNvdXJjZSBhbmQgYW5vdGhlciBpbXBsaWNpdAotCQkgKiBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSBzYW1lIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgb24gdGhlCi0JCSAqIGNsYXNzcGF0aCkKLQkJICovCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIiwgIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCi0JCXRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCQlhc3NlcnRUcnVlKCJyZWNvcmQgZm91bmQgd2FzIHdyb25nIHR5cGUiLCB0YWdsaWJSZWNvcmQgaW5zdGFuY2VvZiBJVVJMUmVjb3JkKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGhhcyBubyBiYXNlIGxvY2F0aW9uIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIHNob3J0IG5hbWUiLCAic2FtcGxlIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFNob3J0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIFVSSSIsIHVybCwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldERlc2NyaXB0b3IoKS5nZXRVUkkoKSk7Ci0JCVVSTCByZWNvcmRVUkwgPSAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0VVJMKCk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBoYXMgbm8gVVJMIiwgcmVjb3JkVVJMKTsKLQkJYXNzZXJ0VHJ1ZSgicmVjb3JkIGhhcyB3cm9uZyBVUkwiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSA+IDQpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIHByb3RvY29sIiwgImphcjoiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIiwgIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciEvZm9sZGVyL3NhbXBsZV9mb3JfMTE4MjUxLnRsZCIsIHJlY29yZFVSTC50b1N0cmluZygpLnN1YnN0cmluZyhyZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSAtIDgxKSk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF2YWlsYWJsZUFmdGVyQ29weWluZ0pBUkludG9Qcm9qZWN0MigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJidWdfMTE4MjUxLWciLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBiZWZvcmUgdW5wYWNraW5nIiwgMCwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1nIiwgIi9idWdfMTE4MjUxLWciKTsKLQkJLy8gYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvd2ViLnhtbAotCQkvLyBidWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCi0JCS8vIGJ1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgotCQkvLyBidWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvdGVzdDEuanNwCi0JCS8vIGJ1Z18xMTgyNTEtZy8uY2xhc3NwYXRoCi0JCS8vIGJ1Z18xMTgyNTEtZy8ucHJvamVjdAotCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIjsKLQkJSVRhZ2xpYlJlY29yZCB0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROdWxsKCJ1bmV4cGVjdGVkIHJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIHVucGFja2luZyBidXQgYmVmb3JlIGNvcHlpbmciLCAzLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJLyoKLQkJICogaW5jcmVhc2UgYnkgPGI+b25lPC9iPiBmb3IgdGhlIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgKG9uZQotCQkgKiBpbXBsaWNpdCBmb3IgdGhlIFRMRCBpbiB0aGUgamFyIGFzIGEgcmVzb3VyY2UgYW5kIGFub3RoZXIgaW1wbGljaXQKLQkJICogb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgc2FtZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIG9uIHRoZQotCQkgKiBjbGFzc3BhdGgpCi0JCSAqLwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIik7Ci0KLQkJdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCQlhc3NlcnRUcnVlKCJyZWNvcmQgZm91bmQgd2FzIHdyb25nIHR5cGUiLCB0YWdsaWJSZWNvcmQgaW5zdGFuY2VvZiBJVVJMUmVjb3JkKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIGhhcyBubyBiYXNlIGxvY2F0aW9uIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIHNob3J0IG5hbWUiLCAic2FtcGxlIiwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFNob3J0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIFVSSSIsIHVybCwgKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldERlc2NyaXB0b3IoKS5nZXRVUkkoKSk7Ci0JCVVSTCByZWNvcmRVUkwgPSAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0VVJMKCk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBoYXMgbm8gVVJMIiwgcmVjb3JkVVJMKTsKLQkJYXNzZXJ0VHJ1ZSgicmVjb3JkIGhhcyB3cm9uZyBVUkwiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSA+IDQpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIHByb3RvY29sIiwgImphcjoiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIiwgIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIhL2ZvbGRlci9zYW1wbGVfZm9yXzExODI1MS50bGQiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcocmVjb3JkVVJMLnRvU3RyaW5nKCkubGVuZ3RoKCkgLSA4MikpOwotCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvd2ViLnhtbCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VXRpbGl0eVByb2plY3RTdXBwb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIENyZWF0ZSBwcm9qZWN0IDEKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJ0ZXN0LWphciIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphciIsICIvdGVzdC1qYXIiKTsKLQotCQkvLyBDcmVhdGUgcHJvamVjdCAyCi0JCUlQcm9qZWN0IHByb2plY3QyID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoInRlc3Qtd2FyIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdDIuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhciIsICIvdGVzdC13YXIiKTsKLQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QyLmdldEZpbGUobmV3IFBhdGgoInNyYy9tYWluL3dlYmFwcC90ZXN0LmpzcCIpKTsKLQkJYXNzZXJ0VHJ1ZSgibWlzc2luZyB0ZXN0IEpTUCBmaWxlISIsIHRlc3RGaWxlLmlzQWNjZXNzaWJsZSgpKTsKLQotCQlJRE9NTW9kZWwganNwTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJanNwTW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZCh0ZXN0RmlsZSk7Ci0JCQlOb2RlTGlzdCB0ZXN0cyA9IGpzcE1vZGVsLmdldERvY3VtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRlc3Q6dGVzdCIpOwotCQkJYXNzZXJ0VHJ1ZSgidGVzdDp0ZXN0IGVsZW1lbnQgbm90IGZvdW5kIiwgdGVzdHMuZ2V0TGVuZ3RoKCkgPiAwKTsKLQkJCUNNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShqc3BNb2RlbCkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oKChFbGVtZW50KSB0ZXN0cy5pdGVtKDApKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJObyBlbGVtZW50IGRlY2xhcmF0aW9uIHdhcyBmb3VuZCBmb3IgdGVzdDp0ZXN0IGF0IHJ1bnRpbWUiLCBlbGVtZW50RGVjbCk7Ci0JCQlhc3NlcnRUcnVlKCJlbGVtZW50IGRlY2xhcmF0aW9uIHdhcyBub3QgdGhlIGV4cGVjdGVkIGtpbmQiLCBlbGVtZW50RGVjbCBpbnN0YW5jZW9mIENNTm9kZVdyYXBwZXIpOwotCQkJQ01Ob2RlIG9yaWdpbk5vZGUgPSAoKENNTm9kZVdyYXBwZXIpIGVsZW1lbnREZWNsKS5nZXRPcmlnaW5Ob2RlKCk7Ci0JCQlhc3NlcnRUcnVlKCJlbGVtZW50IGRlY2xhcmF0aW9uIHdhcyBub3QgZnJvbSBhIHRhZyBsaWJyYXJ5Iiwgb3JpZ2luTm9kZSBpbnN0YW5jZW9mIFRMREVsZW1lbnREZWNsYXJhdGlvbik7Ci0JCQlhc3NlcnRFcXVhbHMoImVsZW1lbnQgZGVjbGFyYXRpb24gd2FzIG5vdCBmcm9tIGV4cGVjdGVkIHRhZyBsaWJyYXJ5IiwgImh0dHA6Ly9mb28uY29tL3Rlc3R0YWdzIiwgKChUTEREb2N1bWVudCkgKChUTERFbGVtZW50RGVjbGFyYXRpb24pIG9yaWdpbk5vZGUpLmdldE93bmVyRG9jdW1lbnQoKSkuZ2V0VXJpKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGpzcE1vZGVsICE9IG51bGwpIHsKLQkJCQlqc3BNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RXZWJYTUxUYWdsaWJNYXBwaW5nc1RvSkFScygpIHRocm93cyBFeGNlcHRpb24gewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJidWdfMTQ4NzE3Iik7Ci0JCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCQlwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoImJ1Z18xNDg3MTciLCBudWxsLCBudWxsKTsKLQkJCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xNDg3MTciLCAiL2J1Z18xNDg3MTciKTsKLQkJfQotCi0JCUlGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIi9XZWJDb250ZW50L1dFQi1JTkYvbGliL2ludGVybmFsLmphciIpOwotCQlhc3NlcnRUcnVlKGZpbGUuZXhpc3RzKCkpOwotCi0JCVN0cmluZyB1cmkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2V4dGVybmFsLXVyaSI7Ci0JCUlUYWdsaWJSZWNvcmQgdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xNDg3MTcvV2ViQ29udGVudC8iLCB1cmksIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIG5vdCBmb3VuZCBmb3IgIiArIHVyaSwgdGFnbGliUmVjb3JkKTsKLQkJYXNzZXJ0RXF1YWxzKElUYWdsaWJSZWNvcmQuSkFSLCB0YWdsaWJSZWNvcmQuZ2V0UmVjb3JkVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKHVyaSwgKChJSmFyUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldERlc2NyaXB0b3IoKS5nZXRVUkkoKSk7Ci0KLQkJSVRhZ2xpYlJlY29yZCB0YWdsaWJSZWNvcmQyID0gbnVsbDsKLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzE0ODcxNy9XZWJDb250ZW50LyIpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgdHlwZSA9IHJlY29yZHNbaV0uZ2V0UmVjb3JkVHlwZSgpOwotCQkJc3dpdGNoICh0eXBlKSB7Ci0JCQkJY2FzZSBJVGFnbGliUmVjb3JkLkpBUiA6IHsKLQkJCQkJdGFnbGliUmVjb3JkMiA9IHJlY29yZHNbaV07Ci0JCQkJfQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJyZWNvcmQgbm90IHJldHVybmVkIGZvciAiICsgdXJpLCB0YWdsaWJSZWNvcmQyKTsKLQkJYXNzZXJ0RXF1YWxzKElUYWdsaWJSZWNvcmQuSkFSLCB0YWdsaWJSZWNvcmQyLmdldFJlY29yZFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscyh1cmksICgoSUphclJlY29yZCkgdGFnbGliUmVjb3JkMikuZ2V0RGVzY3JpcHRvcigpLmdldFVSSSgpKTsKLQl9Ci0KLQkvKioKLQkgKiB0ZXN0IGNhY2hpbmcgZnJvbSBzZXNzaW9uLXRvLXNlc3Npb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVjb3JkQ2FjaGVDb3VudEJldHdlZW5TZXNzaW9ucygpIHRocm93cyBFeGNlcHRpb24gewotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJ0ZXN0Y2FjaGUxIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvdGVzdGNhY2hlMSIsICIvdGVzdGNhY2hlMSIpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvdGVzdGNhY2hlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIik7Ci0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoIiwgNSwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCVRhZ2xpYkluZGV4LnNodXRkb3duKCk7Ci0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMyID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RjYWNoZTEvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKDFzdCByZXN0YXJ0KSIsIHJlY29yZHMubGVuZ3RoLCByZWNvcmRzMi5sZW5ndGgpOwotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0JCXJlY29yZHMyID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RjYWNoZTEvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKDJuZCByZXN0YXJ0KSIsIHJlY29yZHMubGVuZ3RoLCByZWNvcmRzMi5sZW5ndGgpOwotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0JCXJlY29yZHMyID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RjYWNoZTEvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKDNyZCByZXN0YXJ0KSIsIHJlY29yZHMubGVuZ3RoLCByZWNvcmRzMi5sZW5ndGgpOwotCX0KLQotCS8qKgotCSAqIHRlc3QgY2FjaGluZyBmcm9tIHNlc3Npb24tdG8tc2Vzc2lvbiB3aXRoIGFuIGFkZGl0aW9uIGluIG9uZSBzZXNzaW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENhY2hpbmdXaXRoQWRkaW5nTGlicmFyeSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJ0ZXN0Y2FjaGUyIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvdGVzdGNhY2hlMiIsICIvdGVzdGNhY2hlMiIpOwotCi0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RjYWNoZTIvV2ViQ29udGVudCIpKTsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzMiA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoICgxc3QgcmVzdGFydCkiLCByZWNvcmRzLmxlbmd0aCwgcmVjb3JkczIubGVuZ3RoKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC5qYXIiLCAiL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCQlyZWNvcmRzMiA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoICgxc3QgcmVzdGFydCwgYWRkZWQgamFyIGZpbGUpIiwgcmVjb3Jkcy5sZW5ndGggKyAxLCByZWNvcmRzMi5sZW5ndGgpOwotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCi0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQkJcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGNhY2hlMi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCAoMm5kIHJlc3RhcnQpIiwgcmVjb3Jkcy5sZW5ndGggKyAxLCByZWNvcmRzMi5sZW5ndGgpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuYWRkTGlicmFyeUVudHJ5KHByb2plY3QsICJXZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIik7Ci0JCVRhZ2xpYkluZGV4LnNodXRkb3duKCk7Ci0KLQkJVGFnbGliSW5kZXguc3RhcnR1cCgpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCAoM25kIHJlc3RhcnQpIiwgcmVjb3Jkcy5sZW5ndGggKyAxLCByZWNvcmRzMi5sZW5ndGgpOwotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCi0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQkJcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGNhY2hlMi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCBjaGFuZ2VkIHZhbHVlICg0dGggcmVzdGFydCwgYWRkIGphciB0byBidWlsZCBwYXRoKSIsIHJlY29yZHMubGVuZ3RoICsgMiwgcmVjb3JkczIubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXZhaWxhYmxlRnJvbUV4cG9ydGVkT25CdWlsZHBhdGhGcm9tQW5vdGhlclByb2plY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQotCQkvLyBDcmVhdGUgcHJvamVjdCAxCi0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgidGVzdGF2YWlsYWJsZTEiLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMSIsICIvdGVzdGF2YWlsYWJsZTEiKTsKLQotCQkvLyBDcmVhdGUgcHJvamVjdCAyCi0JCUlQcm9qZWN0IHByb2plY3QyID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoInRlc3RhdmFpbGFibGUyIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdDIuaXNBY2Nlc3NpYmxlKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyIiwgIi90ZXN0YXZhaWxhYmxlMiIpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCi0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQotCQkvLyBtYWtlIHN1cmUgcHJvamVjdCAxIHNlZXMgbm8gdGFnbGlicwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoIklUYWdsaWJSZWNvcmRzIHdlcmUgZm91bmQiLCAwLCByZWNvcmRzLmxlbmd0aCk7Ci0JCS8vIG1ha2Ugc3VyZSBwcm9qZWN0IDIgc2VlcyB0d28gdGFnbGlicwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudCIpKTsKLQkJaWYgKHJlY29yZHMyLmxlbmd0aCAhPSAyKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZHMyLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3lzdGVtLmVyci5wcmludGxuKHJlY29yZHMyW2ldKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCIsIDIsIHJlY29yZHMyLmxlbmd0aCk7Ci0KLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQkJVGFnbGliSW5kZXguc3RhcnR1cCgpOwotCi0KLQkJcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggYWZ0ZXIgcmVzdGFydCIsIDIsIHJlY29yZHMyLmxlbmd0aCk7Ci0KLQkJSUphdmFQcm9qZWN0IGNyZWF0ZWQgPSBKYXZhQ29yZS5jcmVhdGUocHJvamVjdDIpOwotCQlhc3NlcnRUcnVlKCIvYXZhaWxhYmxldGVzdDIgbm90IGEgSmF2YSBwcm9qZWN0IiwgY3JlYXRlZC5leGlzdHMoKSk7Ci0KLQkJLy8gZXhwb3J0IHRoZSBqYXIgZnJvbSBwcm9qZWN0IDIKLQkJSUNsYXNzcGF0aEVudHJ5W10gZW50cmllcyA9IGNyZWF0ZWQuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQ2xhc3NwYXRoRW50cnkgZW50cnkgPSBlbnRyaWVzW2ldOwotCQkJaWYgKGVudHJ5LmdldFBhdGgoKS5lcXVhbHMobmV3IFBhdGgoIi90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIikpKSB7Ci0JCQkJZm91bmQgPSB0cnVlOwotCQkJCWFzc2VydEZhbHNlKCJ3YXMgZXhwb3J0ZWQiLCBlbnRyeS5pc0V4cG9ydGVkKCkpOwotCQkJCSgoQ2xhc3NwYXRoRW50cnkpIGVudHJ5KS5pc0V4cG9ydGVkID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciB3YXMgbm90IGZvdW5kIGluIGJ1aWxkIHBhdGgiLCBmb3VuZCk7Ci0JCUlDbGFzc3BhdGhFbnRyeVtdIGVudHJpZXMyID0gbmV3IElDbGFzc3BhdGhFbnRyeVtlbnRyaWVzLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkoZW50cmllcywgMSwgZW50cmllczIsIDAsIGVudHJpZXMubGVuZ3RoIC0gMSk7Ci0JCWVudHJpZXMyW2VudHJpZXMubGVuZ3RoIC0gMV0gPSBlbnRyaWVzWzBdOwotCQljcmVhdGVkLnNldFJhd0NsYXNzcGF0aChlbnRyaWVzMiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJZW50cmllcyA9IGNyZWF0ZWQuZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCWZvdW5kID0gZmFsc2U7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykgewotCQkJSUNsYXNzcGF0aEVudHJ5IGVudHJ5ID0gZW50cmllc1tpXTsKLQkJCWlmIChlbnRyeS5nZXRQYXRoKCkuZXF1YWxzKG5ldyBQYXRoKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpKSkgewotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQlhc3NlcnRUcnVlKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciB3YXMgbm90IGV4cG9ydGVkIiwgKChDbGFzc3BhdGhFbnRyeSkgZW50cnkpLmlzRXhwb3J0ZWQpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoIi90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIHdhcyBub3QgZm91bmQgKGFuZCBleHBvcnRlZCkgaW4gYnVpbGQgcGF0aCIsIGZvdW5kKTsKLQotCQkvLyBwcm9qZWN0IDIgc2hvdWxkIHN0aWxsIGhhdmUganVzdCB0d28gdGFnbGlicwotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoIChhZnRlciBleHBvcnRpbmcgamFyKSIsIDIsIHJlY29yZHMubGVuZ3RoKTsKLQotCQkvLyBub3cgb25lIHRhZ2xpYiBzaG91bGQgYmUgdmlzaWJsZSBmcm9tIHByb2plY3QgMQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoIChhZnRlciBleHBvcnRpbmcgamFyKSwgY2xhc3NwYXRoIHByb3ZpZGVyIHByb2JsZW0/IiwgMSwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCVRhZ2xpYkluZGV4LnNodXRkb3duKCk7Ci0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQotCQkvLyBwcm9qZWN0IDIgc2hvdWxkIHN0aWxsIGhhdmUganVzdCB0d28gdGFnbGlicwotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoIChhZnRlciBleHBvcnRpbmcgamFyIGFuZCByZXN0YXJ0aW5nKSIsIDIsIHJlY29yZHMubGVuZ3RoKTsKLQotCQkvLyBhbmQgb25lIHRhZ2xpYiBzaG91bGQgc3RpbGwgYmUgdmlzaWJsZSBmcm9tIHByb2plY3QgMQotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoIChhZnRlciBleHBvcnRpbmcgamFyIGFuZCByZXN0YXJ0aW5nKSIsIDEsIHJlY29yZHMubGVuZ3RoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlQWxsUHJvamVjdHMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3QgPSBwcm9qZWN0c1tpXTsKLQkJCWRlbGV0ZVByb2plY3QocHJvamVjdCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJdCdzIG5vdCBlYXN5IHRvIGRlbGV0ZSBwcm9qZWN0cy4gSWYgYW55IG9mIGl0J3MgZmlsZXMgYXJlIG9wZW4gYnkgYW5vdGhlciB0aHJlYWQsIAotCSAqIHRoZSBvcGVyYXRpb24gd2lsbCBmYWlsLiBTbywgdGhpcyBtZXRob2Qgd2lsbCBtYWtlIHNldmVyYWwgYXR0ZW1wdHMgYmVmb3JlIGdpdmluZyB1cC4gCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRlbGV0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJaW50IG5UcnlzID0gMDsKLQkJd2hpbGUgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpICYmIG5UcnlzIDwgTUFYX1JFVFJZUykgewotCQkJdHJ5IHsKLQkJCQluVHJ5cysrOwotCQkJCXByb2plY3QuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJfQotCQkJY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCQlpZiAoREVCVUcpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSBwcm9qZWN0IG9uIGF0dGVtcHQgbnVtYmVyOiAiKyBuVHJ5cyk7Ci0JCQkJCUlTdGF0dXMgZVN0YXR1cyA9IGUuZ2V0U3RhdHVzKCk7Ci0JCQkJCS8vIHNob3VsZCBhbHdheXMgYmUgTXVsdGlTdGF0dXMsIGJ1dCB3ZSdsbCBjaGVjawotCQkJCQlpZiAoZVN0YXR1cyBpbnN0YW5jZW9mIE11bHRpU3RhdHVzKSB7Ci0JCQkJCQlNdWx0aVN0YXR1cyBtU3RhdHVzID0gKE11bHRpU3RhdHVzKSBlU3RhdHVzOwotCQkJCQkJSVN0YXR1c1tdIGlTdGF0dXMgPSBtU3RhdHVzLmdldENoaWxkcmVuKCk7Ci0JCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGlTdGF0dXMubGVuZ3RoOyBqKyspIHsKLQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXR1czogIiArIGogKyAiICIgKyBpU3RhdHVzW2pdKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdHVzOiAiICsgZVN0YXR1cyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBJZiB3ZSBjb3VsZCBub3QgZGVsZXRlIHRoZSBmaXJzdCB0aW1lLCB3YWl0IGEgYml0IGFuZAotCQkJCSAqIHJlLXRyeS4gSWYgd2UgY291bGQgbm90IGRlbGV0ZSwgaXQgaXMgbGlrZWx5IGJlY2F1c2UKLQkJCQkgKiBhbm90aGVyIHRocmVhZCBoYXMgYSBmaWxlIG9wZW4sIG9yIHNpbWlsYXIgKHN1Y2ggYXMgdGhlCi0JCQkJICogdmFsaWRhdGlvbiB0aHJlYWQpLgotCQkJCSAqLwotCQkJCVRocmVhZC5zbGVlcChQQVVTRV9USU1FKTsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKHByb2plY3QgIT0gbnVsbCAmJiBwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQlmYWlsKCJFcnJvciBpbiB0ZXN0IGluZnJhc3RydWN0dXJlLiBDb3VsZCBub3QgZGVsZXRlIHByb2plY3QgIiArIHByb2plY3QgKyAiIGFmdGVyICIgKyBNQVhfUkVUUllTICsgImF0dGVtcHRzLiIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTRhNmZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RyYW5zbGF0aW9uL0pTUEphdmFUcmFuc2xhdG9yQ29yZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLklQcm9ibGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5KU1BDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25FeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkpTUENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnRhZ2xpYi5DdXN0b21UYWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnRhZ2xpYi5UYWdsaWJIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQSmF2YVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5KU1BWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguQnVuZGxlUmVzb3VyY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uLlJlcG9ydGVyRm9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbi5WYWxpZGF0aW9uQ29udGV4dEZvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uRnJhbWV3b3JrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvblN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuVmFsaWRhdG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEpTUEphdmFUcmFuc2xhdG9yQ29yZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBjcmVhdGlvbkxvY2sgPSBuZXcgYnl0ZVswXTsKLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0KCkgewotCX0KLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0XzEwNzMzOCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiYnVnXzEwNzMzOCI7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOwotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJXZWJDb250ZW50L3Rlc3QxMDczMzguanNwIik7Ci0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQlJRE9NTW9kZWwganNwTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbDsKLQotCQlTdHJpbmcganNwU291cmNlID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgibGluZSBkZWxpbWl0ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gV2luZG93cyBbQ1JMRl0iLCBqc3BTb3VyY2UuaW5kZXhPZigiXHJcbiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoImxpbmUgZGVsaW1pdGVycyBoYXZlIGJlZW4gY29udmVydGVkIHRvIE1hYyBbQ1JdIiwganNwU291cmNlLmluZGV4T2YoIlxyIikgPCAwKTsKLQotCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0KLQkJSURPTURvY3VtZW50IHhtbERvYyA9IGpzcE1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSB4bWxEb2MuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkvLyBTeXN0ZW0uZXJyLnByaW50KHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkpOwotCi0JCWFzc2VydFRydWUoIm5ldy1saW5lIGJlZ2lubmluZyBzY3JpcHRsZXQgbWlzc2luZyBmcm9tIHRyYW5zbGF0aW9uIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJpbnQgaSA9IDA7IikgPj0gMCk7Ci0KLQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMganNwIHRyYW5zbGF0aW9uIHdoZW4ganNwIGlzIHdpdGhpbiBodG1sIGNvbW1lbnRzLiBTZWUKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Mzc3Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0XzEyNjM3NygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiYnVnXzEyNjM3NyI7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOwotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJXZWJDb250ZW50L3Rlc3QxMjYzNzdfbm9lcnJvci5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZShmaWxlLmV4aXN0cygpKTsKLQkJCQkKLQkJSlNQVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BKYXZhVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJaGVscGVyLnNldFVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9PU1N0cmluZygpKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgiZm91bmQganNwIGphdmEgZXJyb3Igd2l0aGluIGh0bWwgY29tbWVudHMgd2hlbiB0aGVyZSBhcmUgbm9uZSIsIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKLQkJCi0JCWZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIldlYkNvbnRlbnQvdGVzdDEyNjM3N19lcnJvci5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZShmaWxlLmV4aXN0cygpKTsKLQkJaGVscGVyLnNldFVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9PU1N0cmluZygpKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCQkKLQkJaW50IGVycm9ycyA9IHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpOwotCQlhc3NlcnRUcnVlKCJmb3VuZCAiK2Vycm9ycysiIGpzcCBqYXZhIGVycm9ycyB3aXRoaW4gaHRtbCBjb21tZW50cyB3aGVuIHRoZXJlIHNob3VsZCBiZSAzIiwgKGVycm9ycyA9PSAzKSk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE1hbmdsaW5nKCkgewotCS8vIGFzc2VydEVxdWFscygic2ltcGxlX3RhZyIsIEpTUDJTZXJ2bGV0TmFtZVV0aWwubWFuZ2xlKCJzaW1wbGUudGFnIikpOwotCS8vIGFzc2VydEVxdWFscygic2ltcGxlX2pzcGYiLCBKU1AyU2VydmxldE5hbWVVdGlsLm1hbmdsZSgic2ltcGxlLmpzcGYiKSk7Ci0JLy8gYXNzZXJ0RXF1YWxzKCJzaW1fMDA1Zl8wMDVmcGxlX3RhZ3giLAotCS8vIEpTUDJTZXJ2bGV0TmFtZVV0aWwubWFuZ2xlKCJzaW1fX3BsZS50YWd4IikpOwotCS8vIGFzc2VydEVxdWFscyhuZXcgUGF0aCgiUHJvamVjdC5mb2xkZXIuc2ltcGxlX3RhZyIpLAotCS8vIEpTUDJTZXJ2bGV0TmFtZVV0aWwubWFuZ2xlKG5ldyBQYXRoKCIvUHJvamVjdC9mb2xkZXIvc2ltcGxlLnRhZyIpKSk7Ci0JLy8gYXNzZXJ0RXF1YWxzKG5ldyBQYXRoKCJQcm9qZWN0LmZvbGRfMDA1ZmVyLnNpbXBsZV9qc3B4IiksCi0JLy8gSlNQMlNlcnZsZXROYW1lVXRpbC5tYW5nbGUobmV3IFBhdGgoIi9Qcm9qZWN0L2ZvbGRfZXIvc2ltcGxlLmpzcHgiKSkpOwotCS8vIH0KLQkvLwotCS8vIHB1YmxpYyB2b2lkIHRlc3RVbm1hbmdsaW5nKCkgewotCS8vIGFzc2VydEVxdWFscygic2ltcGxlLnRhZyIsIEpTUDJTZXJ2bGV0TmFtZVV0aWwudW5tYW5nbGUoInNpbXBsZV90YWciKSk7Ci0JLy8gYXNzZXJ0RXF1YWxzKCJzaW1wbGUuanNwZiIsCi0JLy8gSlNQMlNlcnZsZXROYW1lVXRpbC51bm1hbmdsZSgic2ltcGxlX2pzcGYiKSk7Ci0JLy8gYXNzZXJ0RXF1YWxzKCJzaW1fX3BsZS50YWd4IiwKLQkvLyBKU1AyU2VydmxldE5hbWVVdGlsLnVubWFuZ2xlKCJzaW1fMDA1Zl8wMDVmcGxlX3RhZ3giKSk7Ci0JLy8gYXNzZXJ0RXF1YWxzKG5ldyBQYXRoKCIvUHJvamVjdC9mb2xkZXIvc2ltcGxlLnRhZyIpLAotCS8vIEpTUDJTZXJ2bGV0TmFtZVV0aWwudW5tYW5nbGUobmV3IFBhdGgoIlByb2plY3QuZm9sZGVyLnNpbXBsZV90YWciKSkpOwotCS8vIGFzc2VydEVxdWFscyhuZXcgUGF0aCgiL1Byb2plY3QvZm9sZF9lci9zaW1wbGUuanNweCIpLAotCS8vIEpTUDJTZXJ2bGV0TmFtZVV0aWwudW5tYW5nbGUobmV3Ci0JLy8gUGF0aCgiUHJvamVjdC5mb2xkXzAwNWZlci5zaW1wbGVfanNweCIpKSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3RfMTc0MDQyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gZG9WYWxpZGF0ZVNlZ21lbnRzID0gSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRCb29sZWFuKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTKTsKLQkJU3RyaW5nIHRlc3ROYW1lID0gImJ1Z18xNzQwNDIiOwotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgdHJ1ZSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHRlc3ROYW1lLCAiLyIgKyB0ZXN0TmFtZSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL3N0cnV0cy5qYXIiLCAiLyIgKyB0ZXN0TmFtZSArICIvc3RydXRzLmphciIpOwotCQl3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKHByb2plY3QpOwotCQlKU1BDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTLCBkb1ZhbGlkYXRlU2VnbWVudHMpOwotCQlJRmlsZSBtYWluID0gcHJvamVjdC5nZXRGaWxlKCJtYWluLmpzcCIpOwotCQlJTWFya2VyW10gbWFya2VycyA9IG1haW4uZmluZE1hcmtlcnMoSU1hcmtlci5QUk9CTEVNLCB0cnVlLCBJUmVzb3VyY2UuREVQVEhfWkVSTyk7Ci0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHsKLQkJCXMuYXBwZW5kKCJcbnByb2JsZW0gbWFya2VyIG9uIGxpbmUgIiArIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTElORV9OVU1CRVIpICsgIjogXCIiICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5NRVNTQUdFKSArICJcIiAiKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoInByb2JsZW0gbWFya2VycyBmb3VuZCwgIiArIHMudG9TdHJpbmcoKSwgMCwgbWFya2Vycy5sZW5ndGgpOwotCX0KLQotCXByaXZhdGUgdm9pZCB3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCByb290ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJSm9iLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlKb2IuZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9NQU5VQUxfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJSm9iLmdldEpvYk1hbmFnZXIoKS5qb2luKFZhbGlkYXRvck1hbmFnZXIuVkFMSURBVE9SX0pPQl9GQU1JTFksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJSm9iLmdldEpvYk1hbmFnZXIoKS5qb2luKFJlc291cmNlc1BsdWdpbi5GQU1JTFlfQVVUT19CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlUaHJlYWQuc2xlZXAoMjAwKTsKLQkJCUpvYi5nZXRKb2JNYW5hZ2VyKCkuYmVnaW5SdWxlKHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJLy8gd29rZW4gdXAgZnJvbSBzbGVlcD8KLS8vCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0vLwkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaCAoT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24gZSkgewotCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCQllLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKHJvb3QgIT0gbnVsbCkgewotCQkJCUpvYi5nZXRKb2JNYW5hZ2VyKCkuZW5kUnVsZShyb290KTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgd2FpdEZvckJ1aWxkQW5kVmFsaWRhdGlvbihJUHJvamVjdCBwcm9qZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXByb2plY3QuYnVpbGQoSW5jcmVtZW50YWxQcm9qZWN0QnVpbGRlci5DTEVBTl9CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXdhaXRGb3JCdWlsZEFuZFZhbGlkYXRpb24oKTsKLQkJcHJvamVjdC5idWlsZChJbmNyZW1lbnRhbFByb2plY3RCdWlsZGVyLkZVTExfQlVJTEQsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF8xNzg0NDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYm9vbGVhbiBkb1ZhbGlkYXRlU2VnbWVudHMgPSBKU1BDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldEJvb2xlYW4oSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMpOwotCQlTdHJpbmcgdGVzdE5hbWUgPSAiYnVnXzE3ODQ0MyI7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QodGVzdE5hbWUsIFBsYXRmb3JtLmdldFN0YXRlTG9jYXRpb24oSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSkuYXBwZW5kKHRlc3ROYW1lKSwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCS8qCi0JCSAqIFNob3VsZCBiZSBzZXQgdG8gZmFsc2UuIEEgcmVmZXJlbmNlZCBjbGFzcyBpbiBhbiBpbmNsdWRlZCBzZWdtZW50Ci0JCSAqIGRvZXMgbm90IGV4aXN0LgotCQkgKi8KLQkJSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmFsc2UpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9zdHJ1dHMuamFyIiwgIi8iICsgdGVzdE5hbWUgKyAiL3N0cnV0cy5qYXIiKTsKLQotCQl3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKHByb2plY3QpOwotCi0JCUpTUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIGRvVmFsaWRhdGVTZWdtZW50cyk7Ci0JCUlGaWxlIG1haW4gPSBwcm9qZWN0LmdldEZpbGUoIm1haW4uanNwIik7Ci0JCUlNYXJrZXJbXSBtYXJrZXJzID0gbWFpbi5maW5kTWFya2VycyhJTWFya2VyLlBST0JMRU0sIHRydWUsIElSZXNvdXJjZS5ERVBUSF9aRVJPKTsKLQotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlzLmFwcGVuZCgiXG5wcm9ibGVtIG9uIGxpbmUgIiArIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTElORV9OVU1CRVIpICsgIjogIiArIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSkpOwotCQl9Ci0JCWFzc2VydEVxdWFscygicHJvYmxlbSBtYXJrZXJzIGZvdW5kIiArIHMudG9TdHJpbmcoKSwgMCwgbWFya2Vycy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfMTA5NzIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gZG9WYWxpZGF0ZVNlZ21lbnRzID0gSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRCb29sZWFuKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTKTsKLQkJU3RyaW5nIHRlc3ROYW1lID0gImJ1Z18xMDk3MjEiOwotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBQbGF0Zm9ybS5nZXRTdGF0ZUxvY2F0aW9uKEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkpLmFwcGVuZCh0ZXN0TmFtZSksIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkvKgotCQkgKiBTaG91bGQgYmUgc2V0IHRvIGZhbHNlLiBBIHJlZmVyZW5jZWQgY2xhc3MgaW4gYW4gaW5jbHVkZWQgc2VnbWVudAotCQkgKiBkb2VzIG5vdCBleGlzdC4KLQkJICovCi0JCUpTUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIGZhbHNlKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgdGVzdE5hbWUsICIvIiArIHRlc3ROYW1lKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvc3RydXRzLmphciIsICIvIiArIHRlc3ROYW1lICsgIi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3N0cnV0cy5qYXIiKTsKLQotCQl3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKHByb2plY3QpOwotCi0JCUpTUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIGRvVmFsaWRhdGVTZWdtZW50cyk7Ci0JCUlGaWxlIG1haW4gPSBwcm9qZWN0LmdldEZpbGUoIldlYkNvbnRlbnQvbWFpbi5qc3AiKTsKLQkJVmFsaWRhdGlvblJlc3VsdCByZXN1bHQgPSBuZXcgSlNQSmF2YVZhbGlkYXRvcigpLnZhbGlkYXRlKG1haW4sIElSZXNvdXJjZURlbHRhLkFEREVELCBuZXcgVmFsaWRhdGlvblN0YXRlKCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlMaXN0IG1lc3NhZ2VzID0gcmVzdWx0LmdldFJlcG9ydGVyKG51bGwpLmdldE1lc3NhZ2VzKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZXMuc2l6ZSgpOyBpKyspIHsKLQkJCXMuYXBwZW5kKCJcbnByb2JsZW0gb24gbGluZSAiICsgKChJTWVzc2FnZSltZXNzYWdlcy5nZXQoaSkpLmdldEF0dHJpYnV0ZShJTWFya2VyLkxJTkVfTlVNQkVSKSArICI6ICIgKyAoKElNZXNzYWdlKW1lc3NhZ2VzLmdldChpKSkuZ2V0VGV4dCgpKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoInByb2JsZW0gbWFya2VycyBmb3VuZCIgKyBzLnRvU3RyaW5nKCksIDAsIG1lc3NhZ2VzLnNpemUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF8xODEwNTdhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gZG9WYWxpZGF0ZVNlZ21lbnRzID0gSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRCb29sZWFuKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTKTsKLQkJU3RyaW5nIHRlc3ROYW1lID0gImJ1Z18xODEwNTciOwotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgaiA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJqIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUoai5leGlzdHMoKSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvaiIsICIvaiIpOwotCQlJUHJvamVjdCBrID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoImsiLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShrLmV4aXN0cygpKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9rIiwgIi9rIik7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBQbGF0Zm9ybS5nZXRTdGF0ZUxvY2F0aW9uKEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkpLmFwcGVuZCh0ZXN0TmFtZSksIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlKU1BDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTLCB0cnVlKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgdGVzdE5hbWUsICIvIiArIHRlc3ROYW1lKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvc3RydXRzLmphciIsICIvIiArIHRlc3ROYW1lICsgIi9zdHJ1dHMuamFyIik7Ci0KLQkJd2FpdEZvckJ1aWxkQW5kVmFsaWRhdGlvbihwcm9qZWN0KTsKLQotCQlKU1BDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTLCBkb1ZhbGlkYXRlU2VnbWVudHMpOwotCQkvKgotCQkgKiBtYWluLmpzcCBjb250YWlucyBudW1lcm91cyByZWZlcmVuY2VzIHRvIHRhZ3MgaW4gc3RydXRzLmphciwgd2hpY2gKLQkJICogaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQgcGF0aAotCQkgKi8KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgibWFpbi5qc3AiKTsKLQkJSU1hcmtlcltdIG1hcmtlcnMgPSBtYWluLmZpbmRNYXJrZXJzKElNYXJrZXIuUFJPQkxFTSwgdHJ1ZSwgSVJlc291cmNlLkRFUFRIX1pFUk8pOwotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlzLmFwcGVuZCgiXG4iICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5MSU5FX05VTUJFUikgKyAiOiIgKyBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLk1FU1NBR0UpKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoInByb2JsZW0gbWFya2VycyBmb3VuZCIgKyBzLnRvU3RyaW5nKCksIDAsIG1hcmtlcnMubGVuZ3RoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdF8yMTk3NjFhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8qKgotCQkgKiBCcm9rZW4gYmVoYXZpb3IgaGFzIGEgSmF2YSBzeW50YXggZXJyb3Igb24gbGluZSAxOSwgd2hpY2ggb25seQotCQkgKiBjb250YWlucyBhbiBpbmNsdWRlIGRpcmVjdGl2ZSB0byBhIGZyYWdtZW50IHRoYXQgZG9lc24ndCBleGlzdC4KLQkJICogCi0JCSAqIEFsbCBzeW50YXggZXJyb3JzIHNob3VsZCBiZSBvbiBsaW5lcyAyNSBvciAyOCBhbmQgYWZ0ZXIgb2Zmc2V0IDM3MwotCQkgKiAoc2luZ2xlIGNoYXJhY3RlciBsaW5lIGRlbGltaXRlciEpLgotCQkgKi8KLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMiOwotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgdGVzdE5hbWUsICIvIiArIHRlc3ROYW1lKTsKLQotCQl3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKHByb2plY3QpOwotCQlWYWxpZGF0aW9uRnJhbWV3b3JrLmdldERlZmF1bHQoKS52YWxpZGF0ZShuZXcgSVByb2plY3RbXXtwcm9qZWN0fSwgdHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL1dlYkNvbnRlbnQvc2FtcGxlLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJzYW1wbGUgdGVzdCBmaWxlIGRvZXMgbm90IGV4aXN0IiwgbWFpbi5pc0FjY2Vzc2libGUoKSk7Ci0JCUlNYXJrZXJbXSBtYXJrZXJzID0gbWFpbi5maW5kTWFya2VycyhJTWFya2VyLlBST0JMRU0sIHRydWUsIElSZXNvdXJjZS5ERVBUSF9aRVJPKTsKLQkJU3RyaW5nQnVmZmVyIG1hcmtlclRleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewotCQkJLy8gbGluZS9zdGFydC1lbmQKLQkJCW1hcmtlclRleHQuYXBwZW5kKCJcbkwiICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5MSU5FX05VTUJFUikgKyAiL28iICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5DSEFSX1NUQVJUKSArICItIiAgKyBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLkNIQVJfRU5EKSArICI6IiArIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSkpOwotCQl9Ci0vLwkJaW50IG51bWJlck9mU3ludGF4RXJyb3JzID0gMDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlPYmplY3QgbWVzc2FnZSA9IG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJNYXJrZXIgbWVzc2FnZSB3YXMgbnVsbCEiLCBtZXNzYWdlKTsKLQkJCWlmIChtZXNzYWdlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgiU3ludGF4IGVycm9yIikpIHsKLS8vCQkJCW51bWJlck9mU3ludGF4RXJyb3JzKys7Ci0JCQkJYXNzZXJ0VHJ1ZSgiU3ludGF4IGVycm9yIHJlcG9ydGVkIGJlZm9yZSBsaW5lIDI1IiArIG1hcmtlclRleHQsICgoSW50ZWdlcikgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5MSU5FX05VTUJFUikpLmludFZhbHVlKCkgPj0gMjUpOwotLy8JCQkJYXNzZXJ0VHJ1ZSgiU3ludGF4IGVycm9yIHJlcG9ydGVkIGJlZm9yZSBvZmZzZXQgMzcxIiArIG1hcmtlclRleHQsICgoSW50ZWdlcikgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5DSEFSX1NUQVJUKSkuaW50VmFsdWUoKSA+PSAzNzApOwotLy8JCQkJYXNzZXJ0VHJ1ZSgiU3ludGF4IGVycm9yIHJlcG9ydGVkIGFmdGVyIDQ1NiIgKyBtYXJrZXJUZXh0LCAoKEludGVnZXIpIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9TVEFSVCkpLmludFZhbHVlKCkgPCA0NTYpOwotCQkJfQotCQl9Ci0vLwkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2Ygc3ludGF4IGVycm9ycyByZXBvcnRlZFxuIiArIG1hcmtlclRleHQsIDMsIG51bWJlck9mU3ludGF4RXJyb3JzKTsKLQotCQkvLyBjbGVhbiB1cCBpZiB3ZSBnb3QgdG8gdGhlIGVuZAotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdF8xNTA3OTQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gImJ1Z18xNTA3OTQiOwotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgdGVzdE5hbWUsICIvIiArIHRlc3ROYW1lKTsKLQkJCi0JCUlGaWxlIG1haW4gPSBwcm9qZWN0LmdldEZpbGUoIi9XZWJDb250ZW50L2VzY2FwZWRRdW90ZXMuanNwIik7Ci0JCWFzc2VydFRydWUoInNhbXBsZSB0ZXN0IGZpbGUgZG9lcyBub3QgZXhpc3QiLCBtYWluLmlzQWNjZXNzaWJsZSgpKTsKLQkJCi0JCUpTUEphdmFWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUEphdmFWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQloZWxwZXIuc2V0VVJJKG1haW4uZ2V0RnVsbFBhdGgoKS50b09TU3RyaW5nKCkpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0KLQkJYXNzZXJ0VHJ1ZSgiVW5leHBlY3RlZCBwcm9ibGVtcyBmb3VuZCIsIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpID09IDApOwotCi0JCS8vIGNsZWFuIHVwIGlmIHdlIGdvdCB0byB0aGUgZW5kCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfcHJlbHVkZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RQcmVsdWRlQW5kQ29kYXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJc3luY2hyb25pemVkIChjcmVhdGlvbkxvY2spIHsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQkJfQotCQl9Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL3dlYiBzdHVmZi9wcmVsdWRlLXVzZXIvdGVzdC5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgic2FtcGxlIHRlc3QgZmlsZSBub3QgYWNjZXNzaWJsZSIsIG1haW4uaXNBY2Nlc3NpYmxlKCkpOwotCi0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KG1haW4pOwotCQkJCi0JCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0JCQkKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gSmF2YSB0cmFuc2xhdGlvbiBmb3VuZCIsIHRyYW5zbGF0aW9uKTsKLQkJCWFzc2VydFRydWUoInByZWx1ZGUwIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IHByZWx1ZGUwIikgPiAwKTsKLQkJCWFzc2VydFRydWUoInByZWx1ZGUxIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IHByZWx1ZGUxIikgPiAwKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiaW1wb3J0IHN0YXRlbWVudCBub3QgZm91bmQiLCB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoImltcG9ydCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZSIpID4gMCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfY29kYXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RQcmVsdWRlQW5kQ29kYXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJc3luY2hyb25pemVkIChjcmVhdGlvbkxvY2spIHsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQkJfQotCQl9Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL3dlYiBzdHVmZi9jb2RhLXVzZXIvdGVzdC5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgic2FtcGxlIHRlc3QgZmlsZSBub3QgYWNjZXNzaWJsZSIsIG1haW4uaXNBY2Nlc3NpYmxlKCkpOwotCi0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KG1haW4pOwotCQkJCi0JCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0JCQkKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gSmF2YSB0cmFuc2xhdGlvbiBmb3VuZCIsIHRyYW5zbGF0aW9uKTsKLQkJCWFzc2VydFRydWUoImNvZGEwIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IGNvZGEwIikgPiAwKTsKLQkJCWFzc2VydFRydWUoImNvZGExIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IGNvZGExIikgPiAwKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiaW1wb3J0IHN0YXRlbWVudCBub3QgZm91bmQiLCB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoImltcG9ydCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZSIpID4gMCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0X3ByZWx1ZGVfYW5kX2NvZGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RQcmVsdWRlQW5kQ29kYXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJc3luY2hyb25pemVkIChjcmVhdGlvbkxvY2spIHsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQkJfQotCQl9Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL3dlYiBzdHVmZi9ib3RoL3Rlc3QuanNwIik7Ci0JCWFzc2VydFRydWUoInNhbXBsZSB0ZXN0IGZpbGUgbm90IGFjY2Vzc2libGUiLCBtYWluLmlzQWNjZXNzaWJsZSgpKTsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChtYWluKTsKLQkJCQotCQkJTW9kZWxIYW5kbGVyRm9ySlNQLmVuc3VyZVRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkobW9kZWwpOwotCQkJCi0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCWFzc2VydE5vdE51bGwoIm5vIEphdmEgdHJhbnNsYXRpb24gZm91bmQiLCB0cmFuc2xhdGlvbik7Ci0JCQlhc3NlcnRUcnVlKCJwcmVsdWRlMCBjb250ZW50cyBub3QgaW5jbHVkZWQiLCB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoImludCBwcmVsdWRlMCIpID4gMCk7Ci0JCQlhc3NlcnRUcnVlKCJwcmVsdWRlMSBjb250ZW50cyBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IHByZWx1ZGUxIikgPCAwKTsKLQkJCWFzc2VydFRydWUoImNvZGEwIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IGNvZGEwIikgPiAwKTsKLQkJCWFzc2VydFRydWUoImNvZGExIGNvbnRlbnRzIGluY2x1ZGVkIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJpbnQgY29kYTEiKSA8IDApOwotCi0JCQlhc3NlcnRUcnVlKCJpbXBvcnQgc3RhdGVtZW50IG5vdCBmb3VuZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW1wb3J0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlIikgPiAwKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgdGVzdE5hbWUgPSAidGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QodGVzdE5hbWUpOwotCQlzeW5jaHJvbml6ZWQgKGNyZWF0aW9uTG9jaykgewotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHRlc3ROYW1lLCAiLyIgKyB0ZXN0TmFtZSk7Ci0JCQl9Ci0JCX0KLQotCQlJRmlsZSBtYWluID0gcHJvamVjdC5nZXRGaWxlKCIvV2ViQ29udGVudC9tYWluLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJzYW1wbGUgdGVzdCBmaWxlIG5vdCBhY2Nlc3NpYmxlIiwgbWFpbi5pc0FjY2Vzc2libGUoKSk7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQobWFpbik7Ci0JCQkKLQkJCU1vZGVsSGFuZGxlckZvckpTUC5lbnN1cmVUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5KG1vZGVsKTsKLQkJCQotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJubyBKYXZhIHRyYW5zbGF0aW9uIGZvdW5kIiwgdHJhbnNsYXRpb24pOwotCQkJYXNzZXJ0VHJ1ZSgiU3RyaW5nIHZhcmlhYmxlRnJvbUhlYWRlcjEgbm90IGZvdW5kIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJTdHJpbmcgdmFyaWFibGVGcm9tSGVhZGVyMSIpID4gMCk7Ci0JCQlhc3NlcnRUcnVlKCJoZWFkZXIxIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiU3RyaW5nIHZhcmlhYmxlRnJvbUhlYWRlcjEgPSBcImluaXRpYWxpemVkIGluIGhlYWRlciAxXCI7IikgPiAwKTsKLQkJCWFzc2VydFRydWUoImhlYWRlcjIgY29udGVudHMgbm90IGluY2x1ZGVkIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJ2YXJpYWJsZUZyb21IZWFkZXIxID0gXCJyZWFzc2lnbmVkIGluIGhlYWRlciAyXCI7IikgPiAwKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEl0ZXJhdGlvblRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RJdGVyYXRpb25UYWdzIjsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCh0ZXN0TmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCQlwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QodGVzdE5hbWUsIG51bGwsIG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHRlc3ROYW1lLCAiLyIgKyB0ZXN0TmFtZSk7Ci0JCX0KLQkJd2FpdEZvckJ1aWxkQW5kVmFsaWRhdGlvbihwcm9qZWN0KTsKLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIi9XZWJDb250ZW50L3Rlc3QuanNwIik7Ci0JCWFzc2VydFRydWUoInRlc3QuanNwIGlzIG5vdCBhY2Nlc3NpYmxlIiwgdGVzdEZpbGUuaXNBY2Nlc3NpYmxlKCkpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdCh0ZXN0RmlsZSk7Ci0KLQkJCU1vZGVsSGFuZGxlckZvckpTUC5lbnN1cmVUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5KG1vZGVsKTsKLQotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb25FeHRlbnNpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCXRyYW5zbGF0aW9uLnNldFByb2JsZW1Db2xsZWN0aW5nQWN0aXZlKHRydWUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gSmF2YSB0cmFuc2xhdGlvbiBmb3VuZCIsIHRyYW5zbGF0aW9uKTsKLQkJCXRyYW5zbGF0aW9uLnJlY29uY2lsZUNvbXBpbGF0aW9uVW5pdCgpOwotCQkJdHJhbnNsYXRpb24uc2V0UHJvYmxlbUNvbGxlY3RpbmdBY3RpdmUoZmFsc2UpOwotCQkJTGlzdCBwcm9ibGVtcyA9IHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJUcmFuc2xhdGlvbiBoYWQgYSBudWxsIHByb2JsZW1zIGxpc3QuIiwgcHJvYmxlbXMpOwotCQkJSXRlcmF0b3IgaXQgPSBwcm9ibGVtcy5pdGVyYXRvcigpOwotCQkJU3RyaW5nIGphdmFUZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCWludCBzdGFydE9mZnNldCA9IGphdmFUZXh0LmluZGV4T2YoIjxwbGFpbjpzaW1wbGU+Iik7Ci0JCQlhc3NlcnRUcnVlKCI8cGxhbjpzaW1wbGU+IHNjb3BlIG5vdCBmb3VuZC4iLCBzdGFydE9mZnNldCA+IDApOwotCQkJaW50IGVuZE9mZnNldCA9IGphdmFUZXh0LmluZGV4T2YoIjwvcGxhaW46c2ltcGxlPiIsIHN0YXJ0T2Zmc2V0KTsKLQkJCWFzc2VydFRydWUoIjwvcGxhbjpzaW1wbGU+IHNjb3BlIG5vdCBmb3VuZC4iLCBlbmRPZmZzZXQgPiAwKTsKLQkJCS8vIEZpbmRzIGFsbCBlcnJvcnMgY2F1c2VkIGJ5ICJjb250aW51ZSBjYW5ub3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcCIgLSBzaG91bGQgb25seSBvY2N1ciBiZXR3ZWVuIDxwbGFpbjpzaW1wbGU+PC9wbGFpbjpzaW1wbGU+Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJSVByb2JsZW0gcHJvYmxlbSA9IChJUHJvYmxlbSkgaXQubmV4dCgpOwotCQkJCWlmIChwcm9ibGVtLmlzRXJyb3IoKSkgewotCQkJCQlpZiAoImNvbnRpbnVlIGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgYSBsb29wIi5lcXVhbHMocHJvYmxlbS5nZXRNZXNzYWdlKCkpKSB7Ci0JCQkJCQlhc3NlcnRUcnVlKCInY29udGludWUgY2Fubm90IGJlIHVzZWQgb3V0c2lkZSBvZiBhIGxvb3AnIG91dHNpZGUgb2YgaXRlcmF0aW9uIHRhZzogIiwgcHJvYmxlbS5nZXRTb3VyY2VTdGFydCgpID4gc3RhcnRPZmZzZXQgJiYgcHJvYmxlbS5nZXRTb3VyY2VFbmQoKSA8IGVuZE9mZnNldCk7Ci0JCQkJCX0KLQkJCQkJCi0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyB0aGF0IGFuIGl0ZXJhdGlvbiB0YWcgd2lsbCBnZW5lcmF0ZSAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJdGVyYXRpb25UYWdzSW5jb21wbGV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgdGVzdE5hbWUgPSAidGVzdEl0ZXJhdGlvblRhZ3MiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgdGVzdE5hbWUsICIvIiArIHRlc3ROYW1lKTsKLQkJfQotCQl3YWl0Rm9yQnVpbGRBbmRWYWxpZGF0aW9uKHByb2plY3QpOwotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiL1dlYkNvbnRlbnQvdGVzdF9taXNzaW5nX2VuZF90YWcuanNwIik7Ci0JCWFzc2VydFRydWUoInRlc3RfbWlzc2luZ19lbmRfdGFnLmpzcCBpcyBub3QgYWNjZXNzaWJsZSIsIHRlc3RGaWxlLmlzQWNjZXNzaWJsZSgpKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQodGVzdEZpbGUpOwotCi0JCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQlTdHJpbmcgamF2YVRleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJaW50IHN0YXJ0T2Zmc2V0ID0gamF2YVRleHQuaW5kZXhPZigifSAvLyBbPC9wbGFpbjpsb29wPl0iKTsKLQkJCWFzc2VydFRydWUoIk1pc3NpbmcgZW5kIHRhZyB3YXMgbm90IGFjY291bnRlZCBmb3IuIiwgc3RhcnRPZmZzZXQgIT0gLTEpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGFnbGliSGVscGVyV3JvbmdIaWVyYXJjaHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCi0JCVN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0SXRlcmF0aW9uVGFncyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QodGVzdE5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQl9Ci0JCXdhaXRGb3JCdWlsZEFuZFZhbGlkYXRpb24ocHJvamVjdCk7Ci0JCVRhZ2xpYkhlbHBlciBoZWxwZXIgPSBuZXcgVGFnbGliSGVscGVyKHByb2plY3QpOwotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiL1dlYkNvbnRlbnQvaXRlcmF0aW9uVGVzdGVyLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJpdGVyYXRpb25UZXN0ZXIuanNwIGlzIG5vdCBhY2Nlc3NpYmxlIiwgdGVzdEZpbGUuaXNBY2Nlc3NpYmxlKCkpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZCh0ZXN0RmlsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJQ3VzdG9tVGFnIHRhZyA9IGhlbHBlci5nZXRDdXN0b21UYWcoInBsYWluOmxpc3QiLCBkb2MsIG51bGwsIG5ldyBBcnJheUxpc3QoKSk7Ci0JCQlhc3NlcnRGYWxzZSgicGxhaW46bGlzdCBzaG91bGQgbm90IGJlIGFuIEl0ZXJhdGlvblRhZyIsIHRhZy5pc0l0ZXJhdGlvblRhZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRhZ2xpYkhlbHBlclVucmVzb2x2ZWRTdXBlcnR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCi0JCVN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0SXRlcmF0aW9uVGFncyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QodGVzdE5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQl9Ci0JCXdhaXRGb3JCdWlsZEFuZFZhbGlkYXRpb24ocHJvamVjdCk7Ci0JCVRhZ2xpYkhlbHBlciBoZWxwZXIgPSBuZXcgVGFnbGliSGVscGVyKHByb2plY3QpOwotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiL1dlYkNvbnRlbnQvaXRlcmF0aW9uVGVzdGVyLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJpdGVyYXRpb25UZXN0ZXIuanNwIGlzIG5vdCBhY2Nlc3NpYmxlIiwgdGVzdEZpbGUuaXNBY2Nlc3NpYmxlKCkpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZCh0ZXN0RmlsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJQ3VzdG9tVGFnIHRhZyA9IGhlbHBlci5nZXRDdXN0b21UYWcoInBsYWluOnViZXJsb29wIiwgZG9jLCBudWxsLCBuZXcgQXJyYXlMaXN0KCkpOwotCQkJYXNzZXJ0VHJ1ZSgicGxhaW46dWJlcmxvb3Agc2hvdWxkIGJlIGFuIEl0ZXJhdGlvblRhZyIsIHRhZy5pc0l0ZXJhdGlvblRhZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RfamF2YVZhcmlhYmxlSW5jbHVkZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3RGb2xkZXJOYW1lID0gImpzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzIjsKLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0Rm9sZGVyTmFtZSwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdC5leGlzdHMoKSk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHRlc3RGb2xkZXJOYW1lLCAiLyIgKyB0ZXN0Rm9sZGVyTmFtZSk7Ci0KLQkJd2FpdEZvckJ1aWxkQW5kVmFsaWRhdGlvbihwcm9qZWN0KTsKLQkJCi0JCVZhbGlkYXRpb25GcmFtZXdvcmsuZ2V0RGVmYXVsdCgpLnZhbGlkYXRlKG5ldyBJUHJvamVjdFtde3Byb2plY3R9LCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJYXNzZXJ0Tm9Qcm9ibGVtTWFya2Vycyhwcm9qZWN0LmdldEZpbGUoIi9XZWJDb250ZW50L3Rlc3QxLmpzcCIpKTsKLQkJYXNzZXJ0Tm9Qcm9ibGVtTWFya2Vycyhwcm9qZWN0LmdldEZpbGUoIi9XZWJDb250ZW50L2luZGV4LmpzcHgiKSk7Ci0KLQkJLy8gY2xlYW4gdXAgaWYgd2UgZ290IHRvIHRoZSBlbmQKLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydE5vUHJvYmxlbU1hcmtlcnMoSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlhc3NlcnRUcnVlKCJzYW1wbGUgdGVzdCBmaWxlIGRvZXMgbm90IGV4aXN0IiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7Ci0JCUlNYXJrZXJbXSBtYXJrZXJzID0gZmlsZS5maW5kTWFya2VycyhJTWFya2VyLlBST0JMRU0sIHRydWUsIElSZXNvdXJjZS5ERVBUSF9aRVJPKTsKLQkJU3RyaW5nQnVmZmVyIG1hcmtlclRleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewotCQkJLy8gbGluZS9zdGFydC1lbmQKLQkJCW1hcmtlclRleHQuYXBwZW5kKCJcbkwiICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5MSU5FX05VTUJFUikgKyAiL28iICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5DSEFSX1NUQVJUKSArICItIiAgKyBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLkNIQVJfRU5EKSArICI6IiArIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSkpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiUHJvYmxlbSBtYXJrZXJzIHJlcG9ydGVkIGZvdW5kIFxuIiArIG1hcmtlclRleHQsIDAsIG1hcmtlcnMubGVuZ3RoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckN1c3RvbVRhZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RyYW5zbGF0aW9uL0pTUEphdmFUcmFuc2xhdG9yQ3VzdG9tVGFnVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzE3ZWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RyYW5zbGF0aW9uL0pTUEphdmFUcmFuc2xhdG9yQ3VzdG9tVGFnVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudHJhbnNsYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5KU1BKYXZhVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguQnVuZGxlUmVzb3VyY2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uLlJlcG9ydGVyRm9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbi5WYWxpZGF0aW9uQ29udGV4dEZvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvckN1c3RvbVRhZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOy8vJE5PTi1OTFMtMSQKLS8vCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBjcmVhdGlvbkxvY2sgPSBuZXcgYnl0ZVswXTsKLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckN1c3RvbVRhZ1Rlc3QoKSB7Ci0JfQotCi0JcHVibGljIEpTUEphdmFUcmFuc2xhdG9yQ3VzdG9tVGFnVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOy8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGpzcCB0cmFuc2xhdGlvbiB3aGVuIGN1c3RvbSB0YWcgdXNlZAotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0zMTAwODUKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RfMzEwMDg1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJidWdfMzEwMDg1IjsgLy8kTk9OLU5MUy0xJAotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgcHJvamVjdE5hbWUsICIvIiArIHByb2plY3ROYW1lKTsvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiV2ViQ29udGVudC90ZXN0MzEwMDg1LmpzcCIpOy8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0VHJ1ZShmaWxlLmV4aXN0cygpKTsKLQkJCQkKLQkJSlNQVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BKYXZhVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJaGVscGVyLnNldFVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQkJCi0JCWFzc2VydFRydWUoIkZvdW5kIEpTUCBKYXZhIHByb2JsZW0gZm9yIGN1c3RvbSB0YWcgIityZXBvcnRlci5nZXRNZXNzYWdlcygpLnNpemUoKSwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOy8vJE5PTi1OTFMtMSQKLQkJCi0JfQotCi0JLyoqCi0JICogVGVzdHMganNwIHRyYW5zbGF0aW9uIHdoZW4gY3VzdG9tIHRhZyB1c2VkCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTMyNjE5MwotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF8zMjYxOTMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gImJ1Z18zMjYxOTMiOyAvLyROT04tTkxTLTEkCi0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiV2ViQ29udGVudC90ZXN0MzI2MTkzLmpzcCIpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0JCQotCQlKU1BWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUEphdmFWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQloZWxwZXIuc2V0VVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b09TU3RyaW5nKCkpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0JCQotCQlhc3NlcnRUcnVlKCJmb3VuZCBqc3AgamF2YSBlcnJvciBmb3IgZW1wdHkgZW5kIHRhZyBpbiB4bWwgY29tbWVudCBpbiBzY3JpcHQiLCByZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKSk7Ly8kTk9OLU5MUy0xJAotCQkJIAkJCi0JIAl9Ci0JfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjBmOGZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RyYW5zbGF0aW9uL0pTUFRyYW5zbGF0b3JQZXJzaXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50cmFuc2xhdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uRXh0ZXJuYWxpemFibGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BUcmFuc2xhdG9yUGVyc2lzdGVuY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdCI7Ci0JCi0JLyoqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0ZmlsZXMvSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdCI7Ci0JCi0JLyoqIFRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZSB0ZXN0cyB1c2UgKi8KLQlwcml2YXRlIHN0YXRpYyBJUHJvamVjdCBmUHJvamVjdDsKLQkKLQkvKioKLQkgKiA8cD5EZWZhdWx0IGNvbnN0cnVjdG9yPHA+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBKU1BUcmFuc2xhdG9yUGVyc2lzdGVuY2VUZXN0KCkgewotCQlzdXBlcigiSlNQVHJhbnNsYXRvciBFeHRlcm5hbGl6YXRpb24gVGVzdCIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShKU1BUcmFuc2xhdG9yUGVyc2lzdGVuY2VUZXN0LmNsYXNzLCAiSlNQVHJhbnNsYXRvciBFeHRlcm5hbGl6YXRpb24gVGVzdCIpOwotCQlyZXR1cm4gbmV3IEpTUFRyYW5zbGF0b3JFeHRlcm5hbGl6YXRpb25UZXN0U2V0dXAodHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNsYXRpb25UZXh0Q29tcGFyaXNvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgb3V0RmlsZU5hbWUgPSAidGVzdFRyYW5zbGF0aW9uVGV4dENvbXBhcmlzb24ub2JqIjsKLQotCQlKU1BUcmFuc2xhdG9yIG9yaWdpbmFsVHJhbnNsYXRvciA9IHdyaXRlVHJhbnNsYXRvcigiVGVzdDEuanNwIiwgb3V0RmlsZU5hbWUpOwotCQlTdHJpbmdCdWZmZXIgb3JpZ2luYWxUcmFuc2xhdGlvbiA9IG9yaWdpbmFsVHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbigpOwotCQkKLQkJSlNQVHJhbnNsYXRvciBleHRlcm5hbGl6ZWRUcmFuc2xhdG9yID0gKEpTUFRyYW5zbGF0b3IpcmVhZE9iamVjdChvdXRGaWxlTmFtZSk7Ci0JCVN0cmluZ0J1ZmZlciBleHRlcm5hbGl6ZWRUcmFuc2xhdGlvbiA9IGV4dGVybmFsaXplZFRyYW5zbGF0b3IuZ2V0VHJhbnNsYXRpb24oKTsKLQkJCQotCQlhc3NlcnRFcXVhbHMoIlRoZSBvcmlnaW5hbCB0cmFuc2xhdGlvbiBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHJlc3RvcmVkIGV4dGVybmFsaXplZCB0cmFuc2xhdGlvbiIsCi0JCQkJb3JpZ2luYWxUcmFuc2xhdGlvbi50b1N0cmluZygpLCBleHRlcm5hbGl6ZWRUcmFuc2xhdGlvbi50b1N0cmluZygpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zbGF0aW9uc0RlZXBFcXVhbCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgb3V0RmlsZU5hbWUgPSAidGVzdFRyYW5zbGF0aW9uVGV4dENvbXBhcmlzb24ub2JqIjsKLQotCQlKU1BUcmFuc2xhdG9yIG9yaWdpbmFsVHJhbnNsYXRvciA9IHdyaXRlVHJhbnNsYXRvcigiVGVzdDEuanNwIiwgb3V0RmlsZU5hbWUpOwotCQlKU1BUcmFuc2xhdG9yIGV4dGVybmFsaXplZFRyYW5zbGF0b3IgPSAoSlNQVHJhbnNsYXRvcilyZWFkT2JqZWN0KG91dEZpbGVOYW1lKTsKLQkJCi0JCWFzc2VydEVxdWFscygiVGhlIG9yaWdpbmFsIHRyYW5zbGF0aW9uIHNob3VsZCBiZSBkZWVwbHkgZXF1YWwgdG8gdGhlIHJlc3RvcmVkIGV4dGVybmFsaXplZCB0cmFuc2xhdGlvbiIsCi0JCQkJb3JpZ2luYWxUcmFuc2xhdG9yLCBleHRlcm5hbGl6ZWRUcmFuc2xhdG9yKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyB0ZXN0IGNhc2UgZm9sbG93cyB0aGUgZ2VuZXJhbCBwYXR0ZXJuIG9mIGhvdyBhIHRyYW5zbGF0aW9uIGlzIGNyZWF0ZWQsIHRoZW4gY2FuIGJlCi0JICogZXh0ZXJuYWxpemVkIHdoZW4gdGhlIHdvcmtzcGFjZSBpcyBjbG9zZWQsIHRoZW4gcmVsb2FkZWQgd2hlbiBpdHMgb3BlbmVkIGFnYWluLjwvcD4KLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVUcmFuc2xhdGlvbkFkYXB0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIG91dEZpbGVOYW1lID0gInRlc3RDcmVhdGVUcmFuc2xhdGlvbkFkYXB0ZXIub2JqIjsKLQotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdE1vZGVsID0gZ2V0TW9kZWxGb3JSZWFkKCJUZXN0MS5qc3AiKTsKLQkJCi0JCS8vdmVyaWZ5IHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGFkYXB0ZXIKLQkJSURPTURvY3VtZW50IGRvbURvYyA9ICgoSURPTU1vZGVsKXN0cnVjdE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlJTm9kZUFkYXB0ZXIgZXhpc3RpbmdBZGFwdGVyID0gZG9tRG9jLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJYXNzZXJ0TnVsbCgiVGhlcmUgc2hvdWxkIGJlIG5vIGV4aXN0aW5nIGFkYXB0ZXIgZm9yIElKU1BUcmFuc2xhdGlvbiIsIGV4aXN0aW5nQWRhcHRlcik7Ci0JCQotCQkvL2NyZWF0ZSBhIHRyYW5zbGF0b3IgYW5kIGV4dGVybmFsaXplIGl0LCB0aGVuIGxvYWQgdGhlIGV4dGVybmFsaXplZCB0cmFuc2xhdG9yCi0JCUpTUFRyYW5zbGF0b3Igb3JpZ2luYWxUcmFuc2xhdG9yID0gd3JpdGVUcmFuc2xhdG9yKHN0cnVjdE1vZGVsLCBvdXRGaWxlTmFtZSk7Ci0JCUpTUFRyYW5zbGF0b3IgZXh0ZXJuYWxpemVkVHJhbnNsYXRvciA9IChKU1BUcmFuc2xhdG9yKXJlYWRPYmplY3Qob3V0RmlsZU5hbWUpOwotCQkKLQkJLy9jcmVhdGUgYW4gYWRhcHRyIGZyb20gdGhlIGxvYWRlZCBleHRlcm5hbGl6ZWQgdHJhbnNsYXRvciBhbmQgYWRkIGl0IHRvIHRoZSBkb2MKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIHJlc3RvcmVkQWRhcHRlciA9IG5ldyBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIoKElET01Nb2RlbClzdHJ1Y3RNb2RlbCwgZXh0ZXJuYWxpemVkVHJhbnNsYXRvcik7Ci0JCWRvbURvYy5hZGRBZGFwdGVyKHJlc3RvcmVkQWRhcHRlcik7Ci0JCQotCQkvL3ZlcmlmeSB3ZSBjYW4gcmV0cmlldmUgdGhlIGFkYXB0ZXIgd2UganVzdCBzZXQKLQkJZXhpc3RpbmdBZGFwdGVyID0gZG9tRG9jLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiVGhlcmUgc2hvdWxkIG5vdyBiZSBhbiBleGlzdGluZyBhZGFwdGVyIGZvciBJSlNQVHJhbnNsYXRpb24iLCBleGlzdGluZ0FkYXB0ZXIpOwotCQlhc3NlcnRUcnVlKCJFeHBlY3RlZCAiICsgZXhpc3RpbmdBZGFwdGVyICsgIiB0byBiZSBhbiBpbnN0YW5jZSBvZiBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIiLAotCQkJCWV4aXN0aW5nQWRhcHRlciBpbnN0YW5jZW9mIEpTUFRyYW5zbGF0aW9uQWRhcHRlcik7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciByZXRyaWV2ZWRBZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcilleGlzdGluZ0FkYXB0ZXI7Ci0JCUpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uIGpzcFRyYW5zbGF0aW9uRXh0ZW5zaW9uID0gcmV0cmlldmVkQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkKLQkJLyogdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHRyYW5zbGF0aW9uIGlzIGVxdWFsIHRvIHRoYXQgb2YgdGhlCi0JCSAqIHJldHJpZXZlZCBhZGFwdGVyIGNyZWF0ZWQgZnJvbSB0aGUgcHJldmlvdXNseSBleHRlcm5hbGl6ZWQgdHJhbnNsYXRvcgotCQkgKi8KLQkJYXNzZXJ0RXF1YWxzKCJUaGUgb3JpZ2luYWwgdHJhbnNsYXRpb24gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSByZXN0b3JlZCBleHRlcm5hbGl6ZWQgdHJhbnNsYXRpb24iLAotCQkJCW9yaWdpbmFsVHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbigpLnRvU3RyaW5nKCksIGpzcFRyYW5zbGF0aW9uRXh0ZW5zaW9uLmdldEphdmFUZXh0KCkpOwotCQkKLQkJCi0JfQotCQotCXByaXZhdGUgc3RhdGljIEpTUFRyYW5zbGF0b3Igd3JpdGVUcmFuc2xhdG9yKFN0cmluZyBqc3BGaWxlTmFtZSwgU3RyaW5nIGV4dGVybmFsaXplZEZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlKU1BUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBuZXcgSlNQVHJhbnNsYXRvcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0TW9kZWxGb3JSZWFkKGpzcEZpbGVOYW1lKTsKLQkJCXRyYW5zbGF0b3IgPSB3cml0ZVRyYW5zbGF0b3IobW9kZWwsIGV4dGVybmFsaXplZEZpbGVOYW1lKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHRyYW5zbGF0b3I7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JSZWFkKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUganNwRmlsZSA9IGZQcm9qZWN0LmdldEZpbGUoZmlsZU5hbWUpOwotCQlhc3NlcnRUcnVlKGpzcEZpbGUuZXhpc3RzKCkpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoanNwRmlsZSk7Ci0JCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkKLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBKU1BUcmFuc2xhdG9yIHdyaXRlVHJhbnNsYXRvcihJU3RydWN0dXJlZE1vZGVsIGpzcE1vZGVsLCBTdHJpbmcgZXh0ZXJuYWxpemVkRmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUpTUFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IG5ldyBKU1BUcmFuc2xhdG9yKCk7Ci0JCXRyYW5zbGF0b3IucmVzZXQoKElET01Ob2RlKWpzcE1vZGVsLmdldEluZGV4ZWRSZWdpb24oMCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl0cmFuc2xhdG9yLnRyYW5zbGF0ZSgpOwotCQl3cml0ZU9iamVjdChleHRlcm5hbGl6ZWRGaWxlTmFtZSwgdHJhbnNsYXRvcik7Ci0JCi0JCXJldHVybiB0cmFuc2xhdG9yOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Xcml0ZSBhbiB7QGxpbmsgRXh0ZXJuYWxpemFibGV9IG9iamVjdCB0byBhIGZpbGU8L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGVOYW1lCi0JICogQHBhcmFtIG9iagotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlT2JqZWN0KFN0cmluZyBmaWxlTmFtZSwgT2JqZWN0IG9iaikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlTmFtZSk7Ci0JCU9iamVjdE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGZvcyk7Ci0JCW91dC53cml0ZU9iamVjdChvYmopOwotCQlvdXQuY2xvc2UoKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+UmVhZCBhbiB7QGxpbmsgRXh0ZXJuYWxpemFibGV9IG9iamVjdCBmcm9tIGEgZmlsZTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZU5hbWUKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIE9iamVjdCByZWFkT2JqZWN0KFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLQkJT2JqZWN0IG9iaiA9IG51bGw7Ci0JCQotCQlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlTmFtZSk7Ci0JCU9iamVjdElucHV0U3RyZWFtIGluID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGZpcyk7Ci0JCW9iaiA9IGluLnJlYWRPYmplY3QoKTsKLQkJaW4uY2xvc2UoKTsKLQkJCi0JCXJldHVybiBvYmo7Ci0JfQotCQotCS8qKgotCSAqIDxwPlRoaXMgaW5uZXIgY2xhc3MgaXMgdXNlZCB0byBkbyBzZXQgdXAgYW5kIHRlYXIgZG93biBiZWZvcmUgYW5kCi0JICogYWZ0ZXIgKHJlc3BlY3RpdmVseSkgYWxsIHRlc3RzIGluIHRoZSBpbmNsb3NpbmcgY2xhc3MgaGF2ZSBydW4uPC9wPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIEpTUFRyYW5zbGF0b3JFeHRlcm5hbGl6YXRpb25UZXN0U2V0dXAgZXh0ZW5kcyBUZXN0U2V0dXAgewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFID0gInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSI7Ci0JCXByaXZhdGUgc3RhdGljIFN0cmluZyBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBudWxsOwotCQkKLQkJLyoqCi0JCSAqIERlZmF1bHQgY29uc3RydWN0b3IKLQkJICogCi0JCSAqIEBwYXJhbSB0ZXN0IGRvIHNldHVwIGZvciB0aGUgZ2l2ZW4gdGVzdAotCQkgKi8KLQkJcHVibGljIEpTUFRyYW5zbGF0b3JFeHRlcm5hbGl6YXRpb25UZXN0U2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJZlByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbnVsbCk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgUFJPSkVDVF9OQU1FKTsKLQkJCQotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQkKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJaWYgKHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJCX0KLQkJCQotCQkJZlByb2plY3QuZGVsZXRlKHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjg5ZGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BBY3Rpb25WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEFjdGlvblZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyYzUwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEFjdGlvblZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5KU1BDb3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQQWN0aW9uVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleC5CdW5kbGVSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotCi1wdWJsaWMgY2xhc3MgSlNQQWN0aW9uVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gInRlc3R2YWxpZGF0ZWpzcGFjdGlvbnMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVTkRFRklORURfQVRUUl9JRE9OVCA9ICJpZG9udCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVJUkVEX0FUVFJfTkFNRSA9ICJuYW1lIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORU1QVFlfSU5MSU5FX1RBR19OQU1FID0gImxpYnRhZ3M6ZW1wdHlib2R5Y29udGVudCI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYgdW5rbm93biBhdHRyaWJ1dGVzIGFyZSBkZXRlY3RlZAotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVrbm93bkF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BBY3Rpb25WYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUEFjdGlvblZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC91bmRlZmluZWRhdHRyaWJ1dGUuanNwIjsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVQYXRoLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKS5leGlzdHMoKSk7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0KLQkJYm9vbGVhbiBmb3VuZEVycm9yMSA9IGVycm9yTWVzc2FnZUZvdW5kKHJlcG9ydGVyLCBOTFMuYmluZChKU1BDb3JlTWVzc2FnZXMuSlNQRGlyZWN0aXZlVmFsaWRhdG9yXzYsIFVOREVGSU5FRF9BVFRSX0lET05UKSwgNCk7Ci0JCWlmIChmb3VuZEVycm9yMSkKLQkJCWZvdW5kRXJyb3IxID0gZXJyb3JNZXNzYWdlRm91bmQocmVwb3J0ZXIsIE5MUy5iaW5kKEpTUENvcmVNZXNzYWdlcy5KU1BEaXJlY3RpdmVWYWxpZGF0b3JfNiwgVU5ERUZJTkVEX0FUVFJfSURPTlQpLCAxMik7Ci0JCWlmIChmb3VuZEVycm9yMSkKLQkJCWZvdW5kRXJyb3IxID0gZXJyb3JNZXNzYWdlRm91bmQocmVwb3J0ZXIsIE5MUy5iaW5kKEpTUENvcmVNZXNzYWdlcy5KU1BEaXJlY3RpdmVWYWxpZGF0b3JfNiwgVU5ERUZJTkVEX0FUVFJfSURPTlQpLCAxMyk7Ci0KLQkJYXNzZXJ0VHJ1ZSgianNwIGFjdGlvbiB2YWxpZGF0b3IgZGlkIG5vdCBkZXRlY3QgdW5kZWZpbmVkIGF0dHJpYnV0ZXMiLCBmb3VuZEVycm9yMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIGFyZSBkZXRlY3RlZAotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1pc3NpbmdSZXF1aXJlZEF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BBY3Rpb25WYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUEFjdGlvblZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9ub3JlcXVpcmVkYXR0cmlidXRlLmpzcCI7Ci0JCWFzc2VydFRydWUoInVuYWJsZSB0byBmaW5kIGZpbGU6ICIgKyBmaWxlUGF0aCwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSkuZXhpc3RzKCkpOwotCi0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0KLQkJYm9vbGVhbiBmb3VuZEVycm9yID0gZXJyb3JNZXNzYWdlRm91bmQocmVwb3J0ZXIsIE5MUy5iaW5kKEpTUENvcmVNZXNzYWdlcy5KU1BEaXJlY3RpdmVWYWxpZGF0b3JfNSwgUkVRVUlSRURfQVRUUl9OQU1FKSwgMTEpOwotCQlpZiAoZm91bmRFcnJvcikKLQkJCWZvdW5kRXJyb3IgPSBlcnJvck1lc3NhZ2VGb3VuZChyZXBvcnRlciwgTkxTLmJpbmQoSlNQQ29yZU1lc3NhZ2VzLkpTUERpcmVjdGl2ZVZhbGlkYXRvcl81LCBSRVFVSVJFRF9BVFRSX05BTUUpLCAxMik7Ci0KLQkJYXNzZXJ0VHJ1ZSgianNwIGFjdGlvbiB2YWxpZGF0b3IgZGlkIG5vdCBkZXRlY3QgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIiwgZm91bmRFcnJvcik7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGVycm9yTWVzc2FnZUZvdW5kKElSZXBvcnRlciByZXBvcnRlciwgU3RyaW5nIGVycm9yTWVzc2FnZSwgaW50IGVycm9yTGluZU51bWJlcikgewotCQlib29sZWFuIGZvdW5kRXJyb3IgPSBmYWxzZTsKLQkJTGlzdCBtZXNzYWdlcyA9IHJlcG9ydGVyLmdldE1lc3NhZ2VzKCk7Ci0JCUl0ZXJhdG9yIGl0ZXIgPSBtZXNzYWdlcy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkgJiYgIWZvdW5kRXJyb3IpIHsKLQkJCUlNZXNzYWdlIG1lc3NhZ2UgPSAoSU1lc3NhZ2UpIGl0ZXIubmV4dCgpOwotCQkJaW50IGxpbmVOdW1iZXIgPSBtZXNzYWdlLmdldExpbmVOdW1iZXIoKTsKLQkJCVN0cmluZyBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UuZ2V0VGV4dCgpOwotCi0JCQlpZiAobGluZU51bWJlciA9PSBlcnJvckxpbmVOdW1iZXIgJiYgbWVzc2FnZVRleHQuc3RhcnRzV2l0aChlcnJvck1lc3NhZ2UpKQotCQkJCWZvdW5kRXJyb3IgPSB0cnVlOwotCQl9Ci0JCXJldHVybiBmb3VuZEVycm9yOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGlmIG1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyBhcmUgZGV0ZWN0ZWQKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzQ29ycmVjdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BBY3Rpb25WYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUEFjdGlvblZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC93b3Jrc2ZpbmUuanNwIjsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVQYXRoLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKS5leGlzdHMoKSk7Ci0KLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQkJCi0JCVN0cmluZ0J1ZmZlciBlcnJvciA9IG5ldyBTdHJpbmdCdWZmZXIoImpzcCBhY3Rpb24gdmFsaWRhdG9yIGZvdW5kIGVycm9ycyB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSIpOwotCQlMaXN0IG1lc3NhZ2VzID0gcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5zaXplKCk7IGkrKykgewotCQkJZXJyb3IuYXBwZW5kKCdcbicpOwotCQkJZXJyb3IuYXBwZW5kKCgoSU1lc3NhZ2UpIG1lc3NhZ2VzLmdldChpKSkuZ2V0VGV4dCgpKTsKLQkJfQotCi0JCWFzc2VydFRydWUoZXJyb3IudG9TdHJpbmcoKSwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGlmIG5vbi1lbXB0eSBpbmxpbmUgdGFncyBhcmUgZmxhZ2dlZCBhcyB3YXJuaW5ncwotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vbkVtcHR5SW5saW5lVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yMDMyNTQKLQkJSlNQQWN0aW9uVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BBY3Rpb25WYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvbm9uZW1wdHlpbmxpbmV0YWcuanNwIjsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVQYXRoLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKS5leGlzdHMoKSk7Ci0KLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQotCQlib29sZWFuIGZvdW5kRXJyb3IgPSBlcnJvck1lc3NhZ2VGb3VuZChyZXBvcnRlciwgTkxTLmJpbmQoSlNQQ29yZU1lc3NhZ2VzLkpTUEFjdGlvblZhbGlkYXRvcl8wLCBOT05FTVBUWV9JTkxJTkVfVEFHX05BTUUpLCAxMCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgianNwIGFjdGlvbiB2YWxpZGF0b3IgaGFkIHByb2JsZW1zIGRldGVjdGluZyBhbiBlcnJvciB3aXRoIGNvbnRlbnQgaW4gYW4gaW5saW5lIHRhZyIsIGZvdW5kRXJyb3IpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vSlNQQmF0Y2hWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEJhdGNoVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmQxNzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vSlNQQmF0Y2hWYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuSlNQQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHByb3BlcnRpZXMuSlNQRkNvbnRlbnRQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5KU1BDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUEJhdGNoVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUENvbnRlbnRWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQSmF2YVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5KU1BWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5SZXBvcnRlckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uRnJhbWV3b3JrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvblN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotCi0vKioKLSAqIFRlc3RzIEpTUCBCYXRjaCBWYWxpZGF0b3IKLSAqLwotcHVibGljIGNsYXNzIEpTUEJhdGNoVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gImJhdGNodmFsaWRhdGlvbiI7Ci0JT2JqZWN0IG9yaWdpbmFsV29ya3NwYWNlVmFsdWUgPSBudWxsOwotCUlFY2xpcHNlUHJlZmVyZW5jZXMgd29ya3NwYWNlU2NvcGUgPSBudWxsOwotCUlFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFNjb3BlID0gbnVsbDsKLQlPYmplY3RbXSB2YWxpZGF0b3JJZHMgPSBuZXcgU3RyaW5nW117Im9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5KU1BDb250ZW50VmFsaWRhdG9yIiwgIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5KU1BCYXRjaFZhbGlkYXRvciJ9OwotCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJCi0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgInRydWUiKTsKLQotCQlpZiAoIWdldFByb2plY3QoKS5leGlzdHMoKSkgewotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIGdldFByb2plY3QoKS5leGlzdHMoKSk7Ci0KLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2hlYWRlci5qc3BmIjsKLQkJSUZpbGUgZnJhZ21lbnQgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQotCQlTdHJpbmcgcXVhbGlmaWVyID0gSlNQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0JCXdvcmtzcGFjZVNjb3BlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKHF1YWxpZmllcik7Ci0JCXByb2plY3RTY29wZSA9IG5ldyBQcm9qZWN0U2NvcGUoZnJhZ21lbnQuZ2V0UHJvamVjdCgpKS5nZXROb2RlKHF1YWxpZmllcik7Ci0JCW9yaWdpbmFsV29ya3NwYWNlVmFsdWUgPSB3b3Jrc3BhY2VTY29wZS5nZXQoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIG51bGwpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JCXByb2plY3RTY29wZS5yZW1vdmUoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMpOwotCQlwcm9qZWN0U2NvcGUucmVtb3ZlKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVElPTl9VU0VfUFJPSkVDVF9TRVRUSU5HUyk7Ci0JCWlmIChvcmlnaW5hbFdvcmtzcGFjZVZhbHVlICE9IG51bGwpCi0JCQl3b3Jrc3BhY2VTY29wZS5wdXQoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIG9yaWdpbmFsV29ya3NwYWNlVmFsdWUudG9TdHJpbmcoKSk7Ci0JCWVsc2UKLQkJCXdvcmtzcGFjZVNjb3BlLnJlbW92ZShKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUyk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgdmFsaWRhdGluZyAyIGpzcCBmaWxlcy4gU2VlCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIxNDQ0MQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmcyRmlsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BKYXZhVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoMSA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9paGF2ZWVycm9ycy5qc3AiOwotCQlJRmlsZSBmaWxlMSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aDEpKTsKLQkJYXNzZXJ0VHJ1ZShmaWxlMS5leGlzdHMoKSk7Ci0KLQkJU3RyaW5nIGZpbGVQYXRoMiA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9paGF2ZWVycm9yczIuanNwIjsKLQkJSUZpbGUgZmlsZTIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgxKSk7Ci0JCWFzc2VydFRydWUoZmlsZTIuZXhpc3RzKCkpOwotCi0JCWhlbHBlci5zZXRVUklzKG5ldyBTdHJpbmdbXXtmaWxlUGF0aDEsIGZpbGVQYXRoMn0pOwotCi0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQganNwIGVycm9ycyB3ZXJlIG5vdCBmb3VuZCBpbiBib3RoIGZpbGVzOiAiICsgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5zaXplKCksIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpID49IDIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGcmFnbWVudFZhbGlkYXRpb25QcmVmZXJlbmNlT25Qcm9qZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUEJhdGNoVmFsaWRhdG9yIHZhbGlkYXRvcjEgPSBuZXcgSlNQQmF0Y2hWYWxpZGF0b3IoKTsKLQkJSlNQQ29udGVudFZhbGlkYXRvciB2YWxpZGF0b3IyID0gbmV3IEpTUENvbnRlbnRWYWxpZGF0b3IoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2hlYWRlci5qc3BmIjsKLQkJVmFsaWRhdGlvblJlc3VsdCByZXN1bHQgPSBudWxsOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0KLQkJLy8gZW5hYmxlIHdvcmtzcGFjZS13aWRlIGJ1dCBkaXNhYmxlIGluIHByb2plY3QsIG5vIHByb2JsZW0gbWFya2VycwotCQkvLyBleHBlY3RlZAotCQl3b3Jrc3BhY2VTY29wZS5wdXRCb29sZWFuKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTLCB0cnVlKTsKLQkJcHJvamVjdFNjb3BlLnB1dEJvb2xlYW4oSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFUSU9OX1VTRV9QUk9KRUNUX1NFVFRJTkdTLCB0cnVlKTsKLQkJcHJvamVjdFNjb3BlLnB1dEJvb2xlYW4oSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIGZhbHNlKTsKLQotCQlyZXN1bHQgPSB2YWxpZGF0b3IxLnZhbGlkYXRlKGZpbGUsIElSZXNvdXJjZURlbHRhLkNIQU5HRUQsIG5ldyBWYWxpZGF0aW9uU3RhdGUoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJlc3VsdC5tZXJnZVJlc3VsdHModmFsaWRhdG9yMi52YWxpZGF0ZShmaWxlLCBJUmVzb3VyY2VEZWx0YS5DSEFOR0VELCBuZXcgVmFsaWRhdGlvblN0YXRlKCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpKTsKLQotCQlhc3NlcnRFcXVhbHMoIlByb2JsZW1zIGZvdW5kIHdoaWxlIGZyYWdtZW50IHZhbGlkYXRpb24gd2FzIGRpc2FibGVkIGluIHByb2plY3QgYnV0IGVuYWJsZWQgb24gd29ya3NwYWNlIiwgMCwgKCgoUmVwb3J0ZXJIZWxwZXIpcmVzdWx0LmdldFJlcG9ydGVyKG51bGwpKS5nZXRNZXNzYWdlcygpLnNpemUoKSkpOwotCi0JCS8qCi0JCSAqIGRpc2FibGUgd29ya3NwYWNlLXdpZGUgYnV0IGVuYWJsZSBpbiBwcm9qZWN0LCBzb21lIHByb2JsZW0gbWFya2VycwotCQkgKiBleHBlY3RlZAotCQkgKi8KLQkJd29ya3NwYWNlU2NvcGUucHV0Qm9vbGVhbihKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmFsc2UpOwotCQlwcm9qZWN0U2NvcGUucHV0Qm9vbGVhbihKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRJT05fVVNFX1BST0pFQ1RfU0VUVElOR1MsIHRydWUpOwotCQlwcm9qZWN0U2NvcGUucHV0Qm9vbGVhbihKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgdHJ1ZSk7Ci0JCUpTUEZDb250ZW50UHJvcGVydGllcy5zZXRQcm9wZXJ0eShKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmlsZSwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0KLQkJcmVzdWx0ID0gdmFsaWRhdG9yMS52YWxpZGF0ZShmaWxlLCBJUmVzb3VyY2VEZWx0YS5DSEFOR0VELCBuZXcgVmFsaWRhdGlvblN0YXRlKCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlyZXN1bHQubWVyZ2VSZXN1bHRzKHZhbGlkYXRvcjIudmFsaWRhdGUoZmlsZSwgSVJlc291cmNlRGVsdGEuQ0hBTkdFRCwgbmV3IFZhbGlkYXRpb25TdGF0ZSgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiUHJvYmxlbXMgbm90IGZvdW5kIHdoaWxlIGZyYWdtZW50IHZhbGlkYXRpb24gd2FzIGVuYWJsZWQgZm9yIHByb2plY3QgYnV0IGRpc2FibGVkIG9uIHdvcmtzcGFjZSIsIDAgPCAoKChSZXBvcnRlckhlbHBlcilyZXN1bHQuZ2V0UmVwb3J0ZXIobnVsbCkpLmdldE1lc3NhZ2VzKCkuc2l6ZSgpKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZyYWdtZW50VmFsaWRhdGlvblByZWZlcmVuY2VPbldvcmtzcGFjZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BCYXRjaFZhbGlkYXRvciB2YWxpZGF0b3IxID0gbmV3IEpTUEJhdGNoVmFsaWRhdG9yKCk7Ci0JCUpTUENvbnRlbnRWYWxpZGF0b3IgdmFsaWRhdG9yMiA9IG5ldyBKU1BDb250ZW50VmFsaWRhdG9yKCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9oZWFkZXIuanNwZiI7Ci0KLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlWYWxpZGF0aW9uUmVzdWx0IHJlc3VsdCA9IG51bGw7Ci0KLQkJLy8gZGlzYWJsZSB3b3Jrc3BhY2Utd2lkZSwgbm8gcHJvYmxlbSBtYXJrZXJzIGV4cGVjdGVkCi0JCXdvcmtzcGFjZVNjb3BlLnB1dEJvb2xlYW4oSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIGZhbHNlKTsKLQotCQlyZXN1bHQgPSB2YWxpZGF0b3IxLnZhbGlkYXRlKGZpbGUsIElSZXNvdXJjZURlbHRhLkNIQU5HRUQsIG5ldyBWYWxpZGF0aW9uU3RhdGUoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJlc3VsdC5tZXJnZVJlc3VsdHModmFsaWRhdG9yMi52YWxpZGF0ZShmaWxlLCBJUmVzb3VyY2VEZWx0YS5DSEFOR0VELCBuZXcgVmFsaWRhdGlvblN0YXRlKCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpKTsKLQotCQlhc3NlcnRFcXVhbHMoIlByb2JsZW0gbWFya2VycyBmb3VuZCB3aGlsZSBmcmFnbWVudCB2YWxpZGF0aW9uIHdhcyBkaXNhYmxlZCIsIDAsICgoKFJlcG9ydGVySGVscGVyKXJlc3VsdC5nZXRSZXBvcnRlcihudWxsKSkuZ2V0TWVzc2FnZXMoKS5zaXplKCkpKTsKLQotCQkvLyBlbmFibGUgd29ya3NwYWNlLXdpZGUsIHNvbWUgcHJvYmxlbSBtYXJrZXJzIGV4cGVjdGVkCi0JCXdvcmtzcGFjZVNjb3BlLnB1dEJvb2xlYW4oSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIHRydWUpOwotCQlWYWxpZGF0aW9uRnJhbWV3b3JrLmdldERlZmF1bHQoKS52YWxpZGF0ZShuZXcgSVByb2plY3RbXXtnZXRQcm9qZWN0KCl9LCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCVZhbGlkYXRpb25GcmFtZXdvcmsuZ2V0RGVmYXVsdCgpLmpvaW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJcmVzdWx0ID0gdmFsaWRhdG9yMS52YWxpZGF0ZShmaWxlLCBJUmVzb3VyY2VEZWx0YS5DSEFOR0VELCBuZXcgVmFsaWRhdGlvblN0YXRlKCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlyZXN1bHQubWVyZ2VSZXN1bHRzKHZhbGlkYXRvcjIudmFsaWRhdGUoZmlsZSwgSVJlc291cmNlRGVsdGEuQ0hBTkdFRCwgbmV3IFZhbGlkYXRpb25TdGF0ZSgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiUHJvYmxlbSBtYXJrZXJzIG5vdCBmb3VuZCB3aGlsZSBmcmFnbWVudCB2YWxpZGF0aW9uIHdhcyBlbmFibGVkIG9uIHdvcmtzcGFjZSIsICgoKFJlcG9ydGVySGVscGVyKXJlc3VsdC5nZXRSZXBvcnRlcihudWxsKSkuZ2V0TWVzc2FnZXMoKS5zaXplKCkpICE9IDApOwotCi0JCS8vIGNoZWNrIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZQotCQl3b3Jrc3BhY2VTY29wZS5yZW1vdmUoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMpOwotCQlwcm9qZWN0U2NvcGUucmVtb3ZlKEpTUENvcmVQcmVmZXJlbmNlTmFtZXMuVkFMSURBVEVfRlJBR01FTlRTKTsKLQkJcHJvamVjdFNjb3BlLnJlbW92ZShKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLlZBTElEQVRJT05fVVNFX1BST0pFQ1RfU0VUVElOR1MpOwotCi0JCXJlc3VsdCA9IHZhbGlkYXRvcjEudmFsaWRhdGUoZmlsZSwgSVJlc291cmNlRGVsdGEuQ0hBTkdFRCwgbmV3IFZhbGlkYXRpb25TdGF0ZSgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJcmVzdWx0Lm1lcmdlUmVzdWx0cyh2YWxpZGF0b3IyLnZhbGlkYXRlKGZpbGUsIElSZXNvdXJjZURlbHRhLkNIQU5HRUQsIG5ldyBWYWxpZGF0aW9uU3RhdGUoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSkpOwotCi0JCWFzc2VydFRydWUoIlByb2JsZW0gbWFya2VycyBub3QgZm91bmQgd2hpbGUgZnJhZ21lbnQgdmFsaWRhdGlvbiB3YXMgcHJlZmVyZW5jZXMgd2VyZSBkZWZhdWx0IiwgKCgoUmVwb3J0ZXJIZWxwZXIpcmVzdWx0LmdldFJlcG9ydGVyKG51bGwpKS5nZXRNZXNzYWdlcygpLnNpemUoKSkgIT0gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMQ29uZGl0aW9uYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoInRlc3RJdGVyYXRpb25UYWdzIikuZXhpc3RzKCkpIHsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJ0ZXN0SXRlcmF0aW9uVGFncyIsIG51bGwsIG5ldyBTdHJpbmdbXXtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIFBST0pFQ1RfTkFNRSwgIi8iICsgUFJPSkVDVF9OQU1FKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCJ0ZXN0SXRlcmF0aW9uVGFncyIpLmV4aXN0cygpKTsKLQotCi0JCUpTUFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSlNQSmF2YVZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aDEgPSAiL3Rlc3RJdGVyYXRpb25UYWdzL1dlYkNvbnRlbnQvZGVmYXVsdC5qc3B4IjsKLQkJSUZpbGUgZmlsZTEgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgxKSk7Ci0JCWFzc2VydFRydWUoZmlsZTEuZXhpc3RzKCkpOwotCi0JCWhlbHBlci5zZXRVUklzKG5ldyBTdHJpbmdbXXtmaWxlUGF0aDF9KTsKLQotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0JCWFzc2VydFRydWUoImV4cGVjdGVkIGpzcCBlcnJvcnMgd2VyZSBub3QgZm91bmQgaW4gYm90aCBmaWxlczogIiArIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpLCByZXBvcnRlci5nZXRNZXNzYWdlcygpLnNpemUoKSA9PSAwKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBJUHJvamVjdCBnZXRQcm9qZWN0KCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BEaXJlY3RpdmVWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUERpcmVjdGl2ZVZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhYmE0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUERpcmVjdGl2ZVZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5KU1BDb3JlTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQQmF0Y2hWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQRGlyZWN0aXZlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleC5CdW5kbGVSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5Tb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uQWJzdHJhY3RWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvblJlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi1wdWJsaWMgY2xhc3MgSlNQRGlyZWN0aXZlVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIFN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAidGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX05BTUUgPSAiZnJhZ21lbnRUaGF0RG9lc250RXhpc3QuanNwZiI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCdWcyNjU3MTBFeHByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUERpcmVjdGl2ZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSlNQRGlyZWN0aXZlVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2J1ZzI2NTcxMGV4cHJlc3Npb24uanNwIjsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVQYXRoLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKS5leGlzdHMoKSk7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0JCQotCQlpZiAocmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5zaXplKCkgPiAwKSB7Ci0JCQlJdGVyYXRvciBpdCA9IHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlJTWVzc2FnZSBtZXNzYWdlID0gKElNZXNzYWdlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKG1lc3NhZ2UuZ2V0TGluZU51bWJlcigpID09IDE0ICYmIG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJTWVzc2FnZS5ISUdIX1NFVkVSSVRZKSB7Ci0JCQkJCWZhaWwoIkpTUCBEaXJlY3RpdmUgVmFsaWRhdG9yIGZsYWdnZWQgYSBKU1AgZXhwcmVzc2lvbiBpbiB0aGUgaW1wb3J0IGRpcmVjdGl2ZSIpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMjY1NzEwRWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQRGlyZWN0aXZlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BEaXJlY3RpdmVWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvYnVnMjY1NzEwZWwuanNwIjsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVQYXRoLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKS5leGlzdHMoKSk7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0JCQotCQlpZiAocmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5zaXplKCkgPiAwKSB7Ci0JCQlJdGVyYXRvciBpdCA9IHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlJTWVzc2FnZSBtZXNzYWdlID0gKElNZXNzYWdlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKG1lc3NhZ2UuZ2V0TGluZU51bWJlcigpID09IDExICYmIG1lc3NhZ2UuZ2V0U2V2ZXJpdHkoKSA9PSBJTWVzc2FnZS5ISUdIX1NFVkVSSVRZKSB7Ci0JCQkJCWZhaWwoIkpTUCBEaXJlY3RpdmUgVmFsaWRhdG9yIGZsYWdnZWQgSlNQIEVMIGluIHRoZSBpbXBvcnQgZGlyZWN0aXZlIik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RJbmNsdWRlRGlyZWN0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUERpcmVjdGl2ZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSlNQRGlyZWN0aXZlVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L3Rlc3RpbmNsdWRlLmpzcCI7Ci0JCWFzc2VydFRydWUoInVuYWJsZSB0byBmaW5kIGZpbGU6ICIgKyBmaWxlUGF0aCwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSkuZXhpc3RzKCkpOwotCQloZWxwZXIuc2V0VVJJKGZpbGVQYXRoKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCQkKLQkJYm9vbGVhbiBmb3VuZE1pc3NpbmdJbmNsdWRlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZm91bmRJbmNsdWRlV2l0aEVycm9yID0gZmFsc2U7Ci0JCWlmIChyZXBvcnRlci5nZXRNZXNzYWdlcygpLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGl0ID0gcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCQkJYm9vbGVhbiBmb3VuZEVycm9yID0gZmFsc2U7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpICYmICFmb3VuZEVycm9yKSB7Ci0JCQkJSU1lc3NhZ2UgbWVzc2FnZSA9IChJTWVzc2FnZSkgaXQubmV4dCgpOwotCQkJCWlmIChtZXNzYWdlLmdldExpbmVOdW1iZXIoKSA9PSAxMSkKLQkJCQkJZm91bmRJbmNsdWRlV2l0aEVycm9yID0gdHJ1ZTsKLQkJCQllbHNlIGlmIChtZXNzYWdlLmdldExpbmVOdW1iZXIoKSA9PSAxMikgewotCQkJCQlTdHJpbmcgZXhwZWN0ZWRNc2cgPSBOTFMuYmluZChKU1BDb3JlTWVzc2FnZXMuSlNQRGlyZWN0aXZlVmFsaWRhdG9yXzQsIG5ldyBTdHJpbmdbXSB7IEZSQUdNRU5UX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC8iICsgRlJBR01FTlRfTkFNRSB9KTsKLQkJCQkJaWYgKCFleHBlY3RlZE1zZy5lcXVhbHMobWVzc2FnZS5nZXRUZXh0KCkpKQotCQkJCQkJZmFpbCgiRXJyb3IgZm91bmQgb24gbGluZSAxMiwgYnV0IHdhcyBub3QgYSBtaXNzaW5nIGZyYWdtZW50IGVycm9yLiIpOwotCQkJCQlmb3VuZE1pc3NpbmdJbmNsdWRlID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiSlNQIERpcmVjdGl2ZSBWYWxpZGF0b3IgcmVwb3J0ZWQgYW4gZXJyb3IgZm9yIGEgZnJhZ21lbnQgdGhhdCBzaG91bGQgYmUgbG9jYXRhYmxlLiIsIGZvdW5kSW5jbHVkZVdpdGhFcnJvcik7Ci0JCWFzc2VydFRydWUoIkpTUCBEaXJlY3RpdmUgVmFsaWRhdG9yIGRpZCBub3QgcmVwb3J0IHRoZSBtaXNzaW5nIGZyYWdtZW50LiIsIGZvdW5kTWlzc2luZ0luY2x1ZGUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW5jbHVkZURpcmVjdGl2ZVhNTCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PlxuIisKLQkJIjxqc3A6cm9vdCB4bWxuczpqc3A9XCJodHRwOi8vamF2YS5zdW4uY29tL0pTUC9QYWdlXCIgdmVyc2lvbj1cIjIuMFwiPlxuIisKLQkJIjxqc3A6ZGlyZWN0aXZlLmluY2x1ZGUgIGZpbGU9XCJtaXNzaW5nLmpzcGZcIi8+XG4iOwotCQlydW5OZWdhdGl2ZVRlc3QoIi8iKyBnZXROYW1lKCkgKyAiL3Rlc3QuanNwIiwgY29udGVudHMsIG5ldyBKU1BCYXRjaFZhbGlkYXRvcigpLCAiRnJhZ21lbnQgXCJtaXNzaW5nLmpzcGZcIiB3YXMgbm90IGZvdW5kIGF0IGV4cGVjdGVkIHBhdGggL3Rlc3RJbmNsdWRlRGlyZWN0aXZlWE1ML21pc3NpbmcuanNwZiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW5jbHVkZURpcmVjdGl2ZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gIjwlQGluY2x1ZGUgZmlsZT1cIm1pc3NpbmcuanNwZlwiJT5cbiI7Ci0JCXJ1bk5lZ2F0aXZlVGVzdCgiLyIrIGdldE5hbWUoKSArICIvdGVzdC5qc3AiLCBjb250ZW50cywgbmV3IEpTUEJhdGNoVmFsaWRhdG9yKCksICJGcmFnbWVudCBcIm1pc3NpbmcuanNwZlwiIHdhcyBub3QgZm91bmQgYXQgZXhwZWN0ZWQgcGF0aCAvdGVzdEluY2x1ZGVEaXJlY3RpdmUyL21pc3NpbmcuanNwZiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW5jbHVkZUFjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PlxuIisKLQkJIjxqc3A6cm9vdCB4bWxuczpqc3A9XCJodHRwOi8vamF2YS5zdW4uY29tL0pTUC9QYWdlXCIgdmVyc2lvbj1cIjIuMFwiPlxuIisKLQkJIjxqc3A6aW5jbHVkZSBwYWdlPVwibWlzc2luZy5qc3BmXCIvPlxuIjsKLQkJcnVuTmVnYXRpdmVUZXN0KCIvIisgZ2V0TmFtZSgpICsgIi90ZXN0LmpzcCIsIGNvbnRlbnRzLCBuZXcgSlNQQmF0Y2hWYWxpZGF0b3IoKSwgIkZyYWdtZW50IFwibWlzc2luZy5qc3BmXCIgd2FzIG5vdCBmb3VuZCBhdCBleHBlY3RlZCBwYXRoIC90ZXN0SW5jbHVkZUFjdGlvbi9taXNzaW5nLmpzcGYiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEluY2x1ZGVNYXBwZWRVUkwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdCgiZGVsb3MiKTsKLQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgiZGVsb3MiLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2RlbG9zIiwgIi9kZWxvcyIpOwotCQl9Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBwcm9qZWN0LmV4aXN0cygpKTsKLQotCQlKU1BEaXJlY3RpdmVWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUERpcmVjdGl2ZVZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvZGVsb3MvV2ViQ29udGVudC8xLmpzcCI7Ci0JCWFzc2VydFRydWUoInVuYWJsZSB0byBmaW5kIGZpbGU6ICIgKyBmaWxlUGF0aCwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSkuZXhpc3RzKCkpOwotCQloZWxwZXIuc2V0VVJJKGZpbGVQYXRoKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyB3ZXJlIGZvdW5kIGluIEpTUCBmaWxlIiwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCQkKLQkJdHJ5IHsKLQkJCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGZhaWx1cmUgdG8gY2xlYW4gdXAgc2hvdWxkbid0IGZhaWwgdGhlIHRlc3QKLQkJfQotCX0KLQotCS8qKgotCSAqIFRoZSBwdXJwb3NlIG9mIGEgdmFsaWRhdG9yIGlzIHRvIGdlbmVyYXRlIG1lc3NhZ2VzLiAgTGV0IHVzIG1ha2Ugc3VyZSB0aGUgZXhwZWN0ZWQgbWVzc2FnZXMgYXJlIGdlbmVyYXRlZC4KLQkgKiBAcGFyYW0gZmlsZVBhdGgKLQkgKiBAcGFyYW0gY29udGVudAotCSAqIEBwYXJhbSB2YWxpZGF0b3IKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQcm9ibGVtTWVzc2FnZXMKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHJ1bk5lZ2F0aXZlVGVzdChTdHJpbmcgZmlsZVBhdGgsIFN0cmluZyBjb250ZW50LCBBYnN0cmFjdFZhbGlkYXRvciB2YWxpZGF0b3IsIFN0cmluZyBleHBlY3RlZFByb2JsZW1NZXNzYWdlcykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aCAoZmlsZVBhdGgpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHBhdGguc2VnbWVudCgwKSk7Ci0JCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocGF0aC5zZWdtZW50KDApLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCX0KLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnQuZ2V0Qnl0ZXMoInV0ZjgiKSksIHRydWUsIG51bGwpOwotCQlWYWxpZGF0aW9uUmVzdWx0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZShmaWxlLCBJUmVzb3VyY2VEZWx0YS5BRERFRCwgbmV3IFZhbGlkYXRpb25TdGF0ZSgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUHJvYmxlbU1lc3NhZ2VzLCBzb3J0TWVzc2FnZXMocmVzdWx0LmdldFJlcG9ydGVyKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpLmdldE1lc3NhZ2VzKCkpKTsKLQl9Ci0JCi0Jc3RhdGljIGNsYXNzIFZhbGlkYXRvck1lc3NhZ2VTb3J0ZXIgZXh0ZW5kcyBTb3J0ZXIgewotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuU29ydGVyI2NvbXBhcmUoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGNvbXBhcmUoT2JqZWN0IGVsZW1lbnRPbmUsIE9iamVjdCBlbGVtZW50VHdvKSB7Ci0JCQlpZiAoZWxlbWVudE9uZSBpbnN0YW5jZW9mIFZhbGlkYXRpb25NZXNzYWdlKQotCQkJCXJldHVybiAoKFZhbGlkYXRpb25NZXNzYWdlKSBlbGVtZW50VHdvKS5nZXRNZXNzYWdlKCkuY29tcGFyZVRvKCgoVmFsaWRhdGlvbk1lc3NhZ2UpIGVsZW1lbnRPbmUpLmdldE1lc3NhZ2UoKSkgPiAwOwotCQkJcmV0dXJuICgoSU1lc3NhZ2UpIGVsZW1lbnRUd28pLmdldE9mZnNldCgpID4gKChJTWVzc2FnZSkgZWxlbWVudE9uZSkuZ2V0T2Zmc2V0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbWVzc2FnZXMKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgc29ydE1lc3NhZ2VzKExpc3QgbWVzc2FnZXMpIHsKLQkJT2JqZWN0W10gc29ydGVkID0gbmV3IFZhbGlkYXRvck1lc3NhZ2VTb3J0ZXIoKS5zb3J0KG1lc3NhZ2VzLnRvQXJyYXkoKSk7Ci0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvcnRlZC5sZW5ndGg7IGkrKykgewotCQkJaWYgKHNvcnRlZFtpXSBpbnN0YW5jZW9mIFZhbGlkYXRpb25NZXNzYWdlKQotCQkJCXMuYXBwZW5kKCgoVmFsaWRhdGlvbk1lc3NhZ2UpIHNvcnRlZFtpXSkuZ2V0TWVzc2FnZSgpKTsKLQkJCWVsc2UKLQkJCQlzLmFwcGVuZCgoKElNZXNzYWdlKSBzb3J0ZWRbaV0pLmdldFRleHQoKSk7Ci0JCX0KLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEphdmFWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEphdmFWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjA3MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BKYXZhVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHByb3BlcnRpZXMuSlNQRkNvbnRlbnRQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUEphdmFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleC5CdW5kbGVSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci0KLS8qKgotICogVGVzdHMgSlNQIEphdmEgVmFsaWRhdG9yCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gImJ1Z184NzM1MSI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYganNwIGZyYWdtZW50cyBhcmUgdmFsaWRhdGVkIHdoZW4gcHJlZmVyZW5jZSBpcyBzZXQgdG8gdHJ1ZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdGcmFnbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BKYXZhVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcGYiOwotCQloZWxwZXIuc2V0VVJJKGZpbGVQYXRoKTsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCi0JCVN0cmluZyB2YWxpZGF0ZSA9IEpTUEZDb250ZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eShKU1BGQ29udGVudFByb3BlcnRpZXMuVkFMSURBVEVfRlJBR01FTlRTLCBmaWxlLCBmYWxzZSk7Ci0JCUpTUEZDb250ZW50UHJvcGVydGllcy5zZXRQcm9wZXJ0eShKU1BGQ29udGVudFByb3BlcnRpZXMuVkFMSURBVEVfRlJBR01FTlRTLCBmaWxlLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCi0JCWlmICh2YWxpZGF0ZSAhPSBudWxsKSB7Ci0JCQlKU1BGQ29udGVudFByb3BlcnRpZXMuc2V0UHJvcGVydHkoSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmlsZSwgdmFsaWRhdGUpOwotCQl9Ci0JCWFzc2VydFRydWUoImpzcGYgd2FzIG5vdCB2YWxpZGF0ZWQgd2hlbiBpdCBzaG91bGQgaGF2ZSBiZWVuIiwgIXJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBpZiBqc3AgZnJhZ21lbnRzIGFyZSBub3QgdmFsaWRhdGVkIHdoZW4gcHJlZmVyZW5jZSBpcyBzZXQgdG8KLQkgKiBmYWxzZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vVmFsaWRhdGluZ0ZyYWdtZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUFZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvaWhhdmVlcnJvcnMuanNwZiI7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0KLQkJU3RyaW5nIHZhbGlkYXRlID0gSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5KEpTUEZDb250ZW50UHJvcGVydGllcy5WQUxJREFURV9GUkFHTUVOVFMsIGZpbGUsIGZhbHNlKTsKLQkJSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLnNldFByb3BlcnR5KEpTUEZDb250ZW50UHJvcGVydGllcy5WQUxJREFURV9GUkFHTUVOVFMsIGZpbGUsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCi0JCWlmICh2YWxpZGF0ZSAhPSBudWxsKSB7Ci0JCQlKU1BGQ29udGVudFByb3BlcnRpZXMuc2V0UHJvcGVydHkoSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmlsZSwgdmFsaWRhdGUpOwotCQl9Ci0JCWFzc2VydFRydWUoImpzcGYgd2FzIHZhbGlkYXRlZCB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSBiZWVuIiwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL1JlcG9ydGVyRm9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjc2NjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuSU1lc3NhZ2VBY2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBSZXBvcnRlckZvclRlc3QgaW1wbGVtZW50cyBJUmVwb3J0ZXIgewotCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCXB1YmxpYyBSZXBvcnRlckZvclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQlsaXN0LmFkZChtZXNzYWdlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkvKiBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgKi8KLQl9Ci0KLQlwdWJsaWMgSU1lc3NhZ2VBY2Nlc3MgZ2V0TWVzc2FnZUFjY2VzcygpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkgeyAvLyBkbwotCQkvKiBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgKi8KLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbikgewotCQkvKiBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgKi8KLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7Ly8gZG8KLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKSB7Ci0JCXJldHVybiBsaXN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL1ZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWQ3NDUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdGlvbkNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaW1wbGVtZW50cyBJVmFsaWRhdGlvbkNvbnRleHQgewotCXByaXZhdGUgU3RyaW5nW10gZlVSSXMgPSBudWxsOwotCi0JcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpIHsKLQkJU3RyaW5nW10gdXJpcyA9IG51bGw7Ci0JCWlmICh1cmkgIT0gbnVsbCkKLQkJCXVyaXMgPSBuZXcgU3RyaW5nW117dXJpfTsKLQotCQlzZXRVUklzKHVyaXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRVUklzKFN0cmluZ1tdIHVyaXMpIHsKLQkJZlVSSXMgPSB1cmlzOwotCX0KLQotCXB1YmxpYyBTdHJpbmdbXSBnZXRVUklzKCkgewotCQlpZiAoZlVSSXMgIT0gbnVsbCkKLQkJCXJldHVybiBmVVJJczsKLQkJcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0JfQotCi0JcHVibGljIE9iamVjdCBsb2FkTW9kZWwoU3RyaW5nIHN5bWJvbGljTmFtZSkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGxvYWRNb2RlbChTdHJpbmcgc3ltYm9saWNOYW1lLCBPYmplY3RbXSBwYXJtcykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvc291cmNlL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQ3NDEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNzcy5jb3JlLnRlc3RzLnNvdXJjZTsKLQotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLk51bGxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRVNfRElSID0gInNyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfT1BFTiA9ICJNT0RFX09QRU4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfQVBQRU5EID0gIk1PREVfQVBQRU5EIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0lOU0VSVCA9ICJNT0RFX0lOU0VSVCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOy8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcCIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcCIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcCIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlIGZhaWxzIHdpdGggV1RQIDEuNSBSQzIsIGJ1dCwgaWdub3JlIHRoaXMgcmVsZWFzZS4KLQkgKiAKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0OCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDkoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5qc3BmIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JKgotCSovCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW40KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3AiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW41KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3AiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW42KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW43KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW44KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW45KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kOSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjEwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDEwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjExKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDExKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjEyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDEyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwZiIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MTMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3BmIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3AiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDE0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDE0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwOC5qc3AiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxNSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA4LmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwOC5qc3AiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4xNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA4LmpzcGYiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA4LmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDE2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDguanNwZiIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBzZXQgY3NzanNwdGVzdFguanNwKGYpIGZpbGUgYXMgY3NzIGpzcC4KLQkJSUNvbnRlbnRUeXBlIGN0ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0Q29udGVudFR5cGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5jc3Nqc3Bzb3VyY2UiKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QwLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MS5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDIuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QzLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0NC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDUuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q2LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0Ny5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDguanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q5LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTAuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMS5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEyLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTMuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE1LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTYuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNy5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE4LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTkuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QyMC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdCA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldENvbnRlbnRUeXBlKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuY3NzanNwZnJhZ21lbnRzb3VyY2UiKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QwLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0Mi5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QzLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDQuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0NS5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q2LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDcuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0OC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q5LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEwLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDExLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEyLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDEzLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE0LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE1LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE2LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE3LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE4LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE5LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDIwLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCX0KLQotCXN0YXRpYyBpbnQgaW5kZXhfanNwID0gMDsKLQlzdGF0aWMgaW50IGluZGV4X2pzcGYgPSAwOwotCXByaXZhdGUgSUNTU01vZGVsIGNyZWF0ZU1vZGVsKGJvb2xlYW4gaXNGcmFnbWVudCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCW1vZGVsID0gIWlzRnJhZ21lbnQgPyBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJjc3Nqc3B0ZXN0IiArIGluZGV4X2pzcCsrICsgIi5qc3AiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpIDogLy8kTk9OLU5MUy0xJAotCQkJCQkJCQkJbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgiY3NzanNwdGVzdCIgKyBpbmRleF9qc3BmKysgKyAiLmpzcGYiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKGNvbW1vbkVPTCk7Ly8kTk9OLU5MUy0xJAotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCQllLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybiAoSUNTU01vZGVsKSBtb2RlbDsKLQotCX0KLQlwcml2YXRlIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cyIpOyAvLyROT04tTkxTLTEkCi0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCXJldHVybiBmaWxlOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBjcmVhdGVTdHJpbmcoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKSk7Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJU3RyaW5nIGxpbmU7Ci0JCXdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlidWYuYXBwZW5kKGxpbmUpOwotCQkJYnVmLmFwcGVuZChjb21tb25FT0wpOwotCQl9Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNvdXJjZVBhcnNlclRlc3QoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgbW9kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gbnVsbDsKLQkJaWYgKG1vZGUuZXF1YWxzKE1PREVfT1BFTikpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsT3BlbihmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9BUFBFTkQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEFwcGVuZChmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9JTlNFUlQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEluc2VydChmaWxlbmFtZSk7Ci0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IGR1bXBSZWdpb25zKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJY29tcGFyZVJlc3VsdChyZXN1bHQsICJKU1BlZENTU1NvdXJjZVBhcnNlclRlc3QtIiArIGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQljbG9zZU1vZGVsKG1vZGVsKTsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxPcGVuKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gY3JlYXRlTW9kZWwoZmlsZW5hbWUuZW5kc1dpdGgoImpzcGYiKSk7Ly8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZSk7Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUNTU01vZGVsIHJlYWRNb2RlbEFwcGVuZChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBjcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGNyZWF0ZU1vZGVsKGZpbGVuYW1lLmVuZHNXaXRoKCJqc3BmIikpOy8vJE5PTi1OTFMtMSQKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCBpLCAwLCBzb3VyY2Uuc3Vic3RyaW5nKGksIGkgKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsSW5zZXJ0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gY3JlYXRlTW9kZWwoZmlsZW5hbWUuZW5kc1dpdGgoImpzcGYiKSk7Ly8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWludCB0ZXh0SW5kZXggPSBzb3VyY2UubGVuZ3RoKCkgLSBpIC0gMTsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZS5zdWJzdHJpbmcodGV4dEluZGV4LCB0ZXh0SW5kZXggKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsb3NlTW9kZWwoSUNTU01vZGVsIG1vZGVsKSB7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZChkdW1wUmVnaW9ucyhkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKSk7Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl3aGlsZSAocmVnaW9uICE9IG51bGwpewotCQkJYnVmLmFwcGVuZChkdW1wT25lUmVnaW9uKHJlZ2lvbikpOwotCQkJcmVnaW9uID0gcmVnaW9uLmdldE5leHQoKTsKLQkJfQotCi0JCWJ1Zi5hcHBlbmQoY29tbW9uRU9MICsgIi0tLS0tLS0iICsgY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wT25lUmVnaW9uKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCQlidWYuYXBwZW5kKGRvY3VtZW50UmVnaW9uLnRvU3RyaW5nKCkpOwotCQlidWYuYXBwZW5kKGNvbW1vbkVPTCArICIgICAgIik7IC8vJE5PTi1OTFMtMSQKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSXRlcmF0b3IgaSA9IHJlZ2lvbkxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uID0gKElUZXh0UmVnaW9uKSBpLm5leHQoKTsKLQkJCWJ1Zi5hcHBlbmQodGV4dFJlZ2lvbi50b1N0cmluZygpKTsKLQkJCWJ1Zi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlidWYuYXBwZW5kKGNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjb21wYXJlUmVzdWx0KFN0cmluZyBhY3R1YWwsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGNyZWF0ZVN0cmluZyhSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQlhc3NlcnRFcXVhbHMocmVzdWx0LCBhY3R1YWwpOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzRiNzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDE0M10gKDwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzdGwvY29yZV9ydCIgcHJlZml4PSJjLXJ0IiAlPg0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02Ni83MCwgDQotWzE0MywgMTg4XSAoPCVAIGluY2x1ZGUgZmlsZT0iLi9jc3Nqc3BmcmFnbWVudC5qc3BmIiAlPg0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC00My80NSwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhYjRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVswLCA3MF0gKDwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzdGwvY29yZV9ydCIgcHJlZml4PSJjLXJ0IiAlPgotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02Ni83MCwgCi1bNzAsIDExNV0gKDwlQCBpbmNsdWRlIGZpbGU9Ii4vY3NzanNwZnJhZ21lbnQuanNwZiIgJT4KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTQzLzQ1LCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZmNWU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLVswLCA3M10gKDwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02OS83MywgDQotWzczLCA3OV0gKC5ob2dlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC01LzYsIA0KLVs3OSwgODNdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bODMsIDk3XSAoZmxvYXQgOiAke1hYWH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA4LTE0LCANCi1bOTcsIDk4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzk4LCAxMDFdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEwMSwgMTIwXSAoYm9yZGVyLSR7WFhYfS1jb2xvcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IEZPUkVJR05fRUxFTUVOVDogNy0xMywgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiAxMy0xOSwgDQotWzEyMCwgMTI2XSAoIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEtMi8zLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzLTYsIA0KLVsxMjYsIDEyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjcsIDEyOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjksIDEzMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzAsIDEzMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNGE2ZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotWzAsIDRdICgKLQotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCAKLVs0LCAxMF0gKC5ob2dlICkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTUvNiwgCi1bMTAsIDE0XSAoewotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIAotWzE0LCAyOF0gKGZsb2F0IDogJHtYWFh9KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA4LTE0LCAKLVsyOCwgMjldICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzI5LCAzMl0gKAotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgCi1bMzIsIDUxXSAoYm9yZGVyLSR7WFhYfS1jb2xvcikKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA3LTEzLCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDEzLTE5LCAKLVs1MSwgNTddICggOiByZWQpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxLTIvMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMy02LCAKLVs1NywgNThdICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzU4LCA2MF0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLVs2MCwgNjFdICh9KQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIAotWzYxLCA2M10gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2YWFhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVswLCA3M10gKDwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02OS83MywgDQotWzczLCA3OV0gKC5ob2dlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC01LzYsIA0KLVs3OSwgODNdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bODMsIDk3XSAoY29sb3IgOiAke1hYWH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA4LTE0LCANCi1bOTcsIDk4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzk4LCAxMDFdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEwMSwgMTI2XSAoYm9yZGVyLWNvbG9yIDogPCU9IFlZWSAlPikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRVhQOiAxNS0yNSwgDQotWzEyNiwgMTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyNywgMTI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyOSwgMTMwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzMCwgMTMyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliNjQ4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1bMCwgNF0gKAotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIAotWzQsIDEwXSAoLmhvZ2UgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtNS82LCAKLVsxMCwgMTRdICh7Ci0JKQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgCi1bMTQsIDI4XSAoY29sb3IgOiAke1hYWH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDgtMTQsIAotWzI4LCAyOV0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bMjksIDMyXSAoCi0JKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCAKLVszMiwgNTddIChib3JkZXItY29sb3IgOiA8JT0gWVlZICU+KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMy0xNC8xNSwgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0VYUDogMTUtMjUsIAotWzU3LCA1OF0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bNTgsIDYwXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotWzYwLCA2MV0gKH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgCi1bNjEsIDYzXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjc2MGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDc5XSAoLnB1Z2UgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTUvNiwgDQotWzc5LCA4M10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs4MywgODldICgke1hYWH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiAwLTYsIA0KLVs4OSwgOTBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTAsIDkzXSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVs5MywgMTExXSAoYm9yZGVyLWNvbG9yIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE4LCANCi1bMTExLCAxMTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTEyLCAxMTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0LCAxMTVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE1LCAxMTddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQwNTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVswLCA2XSAoLnB1Z2UgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtNS82LCAKLVs2LCAxMF0gKHsKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCAKLVsxMCwgMTZdICgke1hYWH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDAtNiwgCi1bMTYsIDE3XSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVsxNywgMjBdICgKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIAotWzIwLCAzOF0gKGJvcmRlci1jb2xvciA6IHJlZCkKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE4LCAKLVszOCwgMzldICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzM5LCA0MV0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLVs0MSwgNDJdICh9KQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIAotWzQyLCA0NF0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkOTk5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVswLCA3MV0gKDwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02OS83MSwgDQotWzcxLCAxMDBdICg8JS0tIA0KLWpzcCANCi1jb21tZW50IA0KLS0tJT4NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMC0yNy8yOSwgDQotWzEwMCwgMTAzXSAoSDEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVsxMDMsIDEwN10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVsxMDcsIDEzMF0gKGJhY2tncm91bmQtY29sb3IgOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE5LTIzLCANCi1bMTMwLCAxMzFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTMxLCAxMzNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTMzLCAxMzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTM0LCAxMzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2ZmZjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVswLCAzMV0gKAotPCUtLSAKLWpzcCAKLWNvbW1lbnQgCi0tLSU+Ci0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMi0yOS8zMSwgCi1bMzEsIDM0XSAoSDEgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgCi1bMzQsIDM4XSAoewotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIAotWzM4LCA2MV0gKGJhY2tncm91bmQtY29sb3IgOiBibHVlKQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTktMjMsIAotWzYxLCA2Ml0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bNjIsIDY0XSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotWzY0LCA2NV0gKH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgCi1bNjUsIDY3XSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2FjN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDc2XSAoSDEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVs3NiwgODBdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bODAsIDExMV0gKGJvcmRlci0ke1hYWH0gOiAwcHgsIHNvbGlkLCByZWQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNywgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDctMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyOC0zMSwgDQotWzExMSwgMTEyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzExMiwgMTE0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNCwgMTE1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExNSwgMTE3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcxZDcxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA2LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1bMCwgNF0gKAotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIAotWzQsIDddIChIMSApCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCAKLVs3LCAxMV0gKHsKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCAKLVsxMSwgNDJdIChib3JkZXItJHtYWFh9IDogMHB4LCBzb2xpZCwgcmVkKQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNywgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDctMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyOC0zMSwgCi1bNDIsIDQzXSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVs0MywgNDVdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi1bNDUsIDQ2XSAofSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCAKLVs0NiwgNDhdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjc4ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNWYyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwOC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwOWIxMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwOC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1bMCwgNzFdICg8JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzcxLCAKLVs3MSwgMTM0XSAoPCUgcGFnZUNvbnRleHQuZ2V0UmVxdWVzdCgpLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOyAlPgotKQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9TQ1JJUFRMRVQ6IDAtNjEvNjMsIAotWzEzNCwgMTcxXSAoPCVAIGluY2x1ZGUgZmlsZT0iLi9zdHlsZXMuanNwZiIgJT4KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTM1LzM3LCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwOC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwOC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGI1ODRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDguanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWzAsIDYzXSAoPCUgcGFnZUNvbnRleHQuZ2V0UmVxdWVzdCgpLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOyAlPgotKQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9TQ1JJUFRMRVQ6IDAtNjEvNjMsIAotWzYzLCAxMDBdICg8JUAgaW5jbHVkZSBmaWxlPSIuL3N0eWxlcy5qc3BmIiAlPgotKQotICAgIENvbnRleHRSZWdpb24tLT4gQ1NTX0pTUF9ESVJFQ1RJVkU6IDAtMzUvMzcsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTcyM2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi0NCi08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc3RsL2NvcmVfcnQiIHByZWZpeD0iYy1ydCIgJT4NCi0NCi08JUAgaW5jbHVkZSBmaWxlPSIuL2Nzc2pzcGZyYWdtZW50LmpzcGYiICU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODZhZWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanN0bC9jb3JlX3J0IiBwcmVmaXg9ImMtcnQiICU+Ci0KLTwlQCBpbmNsdWRlIGZpbGU9Ii4vY3NzanNwZnJhZ21lbnQuanNwZiIgJT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMGQ1YjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLS5ob2dlIHsNCi0JZmxvYXQgOiAke1hYWH07DQotCWJvcmRlci0ke1hYWH0tY29sb3IgOiByZWQ7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM4YWQ5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotCi0uaG9nZSB7Ci0JZmxvYXQgOiAke1hYWH07Ci0JYm9yZGVyLSR7WFhYfS1jb2xvciA6IHJlZDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZGRiOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLS5ob2dlIHsNCi0JY29sb3IgOiAke1hYWH07DQotCWJvcmRlci1jb2xvciA6IDwlPSBZWVkgJT47DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2MzgzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotCi0uaG9nZSB7Ci0JY29sb3IgOiAke1hYWH07Ci0JYm9yZGVyLWNvbG9yIDogPCU9IFlZWSAlPjsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NzA5YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLS5wdWdlIHsNCi0JJHtYWFh9Ow0KLQlib3JkZXItY29sb3IgOiByZWQ7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwM2Q1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLS5wdWdlIHsKLQkke1hYWH07Ci0JYm9yZGVyLWNvbG9yIDogcmVkOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzOWU1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotPCUtLSANCi1qc3AgDQotY29tbWVudCANCi0tLSU+DQotSDEgew0KLQliYWNrZ3JvdW5kLWNvbG9yIDogYmx1ZTsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOThhMjUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotCi08JS0tIAotanNwIAotY29tbWVudCAKLS0tJT4KLUgxIHsKLQliYWNrZ3JvdW5kLWNvbG9yIDogYmx1ZTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYjM0NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLUgxIHsNCi0JYm9yZGVyLSR7WFhYfSA6IDBweCwgc29saWQsIHJlZDsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE2Y2U1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotCi0KLUgxIHsKLQlib3JkZXItJHtYWFh9IDogMHB4LCBzb2xpZCwgcmVkOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmpzcAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5qc3BmCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYWY2MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPgotPCUgcGFnZUNvbnRleHQuZ2V0UmVxdWVzdCgpLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOyAlPgotPCVAIGluY2x1ZGUgZmlsZT0iLi9zdHlsZXMuanNwZiIgJT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDguanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDguanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiYWRjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA4LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTwlIHBhZ2VDb250ZXh0LmdldFJlcXVlc3QoKS5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsgJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii4vc3R5bGVzLmpzcGYiICU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YzQzMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuSlNQQ29yZVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvMTE2MDY2L3RhZ2RlcC50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzLzExNjA2Ni90YWdkZXAudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRkNjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvMTE2MDY2L3RhZ2RlcC50bGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uID0gIjEuMCIgPz4KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGliXzFfMi5kdGQiPgotPHRhZ2xpYj4KLQk8dGxpYi12ZXJzaW9uPjEuMTwvdGxpYi12ZXJzaW9uPgotCTxqc3AtdmVyc2lvbj4xLjE8L2pzcC12ZXJzaW9uPgotCTx1cmk+dGFnZGVwZW5kZW50PC91cmk+Ci0JPHNob3J0LW5hbWU+dGFnZGVwZW5kZW50PC9zaG9ydC1uYW1lPgotCTxkZXNjcmlwdGlvbj4KLQkJVGhpcyB0YWcgbGlicmFyeSBkZW1vbnN0cmF0ZXMgdGFnZGVwZW5kZW50IHRhZyBoYW5kbGluZwotCQl1c2luZyBpdHMgImNvZGUiIHRhZy4KLQk8L2Rlc2NyaXB0aW9uPgotCTx0YWc+Ci0JCTxuYW1lPmNvZGU8L25hbWU+Ci0JCTx0YWctY2xhc3M+Y29tLmV4YW1wbGUudGFnZGVwLkNvZGVUYWc8L3RhZy1jbGFzcz4KLQkJPGJvZHktY29udGVudD50YWdkZXBlbmRlbnQ8L2JvZHktY29udGVudD4KLQkJPGF0dHJpYnV0ZT4KLQkJCTxuYW1lPmZvbnROYW1lPC9uYW1lPgotCQkJPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotCQkJPHR5cGU+amF2YS5sYW5nLlN0cmluZzwvdHlwZT4KLQkJPC9hdHRyaWJ1dGU+Ci0JCTxhdHRyaWJ1dGU+Ci0JCQk8bmFtZT5ib2xkPC9uYW1lPgotCQkJPHR5cGU+Ym9vbGVhbjwvdHlwZT4KLQkJPC9hdHRyaWJ1dGU+Ci0JCTxhdHRyaWJ1dGU+Ci0JCQk8bmFtZT5pdGFsaWM8L25hbWU+Ci0JCQk8dHlwZT5ib29sZWFuPC90eXBlPgotCQk8L2F0dHJpYnV0ZT4KLQk8L3RhZz4KLQk8c21hbGwtaWNvbj5icm93c2VyX2VkaXRvci5naWY8L3NtYWxsLWljb24+Ci08L3RhZ2xpYj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdC9UZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL0pTUFRyYW5zbGF0b3JQZXJzaXN0ZW5jZVRlc3QvVGVzdDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2ZmZGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvSlNQVHJhbnNsYXRvclBlcnNpc3RlbmNlVGVzdC9UZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/Pg0KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPg0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotPGhlYWQ+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4NCi08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08JQ0KLVN0cmluZyB0ZXN0ID0gImhlbGxvIjsNCi10ZXN0LnRvU3RyaW5nKCk7DQotJT4NCi0NCi08L2JvZHk+DQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YTM1NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5iYXRjaHZhbGlkYXRpb248L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NTdlZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPmJhdGNodmFsaWRhdGlvbjwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9XZWJDb250ZW50L2hlYWRlci5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9oZWFkZXIuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiNzIzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9XZWJDb250ZW50L2hlYWRlci5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJmIiAlPg0KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIiBwcmVmaXg9ImgiICU+DQotDQotPCU9IGkgJT4NCi0gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9paGF2ZWVycm9ycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiNWI1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlIGkgYW0gYnJva2VuICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9paGF2ZWVycm9yczIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vV2ViQ29udGVudC9paGF2ZWVycm9yczIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmFmY2QxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL1dlYkNvbnRlbnQvaWhhdmVlcnJvcnMyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlIGkgYW0gaHVuZ3J5ICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9iYXRjaHZhbGlkYXRpb24vYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2JhdGNodmFsaWRhdGlvbi9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYmF0Y2h2YWxpZGF0aW9uL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWFlYzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIvb3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldC9Ub21jYXQgNS41LjkiLz4KLQk8Y2xhc3NwYXRoZW50cnkgZXhwb3J0ZWQ9InRydWUiIGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwubW9kdWxlLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDM0MWY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdC1qYXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLkphdmFFTUZOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY3Nzk2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUdWUgQXByIDI0IDExOjE2OjI2IEJTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjYKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS42Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJiOWQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgotICAgIDx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9InRlc3QtamFyIj4KLSAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL3NyYyIvPgotPHByb3BlcnR5IG5hbWU9ImVhcl9saWJyYXJpZXNfcHJvY2Vzc2VkIiB2YWx1ZT0idHJ1ZSIvPgotICAgIDwvd2ItbW9kdWxlPgotPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1MzRhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZhY2V0ZWQtcHJvamVjdD4KLSAgPGZpeGVkIGZhY2V0PSJqc3QudXRpbGl0eSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC5qYXZhIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXZhIiB2ZXJzaW9uPSI2LjAiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LnV0aWxpdHkiIHZlcnNpb249IjEuMCIvPgotPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci9iaW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci9iaW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvYmluL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci9iaW4vTUVUQS1JTkYvdGFnbGliLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyL2Jpbi9NRVRBLUlORi90YWdsaWIudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjNhODJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyL2Jpbi9NRVRBLUlORi90YWdsaWIudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMi8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIj4KLQotPHRhZ2xpYj4KLQk8dGxpYi12ZXJzaW9uPjEuMDwvdGxpYi12ZXJzaW9uPgotCTxqc3AtdmVyc2lvbj4xLjI8L2pzcC12ZXJzaW9uPgotCTxzaG9ydC1uYW1lPnRlc3Q8L3Nob3J0LW5hbWU+Ci0JPHVyaT5odHRwOi8vZm9vLmNvbS90ZXN0dGFnczwvdXJpPgotCTxkZXNjcmlwdGlvbj5UZXN0IFRhZyBMaWJyYXJ5PC9kZXNjcmlwdGlvbj4KLQotCi0JPHRhZz4KLQkJPG5hbWU+dGVzdDwvbmFtZT4KLQkJPHRhZy1jbGFzcz5jb20uZm9vLlRlc3RUYWc8L3RhZy1jbGFzcz4KLQkJPGJvZHktY29udGVudD5lbXB0eTwvYm9keS1jb250ZW50PgotCQk8ZGVzY3JpcHRpb24+Ci0JCQl0ZXN0Ci0JCTwvZGVzY3JpcHRpb24+Ci0JPC90YWc+Ci0JCi08L3RhZ2xpYj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvYmluL2NvbS9mb28vVGVzdFRhZy5jbGFzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyL2Jpbi9jb20vZm9vL1Rlc3RUYWcuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZjlkODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvYmluL2NvbS9mb28vVGVzdFRhZy5jbGFzcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLcr+ur4/Pz8yPywHPwIBPw9jb20vZm9vL1Rlc3RUYWcHPwQBPyNqYXZheC9zZXJ2bGV0L2pzcC90YWdleHQvVGFnU3VwcG9ydAE/Bjxpbml0PgE/AygpVgE/BENvZGUNCi0/Az8JDD8FPwYBPw9MaW5lTnVtYmVyVGFibGUBPxJMb2NhbFZhcmlhYmxlVGFibGUBPwR0aGlzAT8RTGNvbS9mb28vVGVzdFRhZzsBPw0KLWRvU3RhcnRUYWcBPwMoKUkBPw0KLUV4Y2VwdGlvbnMHPxIBPx5qYXZheC9zZXJ2bGV0L2pzcC9Kc3BFeGNlcHRpb24JPwE/FAw/FT8WAT8LcGFnZUNvbnRleHQBPx9MamF2YXgvc2VydmxldC9qc3AvUGFnZUNvbnRleHQ7DQotPxg/Ggc/GQE/HWphdmF4L3NlcnZsZXQvanNwL1BhZ2VDb250ZXh0DD8bPxwBPwZnZXRPdXQBPx8oKUxqYXZheC9zZXJ2bGV0L2pzcC9Kc3BXcml0ZXI7CD8eAT8NCi1UQUcgV09SS0VEDQotPyA/Igc/IQE/G2phdmF4L3NlcnZsZXQvanNwL0pzcFdyaXRlcgw/Iz8kAT8Fd3JpdGUBPxUoTGphdmEvbGFuZy9TdHJpbmc7KVYNCi0/Az8mDD8OPw8HPygBPxNqYXZhL2xhbmcvRXhjZXB0aW9uAT8NCi1TdGFja01hcFRhYmxlAT8NCi1Tb3VyY2VGaWxlAT8MVGVzdFRhZy5qYXZhPyE/AT8DPz8/Pz8CPwE/BT8GPwE/Bz8/Py8/AT8BPz8/BSq3PwixPz8/Aj8NCi0/Pz8GPwE/Pz8GPws/Pz8MPwE/Pz8FPww/DQotPz8/AT8OPw8/Aj8QPz8/BD8BPxE/Bz8/P1w/Aj8CPz8/FSq0PxO2PxcSHbY/H6c/BEwqtz8lrD8BPz8/DD8PPyc/Az8NCi0/Pz8OPwM/Pz8NCi0/Dz8LPxA/Dj8LPz8/DD8BPz8/FT8MPw0KLT8/Pyk/Pz8HPwJPBz8nPz8BPyo/Pz8CPysNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci9zcmMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci9zcmMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvc3JjL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LWphci9zcmMvTUVUQS1JTkYvdGFnbGliLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyL3NyYy9NRVRBLUlORi90YWdsaWIudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjNhODJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyL3NyYy9NRVRBLUlORi90YWdsaWIudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMi8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2R0ZC93ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIj4KLQotPHRhZ2xpYj4KLQk8dGxpYi12ZXJzaW9uPjEuMDwvdGxpYi12ZXJzaW9uPgotCTxqc3AtdmVyc2lvbj4xLjI8L2pzcC12ZXJzaW9uPgotCTxzaG9ydC1uYW1lPnRlc3Q8L3Nob3J0LW5hbWU+Ci0JPHVyaT5odHRwOi8vZm9vLmNvbS90ZXN0dGFnczwvdXJpPgotCTxkZXNjcmlwdGlvbj5UZXN0IFRhZyBMaWJyYXJ5PC9kZXNjcmlwdGlvbj4KLQotCi0JPHRhZz4KLQkJPG5hbWU+dGVzdDwvbmFtZT4KLQkJPHRhZy1jbGFzcz5jb20uZm9vLlRlc3RUYWc8L3RhZy1jbGFzcz4KLQkJPGJvZHktY29udGVudD5lbXB0eTwvYm9keS1jb250ZW50PgotCQk8ZGVzY3JpcHRpb24+Ci0JCQl0ZXN0Ci0JCTwvZGVzY3JpcHRpb24+Ci0JPC90YWc+Ci0JCi08L3RhZ2xpYj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvc3JjL2NvbS9mb28vVGVzdFRhZy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC1qYXIvc3JjL2NvbS9mb28vVGVzdFRhZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTE4ODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3QtamFyL3NyYy9jb20vZm9vL1Rlc3RUYWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXBhY2thZ2UgY29tLmZvbzsKLQotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLkpzcEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuVGFnU3VwcG9ydDsKLQotcHVibGljIGNsYXNzIFRlc3RUYWcgZXh0ZW5kcyBUYWdTdXBwb3J0IHsKLQotCXB1YmxpYyBpbnQgZG9TdGFydFRhZygpIHRocm93cyBKc3BFeGNlcHRpb24gewotCQl0cnkgewotCQlwYWdlQ29udGV4dC5nZXRPdXQoKS53cml0ZSgiVEFHIFdPUktFRCIpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCi0JCX0KLQkJcmV0dXJuIHN1cGVyLmRvU3RhcnRUYWcoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGIzNmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy9tYWluL2phdmEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2ViLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBleHBvcnRlZD0idHJ1ZSIga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5tb2R1bGUuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYnVpbGQvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjU5NDE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdC13YXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQkJPHByb2plY3Q+dGVzdC1qYXI8L3Byb2plY3Q+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZjJiMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jVHVlIEFwciAyNCAxMTowODo0MCBCU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS42CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZGIzOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jVHVlIEFwciAyNCAxMTowODo0NiBCU1QgMjAwNwotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVJcOlw6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlXDpcOmpkazEuNi4wXzAxL293bmVycz1qc3QuamF2YVw6Ni4wCi1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXJcOlw6b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldFw6XDpBcGFjaGVcIFRvbWNhdFwgdjQuMS9vd25lcnM9anN0LndlYlw6Mi4zCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzFkYTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgotICAgIDx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9InRlc3Qtd2FyIj4KLSAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL3NyYy9tYWluL3dlYmFwcCIvPgotICAgICAgICA8d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii9XRUItSU5GL2NsYXNzZXMiIHNvdXJjZS1wYXRoPSIvc3JjL21haW4vamF2YSIvPgotICAgICAgICA8ZGVwZW5kZW50LW1vZHVsZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvbGliIiBoYW5kbGU9Im1vZHVsZTovcmVzb3VyY2UvdGVzdC1qYXIvdGVzdC1qYXIiPgotICAgICAgICAgICAgPGRlcGVuZGVuY3ktdHlwZT51c2VzPC9kZXBlbmRlbmN5LXR5cGU+Ci0gICAgICAgIDwvZGVwZW5kZW50LW1vZHVsZT4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbnRleHQtcm9vdCIgdmFsdWU9InRlc3Qtd2FyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhLW91dHB1dC1wYXRoIiB2YWx1ZT0iYnVpbGQvY2xhc3NlcyIvPgotPHByb3BlcnR5IG5hbWU9IndlYl9hcHBfbGlicmFyaWVzX3Byb2Nlc3NlZCIgdmFsdWU9InRydWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJlYXJfbGlicmFyaWVzX3Byb2Nlc3NlZCIgdmFsdWU9InRydWUiLz4KLSAgICA8L3diLW1vZHVsZT4KLTwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkM2IwODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmYWNldGVkLXByb2plY3Q+Ci0gIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjQuMSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC5qYXZhIi8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LndlYiIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3QuamF2YSIgdmVyc2lvbj0iNi4wIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuMyIvPgotPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjZWEzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzE4Mzc1Ni90ZXN0LXdhci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSB3ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjMvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9kdGQvd2ViLWFwcF8yXzMuZHRkIj4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiPgotCTxkaXNwbGF5LW5hbWU+dGVzdC13YXI8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvc3JjL21haW4vd2ViYXBwL3Rlc3QuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcxODM3NTYvdGVzdC13YXIvc3JjL21haW4vd2ViYXBwL3Rlc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2Y5NDM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMTgzNzU2L3Rlc3Qtd2FyL3NyYy9tYWluL3dlYmFwcC90ZXN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9mb28uY29tL3Rlc3R0YWdzIiBwcmVmaXg9InRlc3QiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+VGVzdDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLUJlZm9yZSBUYWcKLTx0ZXN0OnRlc3QvPgotQWZ0ZXIgVGFnCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzI0MzI0My9jc3MuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcyNDMyNDMvY3NzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI4OWNlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzI0MzI0My9jc3MuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvY3NzIiBwYWdlRW5jb2Rpbmc9IlVURi04IiU+Ci0KLUxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiBWaXZhbXVzIGFjIG5pYmguIFNlZCBpYWN1bGlzLCBwdXJ1cyBhYyBjb21tb2RvIGF1Y3RvciwgbWkgdGVsbHVzIHZ1bHB1dGF0ZSB0ZWxsdXMsIGluIG1vbGxpcyBuaXNpIHR1cnBpcyBuZWMgZWxpdC4gRXRpYW0gYmxhbmRpdCBwdWx2aW5hciBsZW8uIEluIHRyaXN0aXF1ZSBwb3J0dGl0b3IganVzdG8uIEFsaXF1YW0gdGVtcHVzIHBoYXJldHJhIHR1cnBpcy4gTWF1cmlzIGNvbnNlcXVhdCBuaXNpIHZpdGFlIG51bmMuIE51bmMgc2l0IGFtZXQganVzdG8uIFZlc3RpYnVsdW0gYSBsZW8uIEFlbmVhbiBub24gcmlzdXMuIE51bGxhIHZlc3RpYnVsdW0gdGVsbHVzLiAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMjQzMjQzL2RlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcyNDMyNDMvZGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMmRhYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcyNDMyNDMvZGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwlQCBwYWdlICAlPgotCi1Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBhYyBuaWJoLiBTZWQgaWFjdWxpcywgcHVydXMgYWMgY29tbW9kbyBhdWN0b3IsIG1pIHRlbGx1cyB2dWxwdXRhdGUgdGVsbHVzLCBpbiBtb2xsaXMgbmlzaSB0dXJwaXMgbmVjIGVsaXQuIEV0aWFtIGJsYW5kaXQgcHVsdmluYXIgbGVvLiBJbiB0cmlzdGlxdWUgcG9ydHRpdG9yIGp1c3RvLiBBbGlxdWFtIHRlbXB1cyBwaGFyZXRyYSB0dXJwaXMuIE1hdXJpcyBjb25zZXF1YXQgbmlzaSB2aXRhZSBudW5jLiBOdW5jIHNpdCBhbWV0IGp1c3RvLiBWZXN0aWJ1bHVtIGEgbGVvLiBBZW5lYW4gbm9uIHJpc3VzLiBOdWxsYSB2ZXN0aWJ1bHVtIHRlbGx1cy4gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzI0MzI0My9odG1sLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMjQzMjQzL2h0bWwuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTJlYmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMjQzMjQzL2h0bWwuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YXNjcmlwdCIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci0KLUxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiBWaXZhbXVzIGFjIG5pYmguIFNlZCBpYWN1bGlzLCBwdXJ1cyBhYyBjb21tb2RvIGF1Y3RvciwgbWkgdGVsbHVzIHZ1bHB1dGF0ZSB0ZWxsdXMsIGluIG1vbGxpcyBuaXNpIHR1cnBpcyBuZWMgZWxpdC4gRXRpYW0gYmxhbmRpdCBwdWx2aW5hciBsZW8uIEluIHRyaXN0aXF1ZSBwb3J0dGl0b3IganVzdG8uIEFsaXF1YW0gdGVtcHVzIHBoYXJldHJhIHR1cnBpcy4gTWF1cmlzIGNvbnNlcXVhdCBuaXNpIHZpdGFlIG51bmMuIE51bmMgc2l0IGFtZXQganVzdG8uIFZlc3RpYnVsdW0gYSBsZW8uIEFlbmVhbiBub24gcmlzdXMuIE51bGxhIHZlc3RpYnVsdW0gdGVsbHVzLiAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMjQzMjQzL25vZGlyZWN0aXZlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMjQzMjQzL25vZGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyYjM1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzI0MzI0My9ub2RpcmVjdGl2ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQotTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIFZpdmFtdXMgYWMgbmliaC4gU2VkIGlhY3VsaXMsIHB1cnVzIGFjIGNvbW1vZG8gYXVjdG9yLCBtaSB0ZWxsdXMgdnVscHV0YXRlIHRlbGx1cywgaW4gbW9sbGlzIG5pc2kgdHVycGlzIG5lYyBlbGl0LiBFdGlhbSBibGFuZGl0IHB1bHZpbmFyIGxlby4gSW4gdHJpc3RpcXVlIHBvcnR0aXRvciBqdXN0by4gQWxpcXVhbSB0ZW1wdXMgcGhhcmV0cmEgdHVycGlzLiBNYXVyaXMgY29uc2VxdWF0IG5pc2kgdml0YWUgbnVuYy4gTnVuYyBzaXQgYW1ldCBqdXN0by4gVmVzdGlidWx1bSBhIGxlby4gQWVuZWFuIG5vbiByaXN1cy4gTnVsbGEgdmVzdGlidWx1bSB0ZWxsdXMuIApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcyNDMyNDMvcmRmLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnMjQzMjQzL3JkZi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwYzc3MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcyNDMyNDMvcmRmLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi9yZGYreG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLQotICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBhYyBuaWJoLiBTZWQgaWFjdWxpcywgcHVydXMgYWMgY29tbW9kbyBhdWN0b3IsIG1pIHRlbGx1cyB2dWxwdXRhdGUgdGVsbHVzLCBpbiBtb2xsaXMgbmlzaSB0dXJwaXMgbmVjIGVsaXQuIEV0aWFtIGJsYW5kaXQgcHVsdmluYXIgbGVvLiBJbiB0cmlzdGlxdWUgcG9ydHRpdG9yIGp1c3RvLiBBbGlxdWFtIHRlbXB1cyBwaGFyZXRyYSB0dXJwaXMuIE1hdXJpcyBjb25zZXF1YXQgbmlzaSB2aXRhZSBudW5jLiBOdW5jIHNpdCBhbWV0IGp1c3RvLiBWZXN0aWJ1bHVtIGEgbGVvLiBBZW5lYW4gbm9uIHJpc3VzLiBOdWxsYSB2ZXN0aWJ1bHVtIHRlbGx1cy4gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzI0MzI0My94bWwuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWcyNDMyNDMveG1sLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhMmRmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1ZzI0MzI0My94bWwuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLQotICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBhYyBuaWJoLiBTZWQgaWFjdWxpcywgcHVydXMgYWMgY29tbW9kbyBhdWN0b3IsIG1pIHRlbGx1cyB2dWxwdXRhdGUgdGVsbHVzLCBpbiBtb2xsaXMgbmlzaSB0dXJwaXMgbmVjIGVsaXQuIEV0aWFtIGJsYW5kaXQgcHVsdmluYXIgbGVvLiBJbiB0cmlzdGlxdWUgcG9ydHRpdG9yIGp1c3RvLiBBbGlxdWFtIHRlbXB1cyBwaGFyZXRyYSB0dXJwaXMuIE1hdXJpcyBjb25zZXF1YXQgbmlzaSB2aXRhZSBudW5jLiBOdW5jIHNpdCBhbWV0IGp1c3RvLiBWZXN0aWJ1bHVtIGEgbGVvLiBBZW5lYW4gbm9uIHJpc3VzLiBOdWxsYSB2ZXN0aWJ1bHVtIHRlbGx1cy4gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzU2MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzEwNzMzODwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDMxOTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+MTA3MzM4PC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L3Rlc3QxMDczMzguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvdGVzdDEwNzMzOC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGY1ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvdGVzdDEwNzMzOC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxzY3JpcHQ+Ci08JQotICBpbnQgaSA9IDA7Ci0lPjwlPWklPjwlCi0gCi0lPgotPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDBlMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9saWIvc3RydXRzLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvamRrMS41LjBfMDgiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzBkZmU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z18xMDk3MjE8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLkphdmFFTUZOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDk3MjEvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDkwNmEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JVGFnVGVzdDwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPGpzcC1jb25maWc+Ci0JCTxqc3AtcHJvcGVydHktZ3JvdXA+Ci0JCQk8dXJsLXBhdHRlcm4+Ki5qc3A8L3VybC1wYXR0ZXJuPgotCQkJPGluY2x1ZGUtcHJlbHVkZT4vaGVhZGVyLmpzcGY8L2luY2x1ZGUtcHJlbHVkZT4KLQkJPC9qc3AtcHJvcGVydHktZ3JvdXA+PC9qc3AtY29uZmlnPgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA5NzIxL1dlYkNvbnRlbnQvaGVhZGVyLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDk3MjEvV2ViQ29udGVudC9oZWFkZXIuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMmY1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDk3MjEvV2ViQ29udGVudC9oZWFkZXIuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHRhZ2xpYiBwcmVmaXg9ImxvZ2ljIiB1cmk9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc3RydXRzL3RhZ3MtbG9naWMiJT4NCi08JSEgaW50IGFscGhhID0gNTsgJT4NCi08JUAgdGFnbGliIHByZWZpeD0iYmVhbiIgdXJpPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3N0cnV0cy90YWdzLWJlYW4iJT4NCi0NCi08JSAgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDk3MjEvV2ViQ29udGVudC9tYWluLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS9XZWJDb250ZW50L21haW4uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDA5NGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwOTcyMS9XZWJDb250ZW50L21haW4uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCEtLSBub3RlOiB0aGUgZGlyZWN0aXZlIGZvciBiZWFuIGV4aXN0cyBpbiBoZWFkZXIuanNwZiBhcyBzcGVjaWZpZWQgaW4gdGhlIHdlYi54bWwgZmlsZSAtLT4KLTxiZWFuOmRlZmluZSBpZD0iZm9vIiA+PC9iZWFuOmRlZmluZT4KLTwlPWFscGhhJT4NCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjM2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTA4ZGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1lPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvdGxkL2xpYnRhZ3MudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9saWJ0YWdzLnRsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJhYmU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvdGxkL2xpYnRhZ3MudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIj4KLTx0YWdsaWI+Ci0JPHRsaWJ2ZXJzaW9uPjEuMjwvdGxpYnZlcnNpb24+Ci0JPGpzcHZlcnNpb24+MS4xPC9qc3B2ZXJzaW9uPgotCTxzaG9ydG5hbWU+bGlidGFnczwvc2hvcnRuYW1lPgotCTx1cmk+aHR0cDovL25vdGhpbmcuY29tL2xpYnRhZ3M8L3VyaT4KLQk8dGFnPgotCQk8bmFtZT5paGF2ZWF0dHJzPC9uYW1lPgotCQk8dGFnY2xhc3M+bm90aGluZy50YWdsaWIuaWhhdmVhdHRyczwvdGFnY2xhc3M+Ci0JCTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+bmFtZTwvbmFtZT4KLQkJCTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci0JCTwvYXR0cmlidXRlPgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+c2NvcGU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotCQk8L2F0dHJpYnV0ZT4KLQk8L3RhZz4KLQk8dGFnPgotCQk8bmFtZT5pcmVxYXR0cnM8L25hbWU+Ci0JCTx0YWdjbGFzcz5ub3RoaW5nLnRhZ2xpYi5pcmVxYXR0cnM8L3RhZ2NsYXNzPgotCQk8Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLQkJPGF0dHJpYnV0ZT4KLQkJCTxuYW1lPm5hbWU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci0JCTwvYXR0cmlidXRlPgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+c2NvcGU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotCQk8L2F0dHJpYnV0ZT4KLQk8L3RhZz4KLQk8dGFnPgotCQk8bmFtZT5lbXB0eW1lPC9uYW1lPgotCQk8dGFnY2xhc3M+bm90aGluZy50YWdsaWIuZW1wdHltZTwvdGFnY2xhc3M+Ci0JCTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotCTwvdGFnPgotPC90YWdsaWI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlYmNjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+dGVzdHZhbGlkYXRlanNwYWN0aW9uczwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L25vcmVxdWlyZWRhdHRyaWJ1dGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9ub3JlcXVpcmVkYXR0cmlidXRlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmNGYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L25vcmVxdWlyZWRhdHRyaWJ1dGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHVyaT0iaHR0cDovL25vdGhpbmcuY29tL2xpYnRhZ3MiIHByZWZpeD0ibGlidGFncyIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGxpYnRhZ3M6aXJlcWF0dHJzPjwvbGlidGFnczppcmVxYXR0cnM+Ci08anNwOmF0dHJpYnV0ZT48L2pzcDphdHRyaWJ1dGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3Rlc3QxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2NvcmUiIHByZWZpeD0iYyIlPgotPCVAdGFnbGliIHByZWZpeD0ic2FtcGxlIiB1cmk9Imh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIiAlPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08c2FtcGxlOmNvZGU+IGFzZGdqYWxza2pnYSAgPDwgPC9zYW1wbGU6Y29kZT4KLQotPGM6b3V0IHZhbHVlPSIiPjwvYzpvdXQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3VuZGVmaW5lZGF0dHJpYnV0ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3VuZGVmaW5lZGF0dHJpYnV0ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZTcyNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC91bmRlZmluZWRhdHRyaWJ1dGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHVyaT0iaHR0cDovL25vdGhpbmcuY29tL2xpYnRhZ3MiIHByZWZpeD0ibGlidGFncyIlPgotPCVAIHBhZ2UgaWRvbnQ9IndvcmsiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08bGlidGFnczplbXB0eW1lIGlkb250PSJ3b3JrIj48L2xpYnRhZ3M6ZW1wdHltZT4KLTxqc3A6Ym9keSBpZG9udD0id29yayI+PC9qc3A6Ym9keT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3dvcmtzZmluZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3dvcmtzZmluZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MTZhZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC93b3Jrc2ZpbmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHVyaT0iaHR0cDovL25vdGhpbmcuY29tL2xpYnRhZ3MiIHByZWZpeD0ibGlidGFncyIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGxpYnRhZ3M6ZW1wdHltZT48L2xpYnRhZ3M6ZW1wdHltZT4KLTxqc3A6YXR0cmlidXRlIG5hbWU9Im5hbWVkIj48L2pzcDphdHRyaWJ1dGU+Ci08bGlidGFnczppcmVxYXR0cnM+PGpzcDphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+PC9qc3A6YXR0cmlidXRlPjwvbGlidGFnczppcmVxYXR0cnM+Ci08bGlidGFnczppcmVxYXR0cnMgbmFtZT0iPCU9ICJuYW1lZCIlPiIgc2NvcGU9IjwlPSAiZXhwcmVzc2lvbiIgJT4iPjwvbGlidGFnczppcmVxYXR0cnM+Ci08bGlidGFnczppaGF2ZWF0dHJzIG5hbWU9ImJvbyI+PC9saWJ0YWdzOmloYXZlYXR0cnM+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTlmMmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU1NTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1mPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QwN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ1ZjVkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJXZWIgQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYiBDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQxYjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjliYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDMwMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGhlIGFjY29tcGFueWluZyBqYXIgY29udGFpbnMgYSBUTEQgd2l0aCBhIFVSSSBzcGVjaWZpZWQgaW4KLWl0IGFzIHdlbGwgYXMgYSBiaWcgbG9uZyBmaWxlIHRoYXQgc2hvdWxkIHNsb3cgZG93biB0aGUKLXRhZ2xpYiBpbmRleGluZy4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYzNiM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3NTYyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTA3MzM4PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZGI3NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4xMjczNzc8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvdGVzdDEyNjM3N19lcnJvci5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvV2ViQ29udGVudC90ZXN0MTI2Mzc3X2Vycm9yLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhNzIxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvV2ViQ29udGVudC90ZXN0MTI2Mzc3X2Vycm9yLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlRlc3Q8L3RpdGxlPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdD4KLTwhLS0KLSAgICAvLyBzb21lIEphdmFTY3JpcHQgaGVyZQotICAgIDwlIGltdHJ1ZSA9IHRydWU7Ci0gICAgICAgLy8gbW9yZSBzY3JpcHRsZXQgaGVyZQotICAgICU+Ci0gICAgLy8gbW9yZSBKYXZhU2NyaXB0IGhlcmUKLS0tPgotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTwhLS0KLTwlCi1ib29sZWFuIGltdHJ1ZTIgPSBpbXRydWU7Ci0lPgotLS0+Ci0KLTwhLS0KLWJlZm9yZSBpZgotPCUgaWYgKGltdHJ1ZTMpIHsgJT4KLWFmdGVyIGlmCi1iZWZvcmUgZWxzZQotPCUgfSBlbHNlIHsgJT4KLWFmdGVyIGVsc2UKLTwlIH0gJT4KLS0tPgotCi0KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvdGVzdDEyNjM3N19ub2Vycm9yLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny9XZWJDb250ZW50L3Rlc3QxMjYzNzdfbm9lcnJvci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZGE2ODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L1dlYkNvbnRlbnQvdGVzdDEyNjM3N19ub2Vycm9yLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlRlc3Q8L3RpdGxlPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdD4KLTwhLS0KLSAgICAvLyBzb21lIEphdmFTY3JpcHQgaGVyZQotICAgIDwlIGJvb2xlYW4gaW10cnVlID0gdHJ1ZTsKLSAgICAgICAvLyBtb3JlIHNjcmlwdGxldCBoZXJlCi0gICAgJT4KLSAgICAvLyBtb3JlIEphdmFTY3JpcHQgaGVyZQotLS0+Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPCEtLQotPCUKLWJvb2xlYW4gaW10cnVlMiA9IGltdHJ1ZTsKLSU+Ci0tLT4KLQotPCEtLQotYmVmb3JlIGlmCi08JSBpZiAoaW10cnVlMikgeyAlPgotYWZ0ZXIgaWYKLWJlZm9yZSBlbHNlCi08JSB9IGVsc2UgeyAlPgotYWZ0ZXIgZWxzZQotPCUgfSAlPgotLS0+Ci0KLQotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTI2Mzc3L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEyNjM3Ny9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMjYzNzcvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyYWU0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYi5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJidWlsZC9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3YmZlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTQ4NzE3PC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4YmM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToxOCBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjMDEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToyNCBFRFQgMjAwNgotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVJcOlw6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlXDpcOjEuNS4wXzAzL293bmVycz1qc3QuamF2YVw6NS4wCi1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXJcOlw6b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldFw6XDpBcGFjaGVcIFRvbWNhdFwgdjUuNS45L293bmVycz1qc3Qud2ViXDoyLjQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZlZDU2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KLTx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9ImJ1Z18xNDg3MTciPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiLz4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvY2xhc3NlcyIgc291cmNlLXBhdGg9Ii9zcmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0LXJvb3QiIHZhbHVlPSJidWdfMTQ4NzE3Ii8+Ci08cHJvcGVydHkgbmFtZT0iamF2YS1vdXRwdXQtcGF0aCIgdmFsdWU9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvd2ItbW9kdWxlPgotPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWFkNmVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZhY2V0ZWQtcHJvamVjdD4KLSAgPHJ1bnRpbWUgbmFtZT0iQXBhY2hlIFRvbWNhdCB2NS41LjkiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3QuamF2YSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LmphdmEiIHZlcnNpb249IjEuNCIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjQiLz4KLTwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvaW50ZXJuYWwuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvaW50ZXJuYWwuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmFkMjdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9XZWJDb250ZW50L1dFQi1JTkYvbGliL2ludGVybmFsLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg1MzY2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9InByajExOTU3Nl9jIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+cHJqMTE5NTc2X2M8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JCTx0YWdsaWItdXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9leHRlcm5hbC11cmk8L3RhZ2xpYi11cmk+Ci0JCTx0YWdsaWItbG9jYXRpb24+L1dFQi1JTkYvbGliL2ludGVybmFsLmphcjwvdGFnbGliLWxvY2F0aW9uPgotCTwvdGFnbGliPgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L2Jpbi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L2Jpbi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9iaW4vLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNTA3OTQvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjM2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNTA3OTQvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzcyMGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE1MDc5NC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z184NzM1MTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNTA3OTQvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNTA3OTQvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmODBhNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT5idWdfODczNTE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0L1dlYkNvbnRlbnQvZXNjYXBlZFF1b3Rlcy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNTA3OTQvV2ViQ29udGVudC9lc2NhcGVkUXVvdGVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNhOTUwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNTA3OTQvV2ViQ29udGVudC9lc2NhcGVkUXVvdGVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IgotICAgIHBhZ2VFbmNvZGluZz0iVVRGLTgiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbnNlcnRpbmcgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlIFN0cmluZyBuYW1lID0gIkpvZSI7ICU+Ci08anNwOnNldFByb3BlcnR5IG5hbWU9InRlc3RCZWFuIiBwcm9wZXJ0eT0ibmFtZSIgdmFsdWU9IjwlPVwiSGVcXFwibGxvIFwiICsgbmFtZSAlPiIvPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0L3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTUwNzk0L3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE1MDc5NC9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjNhYjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJzdHJ1dHMuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiN2EwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTc0MDQyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvYmluLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvYmluLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc0MDQyL2Jpbi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi9pbmNsdWRlbWUuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi9pbmNsdWRlbWUuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzODEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvaW5jbHVkZW1lLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTwlQCB0YWdsaWIgcHJlZml4PSJsb2dpYyIgdXJpPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3N0cnV0cy90YWdzLWxvZ2ljIiU+DQotPCUhIGludCBhbHBoYSA9IDU7ICU+DQotPCVAIHRhZ2xpYiBwcmVmaXg9ImJlYW4iIHVyaT0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1iZWFuIiU+DQotPGJlYW46ZGVmaW5lIGlkPSJpZDMiIHR5cGU9ImNvbS5uaXRpbi5UZXN0QmVhbiI+PC9iZWFuOmRlZmluZT4NCi08JSAgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvbWFpbi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvbWFpbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MzVjODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc0MDQyL21haW4uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlPSJpbmNsdWRlbWUuanNwZiIlPg0KLQk8JT0gaWQzICsgYWxwaGEgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc0MDQyL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi9zcmMvY29tL25pdGluL1Rlc3RCZWFuLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzQwNDIvc3JjL2NvbS9uaXRpbi9UZXN0QmVhbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGE3NTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3NDA0Mi9zcmMvY29tL25pdGluL1Rlc3RCZWFuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIGNvbS5uaXRpbjsKLQotcHVibGljIGNsYXNzIFRlc3RCZWFuIHsKLQotCXB1YmxpYyBUZXN0QmVhbigpIHsKLQl9Ci0JCi0JU3RyaW5nIGR1bW15UHJvcGVydHkgPSBudWxsOwotCi0JcHVibGljIFN0cmluZyBnZXREdW1teVByb3BlcnR5KCkgewotCQlyZXR1cm4gZHVtbXlQcm9wZXJ0eTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREdW1teVByb3BlcnR5KFN0cmluZyBkdW1teVByb3BlcnR5KSB7Ci0JCXRoaXMuZHVtbXlQcm9wZXJ0eSA9IGR1bW15UHJvcGVydHk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjNhYjQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJzdHJ1dHMuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1MDliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTc4NDQzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvYmluLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvYmluLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc4NDQzL2Jpbi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My9pbmNsdWRlbWUuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My9pbmNsdWRlbWUuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MjEyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvaW5jbHVkZW1lLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTwlQCB0YWdsaWIgcHJlZml4PSJsb2dpYyIgdXJpPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3N0cnV0cy90YWdzLWxvZ2ljIiU+DQotPCUhIGludCBhbHBoYSA9IDU7ICU+DQotPCVAIHRhZ2xpYiBwcmVmaXg9ImJlYW4iIHVyaT0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1iZWFuIiU+DQotDQotDQotPGJlYW46ZGVmaW5lIGlkPSJpZDMiIHR5cGU9ImNvbS5uaXRpbi5UZXN0QmVhbiI+PC9iZWFuOmRlZmluZT4NCi08JSAgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvbWFpbi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvbWFpbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGE4YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc4NDQzL21haW4uanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlPSJpbmNsdWRlbWUuanNwZiIlPg0KLTwlICAlPg0KLQ0KLTxiZWFuOmRlZmluZSBpZD0iYmV0YSIvPg0KLSANCi0JPCU9IGFscGhhICsgYmV0YSAlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNzg0NDMvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc4NDQzL3NyYy9jb20vbml0aW4vVGVzdEJlYW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE3ODQ0My9zcmMvY29tL25pdGluL1Rlc3RCZWFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YTc1OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTc4NDQzL3NyYy9jb20vbml0aW4vVGVzdEJlYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2UgY29tLm5pdGluOwotCi1wdWJsaWMgY2xhc3MgVGVzdEJlYW4gewotCi0JcHVibGljIFRlc3RCZWFuKCkgewotCX0KLQkKLQlTdHJpbmcgZHVtbXlQcm9wZXJ0eSA9IG51bGw7Ci0KLQlwdWJsaWMgU3RyaW5nIGdldER1bW15UHJvcGVydHkoKSB7Ci0JCXJldHVybiBkdW1teVByb3BlcnR5OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldER1bW15UHJvcGVydHkoU3RyaW5nIGR1bW15UHJvcGVydHkpIHsKLQkJdGhpcy5kdW1teVByb3BlcnR5ID0gZHVtbXlQcm9wZXJ0eTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE4MTA1Ny8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTgxMDU3Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZDk1OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTgxMDU3Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii9qIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0iL2siLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJzdHJ1dHMuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGNvbWJpbmVhY2Nlc3NydWxlcz0iZmFsc2UiIGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE4MTA1Ny8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE4MTA1Ny8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1MDliZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xODEwNTcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTc4NDQzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xODEwNTcvYmluLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xODEwNTcvYmluLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTgxMDU3L2Jpbi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE4MTA1Ny9tYWluLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE4MTA1Ny9tYWluLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdlZmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xODEwNTcvbWFpbi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTwlQCB0YWdsaWIgcHJlZml4PSJsb2dpYyIgdXJpPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3N0cnV0cy90YWdzLWxvZ2ljIiU+DQotPCUhIGludCBhbHBoYSA9IDU7ICU+DQotPCVAIHRhZ2xpYiBwcmVmaXg9ImJlYW4iIHVyaT0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1iZWFuIiU+DQotPCUgICU+DQotDQotPGJlYW46ZGVmaW5lIGlkPSJiZXRhIi8+DQotIA0KLQk8JT0gYWxwaGEgKyBiZXRhICU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTgxMDU3L3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTgxMDU3L3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE4MTA1Ny9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18yNjUzODAvdGVzdDI2NTM4MC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18yNjUzODAvdGVzdDI2NTM4MC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5Yjc1NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMjY1MzgwL3Rlc3QyNjUzODAuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+DQotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNwL2pzdGwvY29yZSIgcHJlZml4PSJjIiAlPg0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KLTxodG1sPg0KLTxoZWFkPg0KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPg0KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTwvYm9keT4NCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMTAwODUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjM2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMTAwODUvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1Ly5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzc1NjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMxMDA4NS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z18xMDczMzg8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMTAwODUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMTAwODUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDMxOTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMxMDA4NS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+MTA3MzM4PC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMxMDA4NS9XZWJDb250ZW50L3Rlc3QzMTAwODUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1L1dlYkNvbnRlbnQvdGVzdDMxMDA4NS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNTAwN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzEwMDg1L1dlYkNvbnRlbnQvdGVzdDMxMDA4NS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4NCi08aHRtbD4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi08JSBTdHJpbmcgbmFtZTsgJT4JDQotPEEgSFJFRiA9Jzxwb3J0bGV0OmFjdGlvblVSTD48cG9ydGxldDpwYXJhbSBuYW1lPSI8JT1uYW1lJT4iIHZhbHVlPSI8JT1uYW1lJT4iLz48L3BvcnRsZXQ6YWN0aW9uVVJMPic+cmVzZXQ8L0E+DQotDQotPC9ib2R5Pg0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMyNjE5My8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMyNjE5My8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzU2MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzI2MTkzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzEwNzMzODwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMyNjE5My9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzMyNjE5My9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzE5NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzI2MTkzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4xMDczMzg8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzI2MTkzL1dlYkNvbnRlbnQvdGVzdDMyNjE5My5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvV2ViQ29udGVudC90ZXN0MzI2MTkzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmMjQ1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvV2ViQ29udGVudC90ZXN0MzI2MTkzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLQk8aGVhZD4KLQkJCi0JCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJPCEtLQotCQkJCi0JCQkKLQkJCS8qCi0JCQkgKgotCQkJKi8KLQkJCWZ1bmN0aW9uIGludm9rZUF1dG9Bc3NpZ24oKSB7Ci0JCQkKLQkJCQloaWRlQWxsTWVudXMoKTsKLQkJCQlpZihjb25maXJtKCc8c2NoZWR1bGVyOmdldFN0cmluZyBsb2NhbGU9ImxvY2FsZTEiIGtleT0iSU5WT0tFX0FVVE9BU1NJR05fQ09ORklSTV9NU0ciIGFyZ3VtZW50PSI8JT0gNSAlPiIgdmFsPSI2Lz5qIiAvPicpKSB7Ci0JCQkJCWRvY3VtZW50LmZvcm0uPHNjaGVkdWxlcjpnZXRjb25zdGFudCBrZXk9IklEX1BBUkFNIiAvPi52YWx1ZSA9OTsKLQkJCQkJfQotCQkJfQotCi0JCQkKLQkJLy8tLT4KLQkJPC9zY3JpcHQ+Ci0JPC9oZWFkPgotCTxib2R5IG9ubG9hZD0iamF2YXNjcmlwdDppbml0aWFsaXplKCk7IiBjbGFzcz0iPGpzcDpnZXRQcm9wZXJ0eSBuYW1lPSJkYXlDZWxsQmVhbiIgcHJvcGVydHk9ImJvZHlDbGFzcyIgLz4iPgotCQk8ZGl2PjwvZGl2PgotCTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18zMjYxOTMvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMzI2MTkzL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNzIwZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfODczNTE8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmODBhNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPmJ1Z184NzM1MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWZmNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9paGF2ZWVycm9ycy5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCUgU3RyaW5nIHRoaXMgaXMgYnJva2VuICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM4N2M3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPGNsYXNzcGF0aD4NCi0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4NCi0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJ1aWxkL2NsYXNzZXMiLz4NCi08L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE0NjNkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdERlc2NyaXB0aW9uPg0KLQk8bmFtZT5kZWxvczwvbmFtZT4NCi0JPGNvbW1lbnQ+PC9jb21tZW50Pg0KLQk8cHJvamVjdHM+DQotCTwvcHJvamVjdHM+DQotCTxidWlsZFNwZWM+DQotCQk8YnVpbGRDb21tYW5kPg0KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuamF2YXNjcmlwdFZhbGlkYXRvcjwvbmFtZT4NCi0JCQk8YXJndW1lbnRzPg0KLQkJCTwvYXJndW1lbnRzPg0KLQkJPC9idWlsZENvbW1hbmQ+DQotCQk8YnVpbGRDb21tYW5kPg0KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KLQkJCTxhcmd1bWVudHM+DQotCQkJPC9hcmd1bWVudHM+DQotCQk8L2J1aWxkQ29tbWFuZD4NCi0JCTxidWlsZENvbW1hbmQ+DQotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4NCi0JCQk8YXJndW1lbnRzPg0KLQkJCTwvYXJndW1lbnRzPg0KLQkJPC9idWlsZENvbW1hbmQ+DQotCQk8YnVpbGRDb21tYW5kPg0KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPg0KLQkJCTxhcmd1bWVudHM+DQotCQkJPC9hcmd1bWVudHM+DQotCQk8L2J1aWxkQ29tbWFuZD4NCi0JPC9idWlsZFNwZWM+DQotCTxuYXR1cmVzPg0KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPg0KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUuTW9kdWxlQ29yZU5hdHVyZTwvbmF0dXJlPg0KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4NCi0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmpzTmF0dXJlPC9uYXR1cmU+DQotCTwvbmF0dXJlcz4NCi08L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5zZXR0aW5ncy8uanNkdHNjb3BlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3MvLmpzZHRzY29wZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwZGQ5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5zZXR0aW5ncy8uanNkdHNjb3BlCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08Y2xhc3NwYXRoPg0KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPg0KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS53c3QuanNkdC5sYXVuY2hpbmcuV2ViUHJvamVjdCI+DQotCQk8YXR0cmlidXRlcz4NCi0JCQk8YXR0cmlidXRlIG5hbWU9ImhpZGUiIHZhbHVlPSJ0cnVlIi8+DQotCQk8L2F0dHJpYnV0ZXM+DQotCTwvY2xhc3NwYXRoZW50cnk+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmxhdW5jaGluZy5iYXNlQnJvd3NlckxpYnJhcnkiLz4NCi0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iIi8+DQotPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxZDhlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1dlZCBTZXAgMTYgMDI6Mjg6NDYgRURUIDIwMDkNCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42DQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjYNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZGVjYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4NCi0gICAgPHdiLW1vZHVsZSBkZXBsb3ktbmFtZT0iZGVsb3MiPg0KLSAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiLz4NCi0gICAgICAgIDx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvY2xhc3NlcyIgc291cmNlLXBhdGg9Ii9zcmMiLz4NCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0LXJvb3QiIHZhbHVlPSJkZWxvcyIvPg0KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImphdmEtb3V0cHV0LXBhdGgiLz4NCi0gICAgPC93Yi1tb2R1bGU+DQotPC9wcm9qZWN0LW1vZHVsZXM+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDg4NGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08ZmFjZXRlZC1wcm9qZWN0Pg0KLSAgPHJ1bnRpbWUgbmFtZT0iQXBhY2hlIFRvbWNhdCB2Ni4wIi8+DQotICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4NCi0gIDxmaXhlZCBmYWNldD0ianN0LmphdmEiLz4NCi0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXZhIiB2ZXJzaW9uPSI2LjAiLz4NCi0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuNSIvPg0KLSAgPGluc3RhbGxlZCBmYWNldD0id3N0LmpzZHQud2ViIiB2ZXJzaW9uPSIxLjAiLz4NCi08L2ZhY2V0ZWQtcHJvamVjdD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5zdXBlclR5cGUuY29udGFpbmVyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLmNvbnRhaW5lcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JkNWQwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuanNkdC51aS5zdXBlclR5cGUuY29udGFpbmVyCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0LmpzZHQubGF1bmNoaW5nLmJhc2VCcm93c2VyTGlicmFyeQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5qc2R0LnVpLnN1cGVyVHlwZS5uYW1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLm5hbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YmQ3MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuc3VwZXJUeXBlLm5hbWUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1XaW5kb3cKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0Y2I2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IGRlbG9zOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCi1SZXF1aXJlLUJ1bmRsZTogamF2YXguc2VydmxldC5qc3A7YnVuZGxlLXZlcnNpb249IlsyLjAuMCwzLjAuMCkiLAotIGphdmF4LnNlcnZsZXQ7YnVuZGxlLXZlcnNpb249IlsyLjQuMCwzLjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zL1dlYkNvbnRlbnQvMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zL1dlYkNvbnRlbnQvMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YWIzN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9kZWxvcy9XZWJDb250ZW50LzEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+DQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQotPGh0bWw+DQotPGhlYWQ+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+DQotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDppbmNsdWRlIHBhZ2U9Ii9UZXN0U2VydmxldCI+PC9qc3A6aW5jbHVkZT4NCi0NCi08L2JvZHk+DQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmNiYWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx3ZWItYXBwIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOndlYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi41Ij4NCi0gIDxkaXNwbGF5LW5hbWU+VGVzdFRvbWNhdDwvZGlzcGxheS1uYW1lPg0KLSAgPHdlbGNvbWUtZmlsZS1saXN0Pg0KLSAgICA8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4NCi0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4NCi0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4NCi0gICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4NCi0gICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPg0KLSAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+DQotICA8L3dlbGNvbWUtZmlsZS1saXN0Pg0KLSAgPHNlcnZsZXQ+DQotICAgIDxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPg0KLSAgICA8ZGlzcGxheS1uYW1lPlRlc3RTZXJ2bGV0PC9kaXNwbGF5LW5hbWU+DQotICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4NCi0gICAgPHNlcnZsZXQtY2xhc3M+dGVzdHRvbWNhdC5zZXJ2bGV0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPg0KLSAgPC9zZXJ2bGV0Pg0KLSAgPHNlcnZsZXQtbWFwcGluZz4NCi0gICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPg0KLSAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4NCi0gIDwvc2VydmxldC1tYXBwaW5nPg0KLTwvd2ViLWFwcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2RlbG9zL3NyYy90ZXN0dG9tY2F0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3Mvc3JjL3Rlc3R0b21jYXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA4ZjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvZGVsb3Mvc3JjL3Rlc3R0b21jYXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotcGFja2FnZSB0ZXN0dG9tY2F0LnNlcnZsZXQ7DQotDQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0Ow0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Ow0KLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsNCi0NCi0vKioNCi0gKiBTZXJ2bGV0IGltcGxlbWVudGF0aW9uIGNsYXNzIFRlc3RTZXJ2bGV0DQotICovDQotcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgew0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsNCi0gICAgICAgDQotICAgIC8qKg0KLSAgICAgKiBAc2VlIEh0dHBTZXJ2bGV0I0h0dHBTZXJ2bGV0KCkNCi0gICAgICovDQotICAgIHB1YmxpYyBUZXN0U2VydmxldCgpIHsNCi0gICAgICAgIHN1cGVyKCk7DQotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWINCi0gICAgfQ0KLQ0KLQkvKioNCi0JICogQHNlZSBIdHRwU2VydmxldCNkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkNCi0JICovDQotCXByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gew0KLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KLQl9DQotDQotCS8qKg0KLQkgKiBAc2VlIEh0dHBTZXJ2bGV0I2RvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkNCi0JICovDQotCXByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsNCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2ovLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvai8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzNiZTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvai8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSIiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2JjNWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvai8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmo8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3BFcnJvclByb2plY3QuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3BFcnJvclByb2plY3QuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmM3ZDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNwRXJyb3JQcm9qZWN0LnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAyMGNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EwNDA4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+anNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMyNzliMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNUdWUgTWF5IDI1IDE4OjM3OjE5IEVEVCAyMDEwCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNjMyZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1SZXF1aXJlLUJ1bmRsZTogamF2YXguc2VydmxldCxqYXZheC5zZXJ2bGV0LmpzcAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLVN5bWJvbGljTmFtZToganNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMAotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4ZWUxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2pzcHhfamF2YVZhcmlhYmxlX2luY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOndlYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi41Ij4KLSAgPGRpc3BsYXktbmFtZT5qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlczwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0gICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNweDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvV2ViQ29udGVudC9pbmNsdWRlL2F1dGhBZG1pbi5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L2luY2x1ZGUvYXV0aEFkbWluLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzE5MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L2luY2x1ZGUvYXV0aEFkbWluLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPGpzcDpyb290IHhtbG5zOmpzcD0iaHR0cDovL2phdmEuc3VuLmNvbS9KU1AvUGFnZSIgdmVyc2lvbj0iMi4wIgotCXhtbG5zOmg9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiCi0JeG1sbnM6Zj0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSI+Ci0JPGpzcDpkaXJlY3RpdmUuaW5jbHVkZSBmaWxlPSJhdXRoQ2hlY2suanNwZiIvPgotCQotCTxqc3A6b3V0cHV0IG9taXQteG1sLWRlY2xhcmF0aW9uPSJ0cnVlIiBkb2N0eXBlLXJvb3QtZWxlbWVudD0iSFRNTCIKLQkJZG9jdHlwZS1zeXN0ZW09Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCIKLQkJZG9jdHlwZS1wdWJsaWM9Ii0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAvPgotCTxqc3A6ZGlyZWN0aXZlLnBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDtjaGFyc2V0PVVURi04IiAvPgotCTxqc3A6c2NyaXB0bGV0PgotCS8vIE5vdGhpbmcKLQk8L2pzcDpzY3JpcHRsZXQ+Ci08L2pzcDpyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvV2ViQ29udGVudC9pbmNsdWRlL2F1dGhDaGVjay5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L2luY2x1ZGUvYXV0aENoZWNrLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZTIwYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L2luY2x1ZGUvYXV0aENoZWNrLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPGpzcDpyb290IHhtbG5zOmpzcD0iaHR0cDovL2phdmEuc3VuLmNvbS9KU1AvUGFnZSIgdmVyc2lvbj0iMi4wIgotCXhtbG5zOmg9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiCi0JeG1sbnM6Zj0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSI+Ci0JCi0JPGpzcDpvdXRwdXQgb21pdC14bWwtZGVjbGFyYXRpb249InRydWUiIGRvY3R5cGUtcm9vdC1lbGVtZW50PSJIVE1MIgotCQlkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIgotCQlkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iIC8+Ci0JPGpzcDpkaXJlY3RpdmUucGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiIC8+Ci0JPGpzcDpzY3JpcHRsZXQ+Ci0JYm9vbGVhbiBhdXRoZW50aWNhdGVkID0gdHJ1ZTsKLQk8L2pzcDpzY3JpcHRsZXQ+Ci08L2pzcDpyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvV2ViQ29udGVudC9pbmRleC5qc3B4IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L2luZGV4LmpzcHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkN2VmYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L2luZGV4LmpzcHgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPGpzcDpyb290IHhtbG5zOmpzcD0iaHR0cDovL2phdmEuc3VuLmNvbS9KU1AvUGFnZSIgdmVyc2lvbj0iMi4wIgotCXhtbG5zOmg9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiCi0JeG1sbnM6Zj0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIKLQl4bWxuczppY2U9Imh0dHA6Ly93d3cuaWNlc29mdC5jb20vaWNlZmFjZXMvY29tcG9uZW50Ij4KLQk8anNwOmRpcmVjdGl2ZS5pbmNsdWRlIGZpbGU9ImluY2x1ZGUvYXV0aEFkbWluLmpzcGYiLz4KLQkKLQk8anNwOm91dHB1dCBvbWl0LXhtbC1kZWNsYXJhdGlvbj0idHJ1ZSIgZG9jdHlwZS1yb290LWVsZW1lbnQ9IkhUTUwiCi0JCWRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiCi0JCWRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgLz4KLQk8anNwOmRpcmVjdGl2ZS5wYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgLz4KLQkJPGh0bWw+Ci0JCTxoZWFkPgotCQk8dGl0bGU+MTE5NTc2PC90aXRsZT4KLQkJPC9oZWFkPgotCQk8Ym9keT4KLQkJPGpzcDpzY3JpcHRsZXQ+Ci0JCW91dC5wcmludGxuKCJWYXJpYWJsZSBhdXRoZW50aWNhdGVkIGlzICIgKyBhdXRoZW50aWNhdGVkKTsKLQkJPC9qc3A6c2NyaXB0bGV0PgotCQk8L2JvZHk+Ci0JCTwvaHRtbD4KLTwvanNwOnJvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YmQzYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L3Rlc3QxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPCVAIHBhZ2UgaW1wb3J0PSJqYXZhLnNxbC4qIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTIiJT4KLTwhZG9jdHlwZSBodG1sIHB1YmxpYyAiLS8vdzNjLy9kdGQgaHRtbCAzLjIvL2VuIj4KLTwlQCBpbmNsdWRlIGZpbGU9Ii90ZXN0Mi5qc3AiICU+Ci08JQotdmFyaWFibGUxPSJ0ZXN0MiI7Ci0lPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L3Rlc3QyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvV2ViQ29udGVudC90ZXN0Mi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NWQ2YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L3Rlc3QyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgaW1wb3J0PSJqYXZhLnNxbC4qIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTIiJT4KLTwlQCBpbmNsdWRlIGZpbGU9InRlc3QzLmpzcCIgJT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L3Rlc3QzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvV2ViQ29udGVudC90ZXN0My5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMzc0ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9XZWJDb250ZW50L3Rlc3QzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPCVAIHBhZ2UgaW1wb3J0PSJqYXZhLnNxbC4qIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTIiJT4KLTwhZG9jdHlwZSBodG1sIHB1YmxpYyAiLS8vdzNjLy9kdGQgaHRtbCAzLjIvL2VuIj4KLTwlCi1TdHJpbmcgdmFyaWFibGUxID0gInRlc3QiOwotJT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvanNweF9qYXZhVmFyaWFibGVfaW5jbHVkZXMvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9qc3B4X2phdmFWYXJpYWJsZV9pbmNsdWRlcy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2svLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvay8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzNiZTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvay8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSIiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9rLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9rLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRhYzBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvay8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPms8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzJhZTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYi5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJidWlsZC9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjI1ZmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5wcmoxMTk1NzZfYTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLm5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUuTW9kdWxlQ29yZU5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4YmM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MTggRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjMDEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MjQgRURUIDIwMDYKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSXDpcOm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZVw6XDoxLjUuMF8wMy9vd25lcnM9anN0LmphdmFcOjUuMAotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyXDpcOm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWVUYXJnZXRcOlw6QXBhY2hlXCBUb21jYXRcIHY1LjUuOS9vd25lcnM9anN0LndlYlw6Mi40Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlMGMxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0LW1vZHVsZXMgaWQ9Im1vZHVsZUNvcmVJZCIgcHJvamVjdC12ZXJzaW9uPSIxLjUuMCI+Ci08d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJDbGVhblRlc3RXZWIiPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiLz4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvY2xhc3NlcyIgc291cmNlLXBhdGg9Ii9zcmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0LXJvb3QiIHZhbHVlPSJDbGVhblRlc3RXZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJqYXZhLW91dHB1dC1wYXRoIiB2YWx1ZT0iYnVpbGQvY2xhc3NlcyIvPgotPC93Yi1tb2R1bGU+Ci08L3Byb2plY3QtbW9kdWxlcz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzliOWI0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmFjZXRlZC1wcm9qZWN0PgotICA8cnVudGltZSBuYW1lPSJBcGFjaGUgVG9tY2F0IHY1LjUuOSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC5qYXZhIi8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LndlYiIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3QuamF2YSIgdmVyc2lvbj0iNS4wIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuNCIvPgotPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOThjNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMjMyNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0icHJqMTE5NTc2X2EiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT5wcmoxMTk1NzZfYTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWE0NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIGluY2x1ZGUgZmlsZSA9ICJoZWFkZXIuanNwIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTU0OWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlID0gInRhZ2xpYi5qc3BmIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5Mi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGRiNWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5Mi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTwlQCBpbmNsdWRlIGZpbGUgPSAiYm9keS5qc3AiICU+Ci08JUAgaW5jbHVkZSBmaWxlID0gImJvZHkxLmpzcCIgJT4KLTxzYW1wbGU6Y29kZS8+Ci08JSBqYXZhLnV0aWwuRGF0ZSBib2R5RGF0ZSA9IGhlYWRlckRhdGU7ICU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvaGVhZGVyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9oZWFkZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTM5ZmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9oZWFkZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JSBqYXZhLnV0aWwuRGF0ZSBoZWFkZXJEYXRlID0gbnVsbDsgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvdGFnbGliLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvdGFnbGliLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMmQ4NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L3RhZ2xpYi5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAdGFnbGliIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiIHByZWZpeD0ic2FtcGxlIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC90ZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvdGVzdDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2RiNTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08JT0iSGVsbG8sIFdvcmxkISIlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvYmluLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL2Jpbi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvYmluLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9idWlsZC9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyYWU0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWIuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYnVpbGQvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyNWZhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+cHJqMTE5NTc2X2E8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLkphdmFFTUZOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOGJjOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNNb24gTWF5IDAxIDEzOjQxOjE4IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzAxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gTWF5IDAxIDEzOjQxOjI0IEVEVCAyMDA2Ci1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUlw6XDpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGVcOlw6MS41LjBfMDMvb3duZXJzPWpzdC5qYXZhXDo1LjAKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lclw6XDpvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lVGFyZ2V0XDpcOkFwYWNoZVwgVG9tY2F0XCB2NS41Ljkvb3duZXJzPWpzdC53ZWJcOjIuNAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZTBjMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgotPHdiLW1vZHVsZSBkZXBsb3ktbmFtZT0iQ2xlYW5UZXN0V2ViIj4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii9XZWJDb250ZW50Ii8+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii9XRUItSU5GL2NsYXNzZXMiIHNvdXJjZS1wYXRoPSIvc3JjIi8+Ci08cHJvcGVydHkgbmFtZT0iY29udGV4dC1yb290IiB2YWx1ZT0iQ2xlYW5UZXN0V2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iamF2YS1vdXRwdXQtcGF0aCIgdmFsdWU9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvd2ItbW9kdWxlPgotPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YjliNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZhY2V0ZWQtcHJvamVjdD4KLSAgPHJ1bnRpbWUgbmFtZT0iQXBhY2hlIFRvbWNhdCB2NS41LjkiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3QuamF2YSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LmphdmEiIHZlcnNpb249IjUuMCIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjQiLz4KLTwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk4YzQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmE4YmVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9InByajExOTU3Nl9iIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+cHJqMTE5NTc2X2I8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2JvZHkxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9ib2R5MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWE0NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2JvZHkxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlQCBpbmNsdWRlIGZpbGUgPSAiaGVhZGVyLmpzcCIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvYm9keTMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2JvZHkzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI4ZDI0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvYm9keTMuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAaW5jbHVkZSBmaWxlID0gImJvZHkxLmpzcCIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvaGVhZGVyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9oZWFkZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWNmMjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9oZWFkZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgcHJlZml4PSJzYW1wbGUiICU+Ci08JSBqYXZhLnV0aWwuRGF0ZSBoZWFkZXJEYXRlID0gbnVsbDsgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL2Jpbi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9iaW4vLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL2Jpbi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9idWlsZC9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Ivc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMmFlNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2ViLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OWY0YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnByajExOTU3Nl9jPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZThiYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToxOCBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmMwMTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToyNCBFRFQgMjAwNgotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVJcOlw6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlXDpcOjEuNS4wXzAzL293bmVycz1qc3QuamF2YVw6NS4wCi1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXJcOlw6b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldFw6XDpBcGFjaGVcIFRvbWNhdFwgdjUuNS45L293bmVycz1qc3Qud2ViXDoyLjQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWUwYzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KLTx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9IkNsZWFuVGVzdFdlYiI+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii8iIHNvdXJjZS1wYXRoPSIvV2ViQ29udGVudCIvPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvV0VCLUlORi9jbGFzc2VzIiBzb3VyY2UtcGF0aD0iL3NyYyIvPgotPHByb3BlcnR5IG5hbWU9ImNvbnRleHQtcm9vdCIgdmFsdWU9IkNsZWFuVGVzdFdlYiIvPgotPHByb3BlcnR5IG5hbWU9ImphdmEtb3V0cHV0LXBhdGgiIHZhbHVlPSJidWlsZC9jbGFzc2VzIi8+Ci08L3diLW1vZHVsZT4KLTwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI5YjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmYWNldGVkLXByb2plY3Q+Ci0gIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjUuNS45Ii8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LmphdmEiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3Qud2ViIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXZhIiB2ZXJzaW9uPSI1LjAiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LndlYiIgdmVyc2lvbj0iMi40Ii8+Ci08L2ZhY2V0ZWQtcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM1NjBmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJwcmoxMTk1NzZfYyIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnByajExOTU3Nl9jPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9ib2R5MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvYm9keTEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWEyMjg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9ib2R5MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTwlQCBpbmNsdWRlIGZpbGUgPSAiaGVhZGVyLmpzcCIgJT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2JvZHkzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9ib2R5My5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYzczY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2JvZHkzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPCVAaW5jbHVkZSBmaWxlID0gImJvZHkxLmpzcCIgJT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2hlYWRlci5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvaGVhZGVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzYzdhMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvaGVhZGVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiIHByZWZpeD0ic2FtcGxlIiAlPgotPCUgamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSA9IG51bGw7ICU+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvYmluLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL2Jpbi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvYmluLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9idWlsZC9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvc3RydXRzLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvc3RydXRzLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzMmY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3N0cnV0cy5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3REeW5hbWljQXR0cmlidXRlcy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0RHluYW1pY0F0dHJpYnV0ZXMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzMTM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3REeW5hbWljQXR0cmlidXRlcy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvIiAvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYi5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC5tb2R1bGUuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYnVpbGQvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3REeW5hbWljQXR0cmlidXRlcy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdER5bmFtaWNBdHRyaWJ1dGVzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGZjMGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdER5bmFtaWNBdHRyaWJ1dGVzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdER5bmFtaWNBdHRyaWJ1dGVzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0RHluYW1pY0F0dHJpYnV0ZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdER5bmFtaWNBdHRyaWJ1dGVzL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0RHluYW1pY0F0dHJpYnV0ZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0RHluYW1pY0F0dHJpYnV0ZXMvV2ViQ29udGVudC9XRUItSU5GL2Zvby50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3REeW5hbWljQXR0cmlidXRlcy9XZWJDb250ZW50L1dFQi1JTkYvZm9vLnRsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg1MTZmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3REeW5hbWljQXR0cmlidXRlcy9XZWJDb250ZW50L1dFQi1JTkYvZm9vLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHRhZ2xpYiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSINCi0JCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQotCQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItanNwdGFnbGlicmFyeV8yXzAueHNkIg0KLQkJdmVyc2lvbj0iMi4wIj4NCi0NCi0JPHRsaWItdmVyc2lvbj4xLjA8L3RsaWItdmVyc2lvbj4NCi0JPHNob3J0LW5hbWU+Zm9vPC9zaG9ydC1uYW1lPg0KLQk8dXJpPmh0dHA6Ly9mb288L3VyaT4NCi0JPHRhZz4NCi0JCTxkZXNjcmlwdGlvbj5UZXN0IER5bmFtaWMgQXR0cmlidXRlczwvZGVzY3JpcHRpb24+DQotCQk8bmFtZT5iYXI8L25hbWU+DQotCQk8dGFnLWNsYXNzPmZvby5CYXI8L3RhZy1jbGFzcz4NCi0JCTxib2R5LWNvbnRlbnQ+ZW1wdHk8L2JvZHktY29udGVudD4NCi0JCTxkeW5hbWljLWF0dHJpYnV0ZXM+dHJ1ZTwvZHluYW1pYy1hdHRyaWJ1dGVzPg0KLQk8L3RhZz4NCi0NCi08L3RhZ2xpYj4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3REeW5hbWljQXR0cmlidXRlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdER5bmFtaWNBdHRyaWJ1dGVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjQ1YTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdER5bmFtaWNBdHRyaWJ1dGVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOndlYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi41Ij4KLSAgPGRpc3BsYXktbmFtZT50ZXN0RHluYW1pY0F0dHJpYnV0ZXM8L2Rpc3BsYXktbmFtZT4KLSAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotICAgIDx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0gIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmI2ODFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLm1vZHVsZS5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMDIxZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmJ1Z18xNzg0NDM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1MDJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogVGVzdEl0ZXJhdGlvblRhZ3MKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IHRlc3RJdGVyYXRpb25UYWdzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiB0ZXN0aXRlcmF0aW9udGFncy5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBqYXZheC5zZXJ2bGV0LmpzcDtidW5kbGUtdmVyc2lvbj0iMi4wLjAiLAotIGphdmF4LnNlcnZsZXQ7YnVuZGxlLXZlcnNpb249IjIuNS4wIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy9XZWJDb250ZW50L1dFQi1JTkYvcGxhaW4udGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy9XZWJDb250ZW50L1dFQi1JTkYvcGxhaW4udGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWNlMTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9XRUItSU5GL3BsYWluLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgdGFnbGliIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjEvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWpzcHRhZ2xpYnJhcnlfMV8xLmR0ZCI+Ci08dGFnbGliPgotPHRsaWJ2ZXJzaW9uPjEuMjwvdGxpYnZlcnNpb24+Ci08anNwdmVyc2lvbj4xLjE8L2pzcHZlcnNpb24+Ci08c2hvcnRuYW1lPnBsYWluPC9zaG9ydG5hbWU+Ci08dXJpPmh0dHA6Ly9lY2xpcHNlLm9yZy9wbGFpbjwvdXJpPgotPHRhZz4KLTxuYW1lPnNpbXBsZTwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuZWNsaXBzZS5TaW1wbGVUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxvb3A8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmVjbGlwc2UuTG9vcFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bGlzdDwvbmFtZT4KLTx0YWdjbGFzcz5qYXZhLnV0aWwuTGlzdDwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPnViZXJsb29wPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5lY2xpcHNlLlViZXJMb29wVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPC90YWc+Ci08L3RhZ2xpYj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWE2ZGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnRlc3RJdGVyYXRpb25UYWdzPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9kZWZhdWx0LmpzcHggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL1dlYkNvbnRlbnQvZGVmYXVsdC5qc3B4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDRkNGMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9kZWZhdWx0LmpzcHgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08aHRtbCANCi0gCXhtbG5zOmpzcD0iaHR0cDovL2phdmEuc3VuLmNvbS9KU1AvUGFnZSINCi0JeG1sbnM6Yz0iaHR0cDovL2phdmEuc3VuLmNvbS9qc3AvanN0bC9jb3JlIiA+ICANCi0JPGpzcDpkaXJlY3RpdmUucGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiIC8+ICANCi0JPGhlYWQ+DQotCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4NCi0JCTx0aXRsZT5QYWdlPC90aXRsZT4NCi0JPC9oZWFkPg0KLSAgIAk8Ym9keT4NCi0gICAJCTxjOmlmIHRlc3Q9IiR7cGFnZUNvbnRleHQucmVxdWVzdC5yZXF1ZXN0VVJJICE9IG51bGx9Ij4JDQotICAgCSAJCTxjOm91dCB2YWx1ZT0iIGZvbyAiLz4NCi0JCTwvYzppZj4JCQkNCi0JPC9ib2R5Pg0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL1dlYkNvbnRlbnQvaXRlcmF0aW9uVGVzdGVyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9pdGVyYXRpb25UZXN0ZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWQ1MzI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC9pdGVyYXRpb25UZXN0ZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3BsYWluLnRsZCIgcHJlZml4PSJwbGFpbiIgJT4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4NCi08aHRtbD4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC90ZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC90ZXN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmYzZmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL1dlYkNvbnRlbnQvdGVzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3BsYWluLnRsZCIgcHJlZml4PSJwbGFpbiIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCEtLSBTaG91bGQgZ2VuZXJhdGUgYW4gZXJyb3Igc2luY2UgY29udGludWU7IGNhbid0IGJlIHVzZWQgaW4gdGhpcyBjb25zdHJ1Y3QgLS0+Ci08cGxhaW46c2ltcGxlPgotPCUgaWYodHJ1ZSkgY29udGludWU7ICU+Ci08L3BsYWluOnNpbXBsZT4KLQotPHBsYWluOmxvb3A+Ci08JSBpZih0cnVlKSBjb250aW51ZTsgJT4KLTwvcGxhaW46bG9vcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC90ZXN0X21pc3NpbmdfZW5kX3RhZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL1dlYkNvbnRlbnQvdGVzdF9taXNzaW5nX2VuZF90YWcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjQ2MDNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3MvV2ViQ29udGVudC90ZXN0X21pc3NpbmdfZW5kX3RhZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3BsYWluLnRsZCIgcHJlZml4PSJwbGFpbiIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08IS0tIE1pc3NpbmcgZW5kIHRhZyBmb3IgcGxhaW46bG9vcCAtLT4KLTxwbGFpbjpsb29wPgotPCUgaWYodHJ1ZSkgY29udGludWU7ICU+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3Mvc3JjL29yZy9lY2xpcHNlL0xvb3BUYWcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3Mvc3JjL29yZy9lY2xpcHNlL0xvb3BUYWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0NDg5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL3NyYy9vcmcvZWNsaXBzZS9Mb29wVGFnLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlOwotCi1wdWJsaWMgY2xhc3MgTG9vcFRhZyBpbXBsZW1lbnRzIGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC5JdGVyYXRpb25UYWcgewotCi0JcHVibGljIGludCBkb0FmdGVyQm9keSgpIHRocm93cyBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwdWJsaWMgaW50IGRvRW5kVGFnKCkgdGhyb3dzIGphdmF4LnNlcnZsZXQuanNwLkpzcEV4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLQotCXB1YmxpYyBpbnQgZG9TdGFydFRhZygpIHRocm93cyBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwdWJsaWMgamF2YXguc2VydmxldC5qc3AudGFnZXh0LlRhZyBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UGFnZUNvbnRleHQoamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGMpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQYXJlbnQoamF2YXguc2VydmxldC5qc3AudGFnZXh0LlRhZyB0KSB7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL3NyYy9vcmcvZWNsaXBzZS9TaW1wbGVUYWcuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3Mvc3JjL29yZy9lY2xpcHNlL1NpbXBsZVRhZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWFkYjU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEl0ZXJhdGlvblRhZ3Mvc3JjL29yZy9lY2xpcHNlL1NpbXBsZVRhZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZTsKLQotcHVibGljIGNsYXNzIFNpbXBsZVRhZyBpbXBsZW1lbnRzIGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC5UYWcgewotCi0JcHVibGljIGludCBkb0VuZFRhZygpIHRocm93cyBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwdWJsaWMgaW50IGRvU3RhcnRUYWcoKSB0aHJvd3MgamF2YXguc2VydmxldC5qc3AuSnNwRXhjZXB0aW9uIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHVibGljIFRhZyBnZXRQYXJlbnQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UGFnZUNvbnRleHQoamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGMpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQYXJlbnQoamF2YXguc2VydmxldC5qc3AudGFnZXh0LlRhZyB0KSB7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL3NyYy9vcmcvZWNsaXBzZS9VYmVyTG9vcFRhZy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SXRlcmF0aW9uVGFncy9zcmMvb3JnL2VjbGlwc2UvVWJlckxvb3BUYWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYyMzRkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJdGVyYXRpb25UYWdzL3NyYy9vcmcvZWNsaXBzZS9VYmVyTG9vcFRhZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlOwotCi1wdWJsaWMgY2xhc3MgVWJlckxvb3BUYWcgZXh0ZW5kcyBMb29wVGFnIHsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNjM0NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0id2ViIHN0dWZmL1dFQi1JTkYvbGliL3N0cnV0cy5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJ3ZWIgc3R1ZmYvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Mzk5Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0TG9hZFRhZ2xpYnM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy93ZWIgc3R1ZmYvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy93ZWIgc3R1ZmYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy93ZWIgc3R1ZmYvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy93ZWIgc3R1ZmYvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzL3dlYiBzdHVmZi9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzL3dlYiBzdHVmZi9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDMzMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+dGVzdExvYWRUYWdsaWJzPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzL3dlYiBzdHVmZi90ZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RMb2FkVGFnbGlicy93ZWIgc3R1ZmYvdGVzdDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTY1MGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzL3dlYiBzdHVmZi90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1sb2dpYyIgcHJlZml4PSJsb2dpYyIlPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi0gPGxvZ2ljOmVtcHR5Lz4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL3Rlc3RYLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdExvYWRUYWdsaWJzL3dlYiBzdHVmZi90ZXN0WC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3M2Y4MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0TG9hZFRhZ2xpYnMvd2ViIHN0dWZmL3Rlc3RYLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGpzcDpyb290IHhtbG5zOmpzcD0iaHR0cDovL2phdmEuc3VuLmNvbS9KU1AvUGFnZSIgdmVyc2lvbj0iMi4wIgoteG1sbnM6bG9naWM9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvc3RydXRzL3RhZ3MtbG9naWMiPgotCi08bG9naWM6ZW1wdHkvPgotCi08L2pzcDpyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTE1NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IndlYiBzdHVmZi9XRUItSU5GL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDY1YzliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnRlc3RQcmVsdWRlQW5kQ29kYXM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U1NzM4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+dGVzdFByZWx1ZGVBbmRDb2RhczwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPGpzcC1jb25maWc+Ci0JCTxqc3AtcHJvcGVydHktZ3JvdXA+Ci0JCTx1cmwtcGF0dGVybj4vcHJlbHVkZS11c2VyLyouanNwPC91cmwtcGF0dGVybj4KLQkJPGluY2x1ZGUtcHJlbHVkZT4vY29tbW9uL3ByZWx1ZGUwLmpzcGY8L2luY2x1ZGUtcHJlbHVkZT4KLQkJPGluY2x1ZGUtcHJlbHVkZT4vY29tbW9uL3ByZWx1ZGUxLmpzcGY8L2luY2x1ZGUtcHJlbHVkZT4KLQkJPC9qc3AtcHJvcGVydHktZ3JvdXA+Ci0KLQkJPGpzcC1wcm9wZXJ0eS1ncm91cD4KLQkJPHVybC1wYXR0ZXJuPi9jb2RhLXVzZXIvKi5qc3A8L3VybC1wYXR0ZXJuPgotCQk8aW5jbHVkZS1jb2RhPi9jb21tb24vY29kYTAuanNwZjwvaW5jbHVkZS1jb2RhPgotCQk8aW5jbHVkZS1jb2RhPi9jb21tb24vY29kYTEuanNwZjwvaW5jbHVkZS1jb2RhPgotCQk8L2pzcC1wcm9wZXJ0eS1ncm91cD4KLQotCQk8anNwLXByb3BlcnR5LWdyb3VwPgotCQk8dXJsLXBhdHRlcm4+L2JvdGgvKi5qc3A8L3VybC1wYXR0ZXJuPgotCQk8aW5jbHVkZS1wcmVsdWRlPi9jb21tb24vcHJlbHVkZTAuanNwZjwvaW5jbHVkZS1wcmVsdWRlPgotCQk8aW5jbHVkZS1jb2RhPi9jb21tb24vY29kYTAuanNwZjwvaW5jbHVkZS1jb2RhPgotCQk8L2pzcC1wcm9wZXJ0eS1ncm91cD4KLQotCQk8anNwLXByb3BlcnR5LWdyb3VwPgotCQk8ZGVzY3JpcHRpb24+SlNQIGNvbmZpZ3VyYXRpb24gb2YgYWxsIHRoZSBKU1AncyA8L2Rlc2NyaXB0aW9uPgotCQk8dXJsLXBhdHRlcm4+Ki5qc3A8L3VybC1wYXR0ZXJuPgotCQk8aW5jbHVkZS1wcmVsdWRlPi90ZXN0RnJhZ21lbnQuanNwZjwvaW5jbHVkZS1wcmVsdWRlPgotCQk8L2pzcC1wcm9wZXJ0eS1ncm91cD4KLQk8L2pzcC1jb25maWc+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2JvdGgvdGVzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2JvdGgvdGVzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjY5NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9ib3RoL3Rlc3QuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb2RhLXVzZXIvdGVzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvZGEtdXNlci90ZXN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiNjk1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvZGEtdXNlci90ZXN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL2NvZGEwLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9jb2RhMC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTk4M2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL2NvZGEwLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JSBpbnQgY29kYTAgPSAwOyAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vY29kYTEuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL2NvZGExLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYzFkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vY29kYTEuanNwZgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlIGludCBjb2RhMSA9IDA7ICU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9wcmVsdWRlMC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vcHJlbHVkZTAuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQxYTEwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9wcmVsdWRlMC5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCUgaW50IHByZWx1ZGUwID0gMDsgJT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL3ByZWx1ZGUxLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9wcmVsdWRlMS5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJlMTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL3ByZWx1ZGUxLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JSBpbnQgcHJlbHVkZTEgPSAxOyAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9wcmVsdWRlLXVzZXIvdGVzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3ByZWx1ZGUtdXNlci90ZXN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiNjk1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3ByZWx1ZGUtdXNlci90ZXN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvdGVzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3Rlc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI2OTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvdGVzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3Rlc3RGcmFnbWVudC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi90ZXN0RnJhZ21lbnQuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA5YWYwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3Rlc3RGcmFnbWVudC5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAcGFnZSBpbXBvcnQ9ImphdmEubGFuZy5yZWYuUmVmZXJlbmNlIiAlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYzNiM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3ZjAxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi9pbnB1dC50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMvV2ViQ29udGVudC9XRUItSU5GL2lucHV0LnRsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjODE1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMvV2ViQ29udGVudC9XRUItSU5GL2lucHV0LnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08IURPQ1RZUEUgdGFnbGliCi0gICAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMi8vRU4iCi0JImh0dHA6Ly9qYXZhLnN1bi5jb20vZHRkL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMi5kdGQiPgotPHRhZ2xpYj4KLSAgPHRsaWItdmVyc2lvbj4xLjA8L3RsaWItdmVyc2lvbj4KLSAgPGpzcC12ZXJzaW9uPjEuMjwvanNwLXZlcnNpb24+Ci0gIDxzaG9ydC1uYW1lPmlucHV0PC9zaG9ydC1uYW1lPgotCi0gIDxkZXNjcmlwdGlvbj4KLSAgPC9kZXNjcmlwdGlvbj4KLQotCi0gIDwhLS0gSFRNTCBUZXh0IFRBRyAtLT4KLSAgPHRhZz4KLSAgICA8bmFtZT50ZXh0PC9uYW1lPgotICAgIDx0YWctY2xhc3M+dGVzdC50YWdsaWIuVGV4dDwvdGFnLWNsYXNzPgotICAgIDxib2R5LWNvbnRlbnQ+ZW1wdHk8L2JvZHktY29udGVudD4KLSAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgIFRhZyBsaWIgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9yLgotICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KLSAgICAgICAgPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotICAgICAgICA8cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci0gICAgPC9hdHRyaWJ1dGU+Ci0gIDwvdGFnPgotCi0KLQotCi0KLTwvdGFnbGliPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTkwYWQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcAotCWlkPSJXZWJBcHBfSUQiCi0JdmVyc2lvbj0iMi40IgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgotPgotCTxkaXNwbGF5LW5hbWU+dGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvY29tbW9uRXZlbnRIYW5kbGVycy5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL1dlYkNvbnRlbnQvY29tbW9uRXZlbnRIYW5kbGVycy5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmZhYTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy9XZWJDb250ZW50L2NvbW1vbkV2ZW50SGFuZGxlcnMuanNwZgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRvcG1hcmdpbj0wIG9uTG9hZD0ibG9hZFBhZ2UoKTsiIG9uVW5sb2FkPSJ1bmxvYWRQYWdlKCk7IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy9XZWJDb250ZW50L3NhbXBsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMvV2ViQ29udGVudC9zYW1wbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDcyOTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFRyYW5zbGF0b3JNZXNzYWdlc1dpdGhJbmNsdWRlcy9XZWJDb250ZW50L3NhbXBsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0gPCVAcGFnZSBpbXBvcnQ9ImphdmEudXRpbC5DYWxlbmRhciIlPgotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL2lucHV0LnRsZCIgcHJlZml4PSJpbnB1dCIgJT4KLTxIVE1MPgotCi08SEVBRD4gICAgCi0KLTwvSEVBRD4KLQotCi0KLTxCT0RZPgotCi08cD4gCi0gVGhlIHByb2JsZW0gaW4gYm90aCBjYXNlcyBpcyBhIG1pc3NpbmcgZXF1YWxzIHNpZ24gYWZ0ZXIgdGhlIHBlcmNlbnQuICBIb3dldmVyIHRoZSBpbmNsdWRlIGZpbGU9aXMKLSBoaWdobGlnaGVkIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBlcnJvcgotCi0KLQotICA8JUAgaW5jbHVkZSBmaWxlPSJjb21tb25FdmVudEhhbmRsZXJzLmpzcGYiJT4gCi0gIDwvcD4KLSAgCi0gPHA+IAotICAKLQotIDxpbnB1dDp0ZXh0IG5hbWU9IjwlIENhbGVuZGFyLkRBWV9PRl9NT05USCAgJT4iIC8+Ci0gPC9wPgotIDxwPgotIDxpbnB1dDp0ZXh0IG5hbWU9IjwlIENhbGVuZGFyLkRBWV9PRl9NT05USCAgJT4iIC8+Ci0KLQotICAKLTwvcD4KLQotPC9CT0RZPgotPC9IVE1MPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RUcmFuc2xhdG9yTWVzc2FnZXNXaXRoSW5jbHVkZXMvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VHJhbnNsYXRvck1lc3NhZ2VzV2l0aEluY2x1ZGVzL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkOWU0MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhY2M3MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvV2ViQ29udGVudC9tYWluLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy9XZWJDb250ZW50L21haW4uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDA0NWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy9XZWJDb250ZW50L21haW4uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFkb2N0eXBlIGh0bWwgcHVibGljICItLy93M2MvL2R0ZCBodG1sIDMuMi8vZW4iPg0KLQ0KLTwlDQotU3RyaW5nIHZhcmlhYmxlRnJvbU1haW5KU1AgPSAiaW5pdGlhbGl6ZWQgaW4gbWFpbiI7DQotJT4NCi0NCi08JUAgaW5jbHVkZSBmaWxlPSJ0ZXN0X2hlYWRlcjEuanNwZiIgJT4NCi0NCi08JQ0KLXZhcmlhYmxlRnJvbU1haW5KU1AgPSAicmVhc3NpZ25lZCBpbiBtYWluIjsNCi12YXJpYWJsZUZyb21IZWFkZXIxID0gInJlYXNzaWduZWQgaW4gbWFpbiI7DQotJT4NCi1WYWx1ZSBvZiB2YXJpYWJsZUZyb21NYWluSlNQOiAiPCU9dmFyaWFibGVGcm9tTWFpbkpTUCU+Ig0KLTxicj4NCi1WYWx1ZSBvZiB2YXJpYWJsZUZyb21IZWFkZXIxOiAiPCU9dmFyaWFibGVGcm9tSGVhZGVyMSU+Ig0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy9XZWJDb250ZW50L3Rlc3RfaGVhZGVyMS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzL1dlYkNvbnRlbnQvdGVzdF9oZWFkZXIxLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzU0NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzL1dlYkNvbnRlbnQvdGVzdF9oZWFkZXIxLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTwlDQotU3RyaW5nIHZhcmlhYmxlRnJvbUhlYWRlcjEgPSAiaW5pdGlhbGl6ZWQgaW4gaGVhZGVyIDEiOw0KLSU+DQotPCVAIGluY2x1ZGUgZmlsZT0idGVzdF9oZWFkZXIyLmpzcGYiICU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzL1dlYkNvbnRlbnQvdGVzdF9oZWFkZXIyLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvV2ViQ29udGVudC90ZXN0X2hlYWRlcjIuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNzRiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvV2ViQ29udGVudC90ZXN0X2hlYWRlcjIuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCUNCi12YXJpYWJsZUZyb21NYWluSlNQID0gInJlYXNzaWduZWQgaW4gaGVhZGVyIDIiOw0KLXZhcmlhYmxlRnJvbUhlYWRlcjEgPSAicmVhc3NpZ25lZCBpbiBoZWFkZXIgMiI7DQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNWY0ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIgZXhwb3J0ZWQ9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii90ZXN0YXZhaWxhYmxlMiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmFhYWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0YXZhaWxhYmxlMTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTlmMmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmFhYWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0YXZhaWxhYmxlMTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5ZjJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzNWY2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0Y2FjaGUxPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjliYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDI5M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdGNhY2hlMjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTx0YWdsaWI+Ci0KLSAgICAgPHRsaWJ2ZXJzaW9uPjAuMC4xPC90bGlidmVyc2lvbj4KLSAgICAgPGpzcHZlcnNpb24+MS4yPC9qc3B2ZXJzaW9uPgotICAgICA8c2hvcnRuYW1lPnNhbXBsZTwvc2hvcnRuYW1lPgotICAgICA8dXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUyX2Zvcl8xMTgyNTEtZTwvdXJpPgotICAgICA8aW5mbz4KLSAgICAgICAgVGhpcyB0YWcgbGlicmFyeSBjb250YWlucyBqdXN0IG9uZSB0YWcuICBIYSBoYSEgCi0gICAgIDwvaW5mbz4KLQotICAgICA8dGFnPgotICAgICAgIDxuYW1lPmNvZGU8L25hbWU+Ci0gICAgICAgPHRhZ2NsYXNzPnNhbXBsZS50YWdsaWIuQ29kZVRhZzwvdGFnY2xhc3M+Ci0gICAgICAgPGJvZHljb250ZW50PnRhZ2RlcGVuZGVudDwvYm9keWNvbnRlbnQ+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmZvbnRBdHRyaWJ1dGVzPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5jb21tZW50Q29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPnN0cmluZ0NvbG9yPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICA8L3RhZz4KLSAgIDwvdGFnbGliPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QwN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC90ZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjIwNzVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnRlc3R2YWxpZGF0ZWpzcGFjdGlvbnM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC9XRUItSU5GL3RsZC9saWJ0YWdzLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L1dFQi1JTkYvdGxkL2xpYnRhZ3MudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDkyODVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L1dFQi1JTkYvdGxkL2xpYnRhZ3MudGxkCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIj4KLTx0YWdsaWI+Ci0JPHRsaWJ2ZXJzaW9uPjEuMjwvdGxpYnZlcnNpb24+Ci0JPGpzcHZlcnNpb24+MS4xPC9qc3B2ZXJzaW9uPgotCTxzaG9ydG5hbWU+bGlidGFnczwvc2hvcnRuYW1lPgotCTx1cmk+aHR0cDovL25vdGhpbmcuY29tL2xpYnRhZ3M8L3VyaT4KLQk8dGFnPgotCQk8bmFtZT5paGF2ZWF0dHJzPC9uYW1lPgotCQk8dGFnY2xhc3M+bm90aGluZy50YWdsaWIuaWhhdmVhdHRyczwvdGFnY2xhc3M+Ci0JCTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+bmFtZTwvbmFtZT4KLQkJCTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci0JCTwvYXR0cmlidXRlPgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+c2NvcGU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotCQk8L2F0dHJpYnV0ZT4KLQk8L3RhZz4KLQk8dGFnPgotCQk8bmFtZT5pcmVxYXR0cnM8L25hbWU+Ci0JCTx0YWdjbGFzcz5ub3RoaW5nLnRhZ2xpYi5pcmVxYXR0cnM8L3RhZ2NsYXNzPgotCQk8Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLQkJPGF0dHJpYnV0ZT4KLQkJCTxuYW1lPm5hbWU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci0JCTwvYXR0cmlidXRlPgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+c2NvcGU8L25hbWU+Ci0JCQk8cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotCQk8L2F0dHJpYnV0ZT4KLQk8L3RhZz4KLQk8dGFnPgotCQk8bmFtZT5lbXB0eW1lPC9uYW1lPgotCQk8dGFnY2xhc3M+bm90aGluZy50YWdsaWIuZW1wdHltZTwvdGFnY2xhc3M+Ci0JCTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotCTwvdGFnPgotCTx0YWc+Ci0JCTxuYW1lPmVtcHR5Ym9keWNvbnRlbnQ8L25hbWU+Ci0JCTx0YWdjbGFzcz5ub3RoaW5nLnRhZ2xpYi5lbXB0eW1lPC90YWdjbGFzcz4KLQkJPGJvZHljb250ZW50PmVtcHR5PC9ib2R5Y29udGVudD4KLQk8L3RhZz4KLTwvdGFnbGliPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlYmNjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnRlc3R2YWxpZGF0ZWpzcGFjdGlvbnM8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvbm9uZW1wdHlpbmxpbmV0YWcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvbm9uZW1wdHlpbmxpbmV0YWcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGU4MzQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L25vbmVtcHR5aW5saW5ldGFnLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vbm90aGluZy5jb20vbGlidGFncyIgcHJlZml4PSJsaWJ0YWdzIiU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08bGlidGFnczplbXB0eWJvZHljb250ZW50Pmkgc2hvdWxkIGhhdmUgYW4gZW1wdHkgYm9keTwvbGlidGFnczplbXB0eWJvZHljb250ZW50PgotPGxpYnRhZ3M6ZW1wdHltZT5ub3RoaW5nPC9saWJ0YWdzOmVtcHR5bWU+Ci08bGlidGFnczplbXB0eWJvZHljb250ZW50IC8+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvbm9yZXF1aXJlZGF0dHJpYnV0ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC9ub3JlcXVpcmVkYXR0cmlidXRlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmNGYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC9ub3JlcXVpcmVkYXR0cmlidXRlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9ub3RoaW5nLmNvbS9saWJ0YWdzIiBwcmVmaXg9ImxpYnRhZ3MiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxsaWJ0YWdzOmlyZXFhdHRycz48L2xpYnRhZ3M6aXJlcWF0dHJzPgotPGpzcDphdHRyaWJ1dGU+PC9qc3A6YXR0cmlidXRlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvdW5kZWZpbmVkYXR0cmlidXRlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L3VuZGVmaW5lZGF0dHJpYnV0ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZTcyNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvdW5kZWZpbmVkYXR0cmlidXRlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9ub3RoaW5nLmNvbS9saWJ0YWdzIiBwcmVmaXg9ImxpYnRhZ3MiJT4KLTwlQCBwYWdlIGlkb250PSJ3b3JrIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGxpYnRhZ3M6ZW1wdHltZSBpZG9udD0id29yayI+PC9saWJ0YWdzOmVtcHR5bWU+Ci08anNwOmJvZHkgaWRvbnQ9IndvcmsiPjwvanNwOmJvZHk+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvd29ya3NmaW5lLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9XZWJDb250ZW50L3dvcmtzZmluZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YWNiNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BhY3Rpb25zL1dlYkNvbnRlbnQvd29ya3NmaW5lLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9ub3RoaW5nLmNvbS9saWJ0YWdzIiBwcmVmaXg9ImxpYnRhZ3MiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxsaWJ0YWdzOmVtcHR5bWU+PC9saWJ0YWdzOmVtcHR5bWU+Ci08anNwOmF0dHJpYnV0ZSBuYW1lPSJuYW1lZCI+PC9qc3A6YXR0cmlidXRlPgotPCUtLSBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGVzIGNhbiBiZSBkZWZpbmVkIHVzaW5nIGpzcDphdHRyaWJ1dGUgLS0lPgotPGxpYnRhZ3M6aXJlcWF0dHJzPjxqc3A6YXR0cmlidXRlIG5hbWU9Im5hbWUiPjwvanNwOmF0dHJpYnV0ZT48L2xpYnRhZ3M6aXJlcWF0dHJzPgotPGxpYnRhZ3M6aXJlcWF0dHJzIG5hbWU9IjwlPSAibmFtZWQiJT4iIHNjb3BlPSI8JT0gImV4cHJlc3Npb24iICU+Ij48L2xpYnRhZ3M6aXJlcWF0dHJzPgotPGxpYnRhZ3M6aWhhdmVhdHRycyBuYW1lPSJib28iPjwvbGlidGFnczppaGF2ZWF0dHJzPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwYWN0aW9ucy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGFjdGlvbnMvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjIwNzVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnRlc3R2YWxpZGF0ZWpzcGFjdGlvbnM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmViY2M4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+dGVzdHZhbGlkYXRlanNwYWN0aW9uczwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9idWcyNjU3MTBlbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9idWcyNjU3MTBlbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZmZmODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvYnVnMjY1NzEwZWwuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08anNwOmluY2x1ZGUgcGFnZT0iJHtwYXJhbS5nb3RvfSI+PC9qc3A6aW5jbHVkZT4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2J1ZzI2NTcxMGV4cHJlc3Npb24uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvYnVnMjY1NzEwZXhwcmVzc2lvbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNTkzNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvYnVnMjY1NzEwZXhwcmVzc2lvbi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08JQotCVN0cmluZyByZWRpcmVjdCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJnb3RvIik7Ci0lPgotCi08anNwOmluY2x1ZGUgcGFnZT0iPCU9IHJlZGlyZWN0ICU+Ij48L2pzcDppbmNsdWRlPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvZnJhZ21lbnQuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2ZyYWdtZW50LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2U0YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvZnJhZ21lbnQuanNwZgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTxkaXYgaWQ9ImNvbnRlbnQiPjwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L3Rlc3RpbmNsdWRlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L3Rlc3RpbmNsdWRlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiN2Q3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC90ZXN0aW5jbHVkZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxqc3A6aW5jbHVkZSBwYWdlPSJmcmFnbWVudC5qc3BmIj48L2pzcDppbmNsdWRlPgotPGpzcDppbmNsdWRlIHBhZ2U9ImZyYWdtZW50VGhhdERvZXNudEV4aXN0LmpzcGYiPjwvanNwOmluY2x1ZGU+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjgyYzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1qc3BlbmNvZGluZ3Rlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTYxZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4NGZmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDoganNwZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjg3OGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS5qc3BlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5qc3BlbmNvZGluZ3Rlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGpzcGVuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODIwNzNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBKU1AgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwOTdlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQOwotCi1wdWJsaWMgY2xhc3MgSlNQRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117SlNQRW5jb2RpbmdUZXN0cy5jbGFzcywgSlNQSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkpTUCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkZWNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Nzc3YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLQotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAianNwLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJdHJ5IHsKLQkJCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSAoKEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmIHRocm93cyBleGNlcHRpb24uCi0JCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdGRlZmVjdDQyMDV3cHNqc3AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZGVmZWN0XzQyMDVfd3BzLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIENhdXRpb24sIHdoZW4gdGhpcyBmaWxlIHByaW50cyBvdXQgaW4gY29uc29sZSAod2hlbiBkZWJ1ZyBzZXQgdG8gdHJ1ZSwKLQkgKiBpdCBhcHBlYXJzIGluY29ycmVjdCAoZHVlIHRvIGZvbnQgcHJvYmxlbXMgaW4gY29uc29sZSkuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RVVEYxNi5qc3AiOwotCQkvLyBbMjI4MzY2XSBFbmNvZGluZyBjaGFuZ2VzOiBGb3IgVVRGLTE2IHdpdGggQk9NLCB0aGUgZXhwZWN0ZWQgc2hvdWxkIGJlIFVURi0xNgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICogTm90ZTogVVRGLTE2ID09IFVURi0xNkJFCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIjsKLQkJLy8gWzIyODM2Nl0gRW5jb2RpbmcgY2hhbmdlczogRm9yIFVURi0xNiB3aXRoIEJPTSwgdGhlIGV4cGVjdGVkIHNob3VsZCBiZSBVVEYtMTYKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2V2l0aEphcGFuZXNlQ2hhcnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiOwotCQkvLyBbMjI4MzY2XSBFbmNvZGluZyBjaGFuZ2VzOiBGb3IgVVRGLTE2IHdpdGggQk9NLCB0aGUgZXhwZWN0ZWQgc2hvdWxkIGJlIFVURi0xNgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGODNCeXRlQk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjhXaXRoM0J5dGVCT00uanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlWG1sU3R5bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZV94bWxTdHlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBhZTgwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZDaGFyc2V0OwotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZTsKLQlwcml2YXRlIFN0cmluZyBmQ29udGVudFR5cGVWYWx1ZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImpzcC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZkxhbmd1YWdlOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSwgU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJZG9UZXN0RmlsZShKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpLCBleHBlY3RlZE5hbWUsIGZpbmFsVG9rZW5UeXBlLCBleHBlY3RlZENvbnRlbnRUeXBlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyJcIiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoUmVhZGVyIGZpbGVSZWFkZXIsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSwgU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BIZWFkVG9rZW5pemVyIHRva2VuaXplciA9IG51bGw7Ci0JCXRva2VuaXplciA9IG5ldyBKU1BIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBwYXJzZUhlYWRlcih0b2tlbml6ZXIpOwotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCk7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCi0JCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRWYWx1ZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUpKTsKLQkJfQotCi0JCVN0cmluZyBmb3VuZENvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGUoKTsKLQkJaWYgKGV4cGVjdGVkQ29udGVudFR5cGUgPT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gY29udGVudFR5cGUsIGJ1dCBmb3VuZDogIiArIGZvdW5kQ29udGVudFR5cGUsIGZvdW5kQ29udGVudFR5cGUgPT0gbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICIgYnV0IGZvdW5kICIgKyBmb3VuZENvbnRlbnRUeXBlLCBleHBlY3RlZENvbnRlbnRUeXBlLmVxdWFscyhmb3VuZENvbnRlbnRUeXBlKSk7Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04Iik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RkZWZlY3QyMjMzNjUoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlNlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8qKgotCSAqIHJldHVybnMgZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHByaW9yaXR5OiAxLiBYTUwgRGVjbGFyYXRpb24gMi4gcGFnZQotCSAqIGRpcmVjdGl2ZSBwYWdlRW5jb2RpbmcgbmFtZSAzLiBwYWdlIGRpcmVjdGl2ZSBjb250ZW50VHlwZSBjaGFyc2V0IG5hbWUKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKGZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JCWVsc2UgaWYgKGZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKQotCQkJcmVzdWx0ID0gZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQllbHNlIGlmIChmQ2hhcnNldCAhPSBudWxsKQotCQkJcmVzdWx0ID0gZkNoYXJzZXQ7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoKSB7Ci0JCXJldHVybiBmQ29udGVudFR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBpcyBpbgotCSAqIEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcgotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50VHlwZQotCSAqLwotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCS8qCi0JCSAqIEJhc2VkIHBhcnRpYWxseSBvbgotCQkgKiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXJJbXBsCi0JCSAqIC5nZXRNaW1lVHlwZUZyb21Db250ZW50VHlwZVZhbHVlKFN0cmluZykgLCBkaXZpZGVzIHRoZSBmdWxsIHZhbHVlCi0JCSAqIGludG8gc2VnbWVudHMgYWNjb3JkaW5nIHRvICc7JywgYXNzdW1lcyB0aGUgZmlyc3Qgc3BlY2lmaWVzIHRoZQotCQkgKiBjb250ZW50IHR5cGUgaXRzZWxmIGlmIGl0IGhhcyBubyAnPScsIGFuZCB0aGF0IHRoZSByZW1haW5kZXIgYXJlCi0JCSAqIHBhcmFtZXRlcnMgd2hpY2ggbWF5IHNwZWNpZnkgYSBjaGFyc2V0Ci0JCSAqLwotCQkKLQkJU3RyaW5nIGNsZWFuQ29udGVudFR5cGVWYWx1ZSA9IFN0cmluZ1V0aWxzLnN0cmlwTm9uTGV0dGVyRGlnaXRzKGNvbnRlbnRUeXBlKTsKLQkJLyogQnJlYWsgdGhlIG1pbWUgaGVhZGVyIGludG8gdGhlIG1haW4gdmFsdWUgYW5kIGl0cyBwYXJhbWV0ZXJzLCBzZXBhcmF0ZWQgYnkgJzsnICovCi0JCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNsZWFuQ29udGVudFR5cGVWYWx1ZSwgIjsiKTsgLy8kTk9OLU5MUy0xJAotCQlpbnQgdExlbiA9IHRva2VuaXplci5jb3VudFRva2VucygpOwotCQlpZiAodExlbiA9PSAwKQotCQkJcmV0dXJuOwotCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nW3RMZW5dOwotCQlpbnQgaiA9IDA7Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQl0b2tlbnNbal0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JCQlqKys7Ci0JCX0KLQkJCi0JCWludCBmaXJzdFBhcmFtZXRlciA9IDA7Ci0JCWlmICh0b2tlbnNbMF0uaW5kZXhPZignPScpID09IC0xKSB7Ci0JCQkvKgotCQkJICogbm8gZXF1YWwgc2lnbiBpbiB0aGUgZmlyc3Qgc2VnbWVudCwgc28gYXNzdW1lIGl0IGluZGljYXRlcyBhCi0JCQkgKiBjb250ZW50IHR5cGUgcHJvcGVybHkKLQkJCSAqLwotCQkJZkNvbnRlbnRUeXBlID0gdG9rZW5zWzBdLnRyaW0oKTsKLQkJCWZpcnN0UGFyYW1ldGVyID0gMTsKLQkJfQotCQkvKgotCQkgKiBub3cgaGFuZGxlIHBhcmFtZXRlcnMgYXMgbmFtZT12YWx1ZSBwYWlycywgbG9va2luZyBmb3IgImNoYXJzZXQiCi0JCSAqIHNwZWNpZmljYWxseQotCQkgKi8KLQkJUGF0dGVybiBlcXVhbFBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxccyo9XFxzKiIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSBmaXJzdFBhcmFtZXRlcjsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nW10gcGFpciA9IGVxdWFsUGF0dGVybi5zcGxpdCh0b2tlbnNbaV0pOwotCQkJaWYgKHBhaXIubGVuZ3RoIDwgMikKLQkJCQljb250aW51ZTsKLQkJCWlmIChwYWlyWzBdLnRyaW0oKS5lcXVhbHMoImNoYXJzZXQiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJZkNoYXJzZXQgPSBwYWlyWzFdLnRyaW0oKTsKLQkJCX0KLQkJfQotCi0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihKU1BIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JCWZDaGFyc2V0ID0gbnVsbDsKLQkJZkNvbnRlbnRUeXBlID0gbnVsbDsKLQkJZkNvbnRlbnRUeXBlVmFsdWUgPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gZmluYWxUb2tlbiA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJU3RyaW5nIHRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQotCQkJaWYoY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKHRva2VuVHlwZSkpIHsKLQkJCQkKLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBYTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlhNTERlbEVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZYTUxEZWNFbmNvZGluZ05hbWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBKU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlBhZ2VFbmNvZGluZykgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmUGFnZUVuY29kaW5nVmFsdWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBKU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlBhZ2VDb250ZW50VHlwZSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmQ29udGVudFR5cGVWYWx1ZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHMuUGFnZUxhbmd1YWdlKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZMYW5ndWFnZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJaWYgKGZDb250ZW50VHlwZVZhbHVlICE9IG51bGwpIHsKLQkJCXBhcnNlQ29udGVudFR5cGVWYWx1ZShmQ29udGVudFR5cGVWYWx1ZSk7Ci0JCX0KLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGNhbkhhbmRsZUFzVW5pY29kZVN0cmVhbShTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGODNCeXRlQk9NKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mQ2hhcnNldCA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZCRSB8fCB0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZMRSkgewotCQkJY2FuSGFuZGxlQXNVbmljb2RlID0gdHJ1ZTsKLQkJCXRoaXMuZkNoYXJzZXQgPSAiVVRGLTE2IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiBjYW5IYW5kbGVBc1VuaWNvZGU7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2UuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTIiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1pbmltYWxQYWdlRGlyZWN0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJtaW5pbWFsUGFnZURpcmVjdGl2ZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDIuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIklsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTgiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTIiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vUGFnZURpcmVjdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsUGFnZURpcmVjdGl2ZVdpdGhYTUxEZWNsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5NQVhfQ0hBUlNfUkVBQ0hFRCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbENhc2VXaXRoTmVpdGhlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2hhcnNldCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0zIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0JCi0JLyoKLQkJc3VuLmlvLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uCi0JCWF0IHN1bi5pby5CeXRlVG9DaGFyVVRGOC5jb252ZXJ0KEJ5dGVUb0NoYXJVVEY4LmphdmE6MjYyKQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuY29udmVydEludG8oU3RyZWFtRGVjb2Rlci5qYXZhOjMxNCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyJENvbnZlcnRlclNELmltcGxSZWFkKFN0cmVhbURlY29kZXIuamF2YTozNjQpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2Rlci5yZWFkKFN0cmVhbURlY29kZXIuamF2YToyNTApCi0JCWF0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIucmVhZChJbnB1dFN0cmVhbVJlYWRlci5qYXZhOjIxMikKLQkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXIuenpSZWZpbGwoSlNQSGVhZFRva2VuaXplci5qYXZhOjM1OSkKLQkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXIucHJpbUdldE5leHRUb2tlbihKU1BIZWFkVG9rZW5pemVyLmphdmE6NTk4KQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplci5nZXROZXh0VG9rZW4oSlNQSGVhZFRva2VuaXplci5qYXZhOjI1NCkKLQkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuSlNQSGVhZFRva2VuaXplclRlc3Rlci5wYXJzZUhlYWRlcihKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MTgyKQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjU4KQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BIZWFkVG9rZW5pemVyVGVzdGVyLnRlc3RVVEYxNkJPTShKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MzI0KQotCSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLypTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uanNwIjsKLQkJWmlwcGVkVGVzdCB0ZXN0ID0gbmV3IFppcHBlZFRlc3QoKTsKLQkJdGVzdC5zZXRVcCgpOwotCQlJRmlsZSBmaWxlID0gdGVzdC5nZXRGaWxlKGZpbGVuYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlLmdldExvY2F0aW9uVVJJKCkuZ2V0UGF0aCgpKTsKLQkJZG9UZXN0RmlsZShmaWxlUmVhZGVyLCAiVVRGLTE2IiwgbnVsbCwgbnVsbCk7Ci0JCXRlc3Quc2h1dERvd24oKTsqLwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZVhtbFN0eWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlX3htbFN0eWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZMRSIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0JCXJldHVybiBmTGFuZ3VhZ2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzMjE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3A7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbiwgU3RyaW5nIGV4cGVjdGVkSlNQQ29udGVudFR5cGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZENvbnRlbnRUeXBlLCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCQkKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZ2V0VGVzdFByb2plY3QoKS5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCi0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25TdHJlYW0oZmlsZSk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZmlsZUNvbnRlbnREZXNjcmlwdGlvbiA9IGRvR2V0Q29udGVudFR5cGVCYXNlZE9uRmlsZShmaWxlKTsKLQotCQlTdHJpbmcgc3RyZWFtSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFKTsKLQotCQljaGVja1Jlc3VsdHMoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSwgc3RyZWFtSlNQQ29udGVudFR5cGUpOwotCQkKLQkJCi0JCVN0cmluZyBmaWxlSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSk7Ci0JCWNoZWNrUmVzdWx0cyhleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBmaWxlSlNQQ29udGVudFR5cGUpOwotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHRzKFN0cmluZyBleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBTdHJpbmcgZm91bmRKU1BDb250ZW50VHlwZSkgewotCQlpZiAoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSA9PSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBjb250ZW50VHlwZSwgYnV0IGZvdW5kOiAiICsgZm91bmRKU1BDb250ZW50VHlwZSwgZm91bmRKU1BDb250ZW50VHlwZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZEpTUENvbnRlbnRUeXBlICsgIiBidXQgZm91bmQgIiArIGZvdW5kSlNQQ29udGVudFR5cGUsIGV4cGVjdGVkSlNQQ29udGVudFR5cGUuZXF1YWxzKGZvdW5kSlNQQ29udGVudFR5cGUpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCXB1YmxpYyB2b2lkIG5vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2bGUuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ2OTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLSAgICA8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgCi0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0JCTxhbnQKLQkJCXRhcmdldD0iJHt0ZXN0VHlwZX0iCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCQkgICAgCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTg/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03JT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVlYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHRhZz4NCi1BdXN0cmFsaesNCi08L3RhZz4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQotICAgIHZlcnNpb249IjEuMCINCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4NCi08eHNsOnZhcmlhYmxlIG5hbWU9ImJhZEVuY29kaW5nIj4NCi1BdXN0cmFsaesNCi08L3hzbDp2YXJpYWJsZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZTc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODllNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSI5OSIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg2MjQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZXRFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI3YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIgJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+DQotPEhUTUw+DQotPEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9TUVUQUpVTksiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxUSVRMRT5SZXN1bHRzIHBhZ2U8L1RJVExFPg0KLQ0KLTwhLS1TdHlsZXMtLT4NCi08U1RZTEUgVFlQRT0idGV4dC9jc3MiPg0KLTwhLS0NCi1CT0RZIHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KLX0NCi1IMSB7DQotCWNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7DQotCXRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KLX0NCi1USCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQljb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVREIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEgucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OSAhaW1wb3J0YW50Ow0KLX0NCi1URC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjOw0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLS0tPg0KLTwvU1RZTEU+DQotDQotDQotPCEtLVN0eWxlIFNoZWV0LS0+DQotPExJTksgaHJlZj0iL3QvdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxqc3A6dXNlQmVhbiBpZD0ic2VsQ29sQmVhblJvdzEyQmVhbiIgc2NvcGU9InNlc3Npb24iIGNsYXNzPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIgdHlwZT0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iLz4NCi08JQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLSU+DQotDQotPCUNCi0vL0V4ZWN1dGUgQmVhbiBNZXRob2RzDQotDQotDQotJT4NCi0NCi08IS0tQmFubmVyLS0+DQotPEgxPlJlc3VsdHMgcGFnZTwvSDE+DQotDQotPEJSPjxCUj4NCi0NCi08IS0tIFJlc3VsdCBUYWJsZSAtLT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi08VEJPRFk+DQotCQkJPFRSPg0KLQkJCTxUSD5URVNUMl+LjYuOi488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+Pio+Jj488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+JjYmOiY88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+NXI1ajV88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+OjY6Ojo88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQ0KLTwvVEJPRFk+DQotPC9UQUJMRSA+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTM5Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9kZWZlY3RfNDIwNV93cHMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZGJkNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgYnVmZmVyPSJub25lIiAlPg0KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvdGxkL2VuZ2luZS50bGQiIHByZWZpeD0id3BzIiAlPg0KLTx3cHM6Y29uc3RhbnRzLz4NCi0NCi08dGFibGU+DQotPHRyPjx0ZD48aW1nIGFsdD0iIiB0aXRsZT0iIiBzcmM9JzwlPSB3cHNCYXNlVVJMICU+L2ltYWdlcy93ZWxjb21lXzUuZ2lmJyBib3JkZXI9IjAiIGFsaWduPSJsZWZ0IiAvPjwvdGQ+PC90cj4NCi08dHI+PHRkPg0KLTxzcGFuIGNsYXNzPSJ3cHNUaW55VGV4dCI+PGI+PCU9IFZlcnNpb24uU0VSVkVSX05BTUUgJT4gPCU9IFZlcnNpb24uU0VSVkVSX1ZFUlNJT04gJT48L2I+PGJyLz4NCi3lu7rnva7lsaTmrKHvvJo8JT0gVmVyc2lvbi5CVUlMRF9OVU1CRVIgJT4gPCU9IFZlcnNpb24uQlVJTERfREFURSAlPiA8JT0gVmVyc2lvbi5CVUlMRF9USU1FICU+PGJyLz4NCi08YnIvPg0KLUxpY2Vuc2VkIE1hdGVyaWFscyAtIFByb3BlcnR5IG9mIElCTTxici8+DQotPCU9IFZlcnNpb24uUFJPRFVDVF9OVU1CRVIgJT48YnIvPg0KLShDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDwlPSBDb3B5cmlnaHQuWUVBUlMgJT4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3NwYW4+PC90ZD48L3RyPg0KLTwvdGFibGU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL21pbmltYWxQYWdlRGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhMjJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbCIgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjYjA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+DQotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY3OTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIA0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0zIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjI4N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0ODY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08JQ0KLVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCIpOw0KLSU+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2Y5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkMGEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJmOTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGVjMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz1VVEYtOCANCi08dGVzdD4NCi08L3Rlc3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2QwYzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgICAgPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDE3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4NCi0NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTBjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPHRlc3Q+DQotIDwlQCBwYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0NjM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4NCi0NCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotPC90ZXN0Pg0KLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMmM0MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Yjk4NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOWU4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0YzlmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTY5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmZkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmE5YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjcyMzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3M2NiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzJmMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjdmYWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGV4dC50ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImpmYWNlLnRleHQudGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E1ZTkzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLW9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHNfMS4wLjAuamFyCi1qc3B1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLVBlcmZvcm1hbmNlUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTUwZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5MjE5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC41MDAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBqc3B1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGRlc2NyaXB0aW9uLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5leGFtcGxlcywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmZvcm1hdCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWxxdWVyeSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZy50ZXN0ZmlsZXMuanNwLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucmVnaXN0cnksCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5zZWFyY2gsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy50aHJlYWRlZCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5qZHQudWksCi0gb3JnLmVjbGlwc2UuamR0LmNvcmUsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBvcmcuZWNsaXBzZS51aS52aWV3cywKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gY29tLmlibS5pY3UsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcywKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Mzk2OTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHByb2plY3R0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAganNwdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGV4dC50ZXN0cy8sXAotICAgICAgICAgICAgICAgamZhY2UudGV4dC50ZXN0cy8KLWphcnMuY29tcGlsZS5vcmRlciA9IGpzcHVpdGVzdHMuamFyCi1zb3VyY2UuanNwdWl0ZXN0cy5qYXIgPSBzcmMvLFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudGVzdHMvLFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpmYWNlLnRleHQudGVzdHMvCi1vdXRwdXQuanNwdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZGxjbDE2L3JlbV9hbGxfY28uZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2RsY2wxNi9yZW1fYWxsX2NvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkMWJlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZGxjbDE2L3JlbV9hbGxfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2RsY2wxNi9yZXN1bWVfY28uZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2RsY2wxNi9yZXN1bWVfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjUyNzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9kbGNsMTYvcmVzdW1lX2NvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9kbGNsMTYvc3VzcGVuZF9jby5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZGxjbDE2L3N1c3BlbmRfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDc3NzdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9kbGNsMTYvc3VzcGVuZF9jby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZWxjbDE2L3JlbV9hbGxfY28uZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2VsY2wxNi9yZW1fYWxsX2NvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhhMzc4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZWxjbDE2L3JlbV9hbGxfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2VsY2wxNi9yZXN1bWVfY28uZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2VsY2wxNi9yZXN1bWVfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmY0ZTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9lbGNsMTYvcmVzdW1lX2NvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9lbGNsMTYvc3VzcGVuZF9jby5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZWxjbDE2L3N1c3BlbmRfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjFlM2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9lbGNsMTYvc3VzcGVuZF9jby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0UGFpck1hdGNoZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNmUzOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQ2hyaXN0aWFuIFBsZXNuZXIgSGFuc2VuIChwbGVzbmVyQHF1ZW50YS5vcmcpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRmFzdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVByZWRpY2F0ZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuU2luZ2xlTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQ2hhcmFjdGVyUGFpck1hdGNoZXI7Ci0KLS8qKgotICogR2VuZXJpYyB0ZXN0IG9mIHNpbXBsZSBjaGFyYWN0ZXIgcGFpciBtYXRjaGVycwotICoKLSAqIEBzaW5jZSAzLjMKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyBjaGFyYWN0ZXIgcGFpciBtYXRjaGVyLgotCSAqIAotCSAqIEBwYXJhbSBjaGFycyB0aGUgY2hhcmFjdGVycyB0byBtYXRjaAotCSAqIEByZXR1cm4gdGhlIGNoYXJhY3RlciBwYWlyIG1hdGNoZXIKLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgSUNoYXJhY3RlclBhaXJNYXRjaGVyIGNyZWF0ZU1hdGNoZXIoZmluYWwgU3RyaW5nIGNoYXJzKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhcnRpdGlvbmluZyB0cmVhdGVkIGJ5IHRoZSBtYXRjaGVyLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHBhcnRpdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKTsKLQotCXB1YmxpYyBBYnN0cmFjdFBhaXJNYXRjaGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyogLS0tIFQgZSBzIHQgcyAtLS0gKi8KLQotCS8qKiBUZXN0cyB0aGF0IHRoZSB0ZXN0IGNhc2UgcmVhZGVyIHdvcmtzICovCi0JcHVibGljIHZvaWQgdGVzdFRlc3RDYXNlUmVhZGVyKCkgewotCQlwZXJmb3JtUmVhZGVyVGVzdCgiIyggKSUiLCAzLCAgMCwgICIoICkiKTsKLQkJcGVyZm9ybVJlYWRlclRlc3QoIiUoICkjIiwgMCwgIDMsICAiKCApIik7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIoICklIiwgIDMsICAtMSwgIiggKSIpOwotCQlwZXJmb3JtUmVhZGVyVGVzdCgiIyUiLCAgICAwLCAgMCwgICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJ5IHNpbXBsZSBjaGVja3MuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVNYXRjaFNhbWVNYXRjaGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoICAgKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjWyAgIF0lIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiI3sgICB9JSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglICAgKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJbJSAgIF0jIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAieyUgICB9IyIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJ5IHNpbXBsZSBjaGVja3MuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVNYXRjaERpZmZlcmVudE1hdGNoZXJzKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiIyggICApJSIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIjWyAgIF0lIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIiN7ICAgfSUiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiKCUgICApIyIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICJbJSAgIF0jIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgInslICAgfSMiKTsKLQl9Ci0KLQkvKioKLQkgKiBDbG9zZSBtYXRjaGVzLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VNYXRjaGVzKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSkjIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIygoKSklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUoKSkjIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCglKSMpIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCMoKSUpIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCi0JLyoqCi0JICogQ2hlY2tzIG9mIHNpbXBsZSBzaXR1YXRpb25zIHdoZXJlIG5vIG1hdGNoZXMgc2hvdWxkIGJlIGZvdW5kLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZU1hdGNoKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiUoICApIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCAlICkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoICAlKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiUiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0aGF0IGl0IGRvZXNuJ3QgbWF0Y2ggYWNyb3NzIGRpZmZlcmVudCBwYXJ0aXRpb25zLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGFydGl0aW9uZWQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgfGEgYXwgKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjKCB8YSBhfCApJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxiICMoICklIGJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCB8YiApJSBifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglIHxiICkgYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YSAoIGF8ICklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGEgKCUgYXwgKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjICMoIGN8ICkgKCB8YyApJSBjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjICglIGN8ICkgKCB8YyApIyBjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglIHxhICkgYXwgfGIgKSBifCB8YyApIGN8ICkjIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBuZXh0IHRvIHBhcnRpdGlvbiBib3VuZGFyaWVzLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGlnaHRQYXJ0aXRpb25lZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIofGIpJWJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCV8YilifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhKGF8KSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YSglYXwpIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMjKGN8KSh8YyklY3wiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YyglY3wpKHxjKSNjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglfGEpYXx8YilifHxjKWN8KSMiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqIFRlc3QgdGhhdCBuZXN0aW5nIHdvcmtzIHByb3Blcmx5ICovCi0JcHVibGljIHZvaWQgdGVzdE5lc3RpbmcoKSB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAjKCAoICggKSApICggKSApJSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICglICggKCApICkgKCApICkjICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggIyggeyAoICkgfSBbIF0gKSUgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAoJSB7ICggKSB9IFsgXSApIyApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICggI3sgKCApIH0lIFsgXSApICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCB7JSAoICkgfSMgWyBdICkgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIjKGMoZChlKWYpZyhoKWkpJWopayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiglYyhkKGUpZilnKGgpaSkjailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiIyhje2QoZSlmfWdbaF1pKSVqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIoJWN7ZChlKWZ9Z1toXWkpI2opayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYihjI3tkKGUpZn0lZ1toXWkpailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKGN7JWQoZSlmfSNnW2hdaSlqKWsiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBhIGZldyBib3VuZGFyeSBjb25kaXRpb25zLgotCSAqIAotCSAqICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCb3VuZGFyaWVzKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlmaW5hbCBTdHJpbmdEb2N1bWVudCBkb2M9IG5ldyBTdHJpbmdEb2N1bWVudCgiYWJjZGVmZ2hpamtsIik7Ci0JCWFzc2VydE51bGwobWF0Y2hlci5tYXRjaChudWxsLCAwKSk7Ci0JCWFzc2VydE51bGwobWF0Y2hlci5tYXRjaChkb2MsIC0xKSk7Ci0JCWFzc2VydE51bGwobWF0Y2hlci5tYXRjaChkb2MsIGRvYy5nZXRMZW5ndGgoKSArIDEpKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE1NjQyNigpIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fTw+Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICMoIGEgPCBiICklICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoJSBhIDwgYiApIyAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgIyggYSA+IGIgKSUgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICglIGEgPiBiICkjICIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKiAtLS0gVSB0IGkgbCBpIHQgaSBlIHMgLS0tICovCi0KLQkvKioKLQkgKiBDaGVja3MgdGhhdCB0aGUgdGVzdCBjYXNlIHJlYWRlciByZWFkcyB0aGUgdGVzdCBjYXNlIGFzIHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gdGVzdFN0cmluZyB0aGUgc3RyaW5nIHRvIHRlc3QKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQb3MgdGhlIGV4cGVjdGVkIHBvc2l0aW9uCi0JICogQHBhcmFtIGV4cGVjdGVkTWF0Y2ggdGhlIGV4cGVjdGVkIG1hdGNoCi0JICogQHBhcmFtIGV4cGVjdGVkU3RyaW5nIHRoZSBleHBlY3RlZCBzdHJpbmcKLQkgKi8KLQlwcml2YXRlIHZvaWQgcGVyZm9ybVJlYWRlclRlc3QoU3RyaW5nIHRlc3RTdHJpbmcsIGludCBleHBlY3RlZFBvcywgaW50IGV4cGVjdGVkTWF0Y2gsIFN0cmluZyBleHBlY3RlZFN0cmluZykgewotCQlUZXN0Q2FzZSB0MD0gY3JlYXRlVGVzdENhc2UodGVzdFN0cmluZyk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZFBvcywgdDAuZlBvcyk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZE1hdGNoLCB0MC5mTWF0Y2gpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHQwLmZTdHJpbmcpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyB0aGF0IHRoZSBnaXZlbiBtYXRjaGVyIG1hdGNoZXMgdGhlIGlucHV0IGFzIHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gbWF0Y2hlciB0aGUgbWF0Y2hlcgotCSAqIEBwYXJhbSB0ZXN0Q2FzZSB0aGUgdGVzdCBzdHJpbmcKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtTWF0Y2goZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXIsIGZpbmFsIFN0cmluZyB0ZXN0Q2FzZSkgewotCQlmaW5hbCBUZXN0Q2FzZSB0ZXN0PSBjcmVhdGVUZXN0Q2FzZSh0ZXN0Q2FzZSk7Ci0JCW1hdGNoZXIuY2xlYXIoKTsKLQkJZmluYWwgSVJlZ2lvbiByZWdpb249IG1hdGNoZXIubWF0Y2godGVzdC5nZXREb2N1bWVudCgpLCB0ZXN0LmZQb3MpOwotCQlpZiAodGVzdC5mTWF0Y2ggPT0gLTEpIHsKLQkJCS8vIGlmIG5vIG1hdGNoIHBvaW50IGhhcyBiZWVuIHNwZWNpZmllZCB0aGVyZSBzaG91bGQgYmUKLQkJCS8vIG5vIG1hdGNoCi0JCQlpZiAocmVnaW9uICE9IG51bGwpIFN5c3RlbS5vdXQucHJpbnRsbihyZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQkJYXNzZXJ0TnVsbChyZWdpb24pOwotCQl9IGVsc2UgewotCQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCQkJZmluYWwgYm9vbGVhbiBpc0ZvcndhcmQ9IHRlc3QuZlBvcyA+IHRlc3QuZk1hdGNoOwotCQkJYXNzZXJ0RXF1YWxzKGlzRm9yd2FyZCwgbWF0Y2hlci5nZXRBbmNob3IoKSA9PSBJQ2hhcmFjdGVyUGFpck1hdGNoZXIuUklHSFQpOwotCQkJLy8gSWYgdGhlIG1hdGNoIGlzIGZvcndhcmQsIHRoZSBjdXJzZXIgaXMgb25lIGNoYXJhY3RlcgotCQkJLy8gYWZ0ZXIgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaCwgc28gd2UgbmVlZCB0byBjb3VudCBvbmUKLQkJCS8vIHN0ZXAgYmFja3dhcmRzCi0JCQlmaW5hbCBpbnQgb2Zmc2V0PSBpc0ZvcndhcmQgPyB0ZXN0LmdldE9mZnNldCgpIDogdGVzdC5nZXRPZmZzZXQoKSAtIDE7Ci0JCQlmaW5hbCBpbnQgbGVuZ3RoPSBpc0ZvcndhcmQgPyB0ZXN0LmdldExlbmd0aCgpIDogdGVzdC5nZXRMZW5ndGgoKSArIDE7Ci0JCQlhc3NlcnRFcXVhbHMobGVuZ3RoLCByZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwZXJmb3JtTWF0Y2goZmluYWwgU3RyaW5nIGRlbGltcywgZmluYWwgU3RyaW5nIHRlc3RDYXNlKSB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKGRlbGltcyk7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCB0ZXN0Q2FzZSk7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSB0ZXh0IGNhc2UgZnJvbSBhIHN0cmluZy4gSW4gdGhlIGdpdmVuIHN0cmluZyBhICclJyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUKLQkgKiBjdXJzb3IgYW5kIGEgJyMnIHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBleHBlY3RlZCBtYXRjaGluZyBjaGFyYWN0ZXIuCi0JICogCi0JICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIHRlc3QgY2FzZQotCSAqIEByZXR1cm4gdGhlIGNyZWF0ZWQgdGVzdCBjYXNlCi0JICovCi0JcHVibGljIFRlc3RDYXNlIGNyZWF0ZVRlc3RDYXNlKFN0cmluZyBzdHIpIHsKLQkJaW50IHBvcz0gc3RyLmluZGV4T2YoIiUiKTsKLQkJYXNzZXJ0RmFsc2UocG9zID09IC0xKTsKLQkJaW50IG1hdGNoPSBzdHIuaW5kZXhPZigiIyIpOwotCQkvLyBhY2NvdW50IGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCBwb3NpdGlvbiBtYXJrZXIsCi0JCS8vIGlmIHRoZXJlIGlzIG9uZQotCQlpZiAobWF0Y2ggIT0gLTEgJiYgbWF0Y2ggPCBwb3MpIHBvcyAtPSAxOwotCQlpZiAocG9zIDwgbWF0Y2gpIG1hdGNoIC09IDE7Ci0JCWZpbmFsIFN0cmluZyBzdHJpcHBlZD0gc3RyLnJlcGxhY2VBbGwoIiUiLCAiIikucmVwbGFjZUFsbCgiIyIsICIiKTsKLQkJcmV0dXJuIG5ldyBUZXN0Q2FzZShzdHJpcHBlZCwgcG9zLCBtYXRjaCk7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBUZXN0Q2FzZSB7Ci0KLQkJcHVibGljIGZpbmFsIFN0cmluZyBmU3RyaW5nOwotCQlwdWJsaWMgZmluYWwgaW50IGZQb3MsIGZNYXRjaDsKLQotCQlwdWJsaWMgVGVzdENhc2UoU3RyaW5nIHN0cmluZywgaW50IHBvcywgaW50IG1hdGNoKSB7Ci0JCQlmU3RyaW5nPSBzdHJpbmc7Ci0JCQlmUG9zPSBwb3M7Ci0JCQlmTWF0Y2g9IG1hdGNoOwotCQl9Ci0KLQkJcHVibGljIElEb2N1bWVudCBnZXREb2N1bWVudCgpIHsKLQkJCXJldHVybiBuZXcgU3RyaW5nRG9jdW1lbnQoZlN0cmluZyk7Ci0JCX0KLQotCQlwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKLQkJCXJldHVybiBNYXRoLmFicyhmUG9zIC0gZk1hdGNoKTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0T2Zmc2V0KCkgewotCQkJaWYgKGZQb3MgPiBmTWF0Y2gpIHJldHVybiBmTWF0Y2g7Ci0JCQlyZXR1cm4gZlBvczsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBjbGFzcyBTdHJpbmdEb2N1bWVudCBleHRlbmRzIERvY3VtZW50IHsKLQotCQlwdWJsaWMgU3RyaW5nRG9jdW1lbnQoU3RyaW5nIHN0cikgewotCQkJdGhpcy5zZXRUZXh0U3RvcmUobmV3IFN0cmluZ1RleHRTdG9yZShzdHIpKTsKLQkJCXRoaXMuc2V0KHN0cik7Ci0JCQlmaW5hbCBJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0PSBjcmVhdGVQYXJ0aXRpb25lcigpOwotCQkJdGhpcy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGdldERvY3VtZW50UGFydGl0aW9uaW5nKCksIHBhcnQpOwotCQkJcGFydC5jb25uZWN0KHRoaXMpOwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBTdHJpbmdUZXh0U3RvcmUgaW1wbGVtZW50cyBJVGV4dFN0b3JlIHsKLQotCQlwcml2YXRlIFN0cmluZyBmU3RyaW5nOwotCi0JCXB1YmxpYyBTdHJpbmdUZXh0U3RvcmUoZmluYWwgU3RyaW5nIHN0cikgewotCQkJZlN0cmluZz0gc3RyOwotCQl9Ci0KLQkJcHVibGljIGNoYXIgZ2V0KGludCBvZmZzZXQpIHsKLQkJCXJldHVybiBmU3RyaW5nLmNoYXJBdChvZmZzZXQpOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXQoaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotCQkJcmV0dXJuIGZTdHJpbmcuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQkJcmV0dXJuIGZTdHJpbmcubGVuZ3RoKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZXBsYWNlKGludCBvZmZzZXQsIGludCBsZW5ndGgsIFN0cmluZyB0ZXh0KSB7Ci0JCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgdGV4dCkgewotCQkJZlN0cmluZz0gdGV4dDsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERFRkFVTFRfUEFSVElUSU9OPSBJRG9jdW1lbnQuREVGQVVMVF9DT05URU5UX1RZUEU7Ci0KLQlwcml2YXRlIHN0YXRpYyBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcigpIHsKLQkJZmluYWwgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lciBzY2FuPSBuZXcgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcigpOwotCQlmaW5hbCBMaXN0Lyo8SVByZWRpY2F0ZVJ1bGU+Ki8gcnVsZXM9IG5ldyBBcnJheUxpc3QvKjxJUHJlZGljYXRlUnVsZT4qLygpOwotCQlydWxlcy5hZGQobmV3IFNpbmdsZUxpbmVSdWxlKCJ8YSIsICJhfCIsIG5ldyBUb2tlbigiYSIpKSk7Ci0JCXJ1bGVzLmFkZChuZXcgU2luZ2xlTGluZVJ1bGUoInxiIiwgImJ8IiwgbmV3IFRva2VuKCJiIikpKTsKLQkJcnVsZXMuYWRkKG5ldyBTaW5nbGVMaW5lUnVsZSgifGMiLCAiY3wiLCBuZXcgVG9rZW4oImMiKSkpOwotCQlzY2FuLnNldFByZWRpY2F0ZVJ1bGVzKChJUHJlZGljYXRlUnVsZVtdKSBydWxlcy50b0FycmF5KG5ldyBJUHJlZGljYXRlUnVsZVtydWxlcy5zaXplKCldKSk7Ci0JCXNjYW4uc2V0RGVmYXVsdFJldHVyblRva2VuKG5ldyBUb2tlbihERUZBVUxUX1BBUlRJVElPTikpOwotCQlyZXR1cm4gbmV3IEZhc3RQYXJ0aXRpb25lcihzY2FuLCBuZXcgU3RyaW5nW10geyBERUZBVUxUX1BBUlRJVElPTiwgImEiLCAiYiIsICJjIiB9KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0VW5kb01hbmFnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFlNzAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0VW5kb01hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uNDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotCi0vKioKLSAqIFRlc3RzIGZvciBEZWZhdWx0VW5kb01hbmFnZXIuIENoYW5nZWQgZnJvbSB0aGUgSkZhY2Ugb3JpZ2luYWwgdG8gY3JlYXRlcwotICogYW5kIHRlc3QgYWdhaW5zdCBhIHN0cnVjdHVyZWQgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKiBUaGUgbWF4aW11bSB1bmRvIGxldmVsLiAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVU5ET19MRVZFTD0gMjU2OwotCi0JLyoqIFRoZSBzaGVsbC4gKi8KLQlwcml2YXRlIFNoZWxsIGZTaGVsbDsKLQkvKiogVGhlIHRleHQgdmlld2VyLiAqLwotCXByaXZhdGUgSVRleHRWaWV3ZXIgZlRleHRWaWV3ZXI7Ci0JLyoqIFRoZSB1bmRvIG1hbmFnZXIuICovCi0JcHJpdmF0ZSBJVW5kb01hbmFnZXIgZlVuZG9NYW5hZ2VyOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPT1BfQ09VTlQ9IDIwOwotCi0JLy8tLS0gU3RhdGljIGRhdGEgc2V0cyBmb3IgY29tcGFyaW5nIHNjZW5hcmlvcyAtIG9idGFpbmVkIGZyb20gY2FwdHVyaW5nIHJhbmRvbSBkYXRhIC0tLQotCS8qKiBPcmlnaW5hbCBkb2N1bWVudCAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQ9ICIrN2N5ZzovRiFUNEtuVzswK2F1JHQxRyUoYFp8dSc3J18hLWs/PGNcIjJZLl1Dd3NPLnIiOwotCS8qKiBSZXBsYWNlbWVudCBzdHJpbmcgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgW10gUkVQTEFDRU1FTlRTPSB7ICI+IiwgIkYiLCAiTS9yLSoiLCAiLSIsICJibCIsICIiLCAifSUvIyIsICIiLCAiayYiLCAiZiIsICJcXGciLCAiYyF4IiwgIlRMRy0iLCAiTlBPIiwgIlJwOXUiLCAiIiwgIlgiLCAiVygiLCAiKXoiLCAib2UiLCAiIiwgImgqIiwgInQiLCAiSSIsICJYPU4+IiwgIjJ5dCIsICImWiIsICIyKVc9IiwgIjpLIiwgIlA5UyIsICJzOHQ4byIsICIiLCAiIiwgIjV7NyIsICIlIiwgIiIsICJ2MyIsICJXeiIsICJzSCIsICIzYyIsICI4IiwgIm9sIiwgIiw2JCIsICI5NFsjIiwgIi5+IiwgIm4iLCAiPiIsICI5IiwgIlciLCAiLChGVyIsICJRIiwgIl4iLCAiQnEiLCAiJCIsICJyZSIsICIiLCAiOSIsICI4WyIsICJNeCIsICI0YiIsICIkNiIsICJGIiwgIjhzXSIsICJvIiwgIi0iLCAiRSY2IiwgIlNcXCIsICIvIiwgInouYSIsICI0YWkiLCAiYiIsICIpIiwgIiIsICJsIiwgIlZVIiwgIjdNK1FsIiwgInhaP3giLCAieHgiLCAibGMiLCAiYiIsICJBIiwgIiEiLCAiNHBTVSIsICIiLCAie0oiLCAiSCIsICJsPl8iLCAibiY5IiwgIiIsICImYCIsICI7aWdReHEiLCAiIiwgIj4iLCAiO1wiIiwgImtcXGBdRyIsICJvez8iLCAiIiwgIksiLCAiXzYiLCAiPSJ9OwotCS8qKiBQb3NpdGlvbi9vZmZzZXQgcGFpcnMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gUE9TSVRJT05TPSB7IDE4LCAyLCA0MywgMSwgMywgMiwgMjgsIDMsIDM1LCAxLCAyMywgNSwgMzIsIDIsIDMwLCAxLCAyMiwgMSwgMzcsIDAsIDIzLCAzLCA0MywgMiwgNDYsIDEsIDE3LCAxLCAzNiwgNiwgMTcsIDUsIDMwLCA0LCAyNSwgMSwgMiwgMiwgMzAsIDAsIDM3LCAzLCAyOCwgMSwgMzAsIDIsIDIwLCA1LCAzMywgMSwgMjksIDEsIDE1LCAyLCAyMSwgMiwgMjQsIDQsIDM4LCAzLCA4LCAwLCAzMywgMiwgMTUsIDIsIDI1LCAwLCA4LCAyLCAyMCwgMywgNDMsIDIsIDQ0LCAxLCA0NCwgMiwgMzIsIDIsIDQwLCAyLCAzMiwgMywgMTIsIDIsIDM4LCAzLCAzMywgMiwgNDYsIDAsIDEzLCAzLCA0NSwgMCwgMTYsIDIsIDMsIDIsIDQ0LCAwLCA0OCwgMCwgMTgsIDUsIDcsIDYsIDcsIDMsIDQwLCAwLCA5LCAxLCAxNiwgMywgMjgsIDMsIDM2LCAxLCAzNSwgMiwgMCwgMywgNiwgMSwgMTAsIDQsIDE0LCAyLCAxNSwgMywgMzMsIDEsIDM2LCAwLCAzNywgMCwgNCwgMywgMzEsIDMsIDMzLCAzLCAxMSwgMywgMjAsIDIsIDI1LCAzLCA0LCAzLCA3LCAzLCAxNywgMCwgMywgMSwgMzEsIDMsIDM0LCAxLCAyMSwgMCwgMzMsIDEsIDE3LCA0LCA5LCAxLCAyNiwgMywgMiwgMywgMTIsIDEsIDI2LCAzLCA5LCA1LCA1LCAwLCAzMSwgMywgMCwgMywgMTIsIDEsIDEsIDEsIDMsIDAsIDM5LCAwLCA5LCAyLCAyLCAwLCAyOCwgMn07Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHPSBmYWxzZTsKLQotCi0JLyoKLQkgKiBAc2VlIFRlc3RDYXNlI1Rlc3RDYXNlKFN0cmluZykKLQkgKi8KLQlwdWJsaWMgQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoKLQkgKiAgQHNlZSBUZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JCWZTaGVsbD0gbmV3IFNoZWxsKCk7Ci0JCWZVbmRvTWFuYWdlcj0gY3JlYXRlVW5kb01hbmFnZXIoTUFYX1VORE9fTEVWRUwpOwotCQlmVGV4dFZpZXdlcj0gbmV3IFRleHRWaWV3ZXIoZlNoZWxsLCBTV1QuTk9ORSk7Ci0JCWZUZXh0Vmlld2VyLnNldFVuZG9NYW5hZ2VyKGZVbmRvTWFuYWdlcik7Ci0JCWZVbmRvTWFuYWdlci5jb25uZWN0KGZUZXh0Vmlld2VyKTsKLQl9Ci0KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgSVVuZG9NYW5hZ2VyIGNyZWF0ZVVuZG9NYW5hZ2VyKGludCBtYXhVbmRvTGV2ZWwpOwotCi0JLyoKLQkgKiAgQHNlZSBUZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0JCWZVbmRvTWFuYWdlci5kaXNjb25uZWN0KCk7Ci0JCWZVbmRvTWFuYWdlcj0gbnVsbDsKLQkJZlNoZWxsLmRpc3Bvc2UoKTsKLQkJZlNoZWxsPSBudWxsOwotCQlmVGV4dFZpZXdlcj0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGZvciBsaW5lIGRlbGltaXRlciBjb252ZXJzaW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0TGluZURlbGltaXRlcnMoKSB7Ci0JCWZpbmFsIFN0cmluZyBvcmlnaW5hbD0gImFcclxuYlxyXG4iOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCXRyeSB7Ci0JCQlkb2N1bWVudC5yZXBsYWNlKDEsIDIsICJcbiIpOwotCQkJZG9jdW1lbnQucmVwbGFjZSgzLCAyLCAiXG4iKTsKLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQkvKioKLQkgKiBSYW5kb21seSBhcHBsaWVzIGRvY3VtZW50IGNoYW5nZXMuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2VzcygpIHsKLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDA7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvQ2hhbmdlKElEb2N1bWVudCBkb2N1bWVudCwgaW50IGNvdW50KSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgYmVmb3JlPSBkb2N1bWVudC5nZXQoKTsKLQotCQkJaWYgKERFQlVHKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihiZWZvcmUpOwotCi0JCQlQb3NpdGlvbiBbXSBwb3NpdGlvbnM9IG5ldyBQb3NpdGlvbltjb3VudF07Ci0JCQlTdHJpbmcgW10gc3RyaW5ncz0gbmV3IFN0cmluZ1tjb3VudF07Ci0JCQlmb3IgKGludCBpPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJCWZpbmFsIFBvc2l0aW9uIHBvc2l0aW9uPSBjcmVhdGVSYW5kb21Qb3NpdGlvblBvaXNzb24oZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQkJCWZpbmFsIFN0cmluZyBzdHJpbmc9IGNyZWF0ZVJhbmRvbVN0cmluZ1BvaXNzb24oKTsKLQkJCQlkb2N1bWVudC5yZXBsYWNlKHBvc2l0aW9uLmdldE9mZnNldCgpLCBwb3NpdGlvbi5nZXRMZW5ndGgoKSwgc3RyaW5nKTsKLQkJCQlwb3NpdGlvbnNbaV09IHBvc2l0aW9uOwotCQkJCXN0cmluZ3NbaV09IHN0cmluZzsKLQkJCX0KLQotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgieyAiKTsKLQkJCQlmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50KHBvc2l0aW9uc1tpXS5nZXRPZmZzZXQoKSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQoIiwgIik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQocG9zaXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiLCAiKTsKLQkJCQl9Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgfSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoInsgIik7Ci0JCQkJZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKyspIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiXCIiKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludChzdHJpbmdzW2ldKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiXCIsICIpOwotCQkJCX0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiB9Iik7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotCi0JLy8gcmVwZWF0YWJsZSB0ZXN0IGNhc2UgZm9yIGNvbXBhcmluZyBzdWNjZXNzL2ZhaWx1cmUgYW1vbmcgZGlmZmVyZW50IHRlc3RzCi0JcHJpdmF0ZSB2b2lkIGRvUmVwZWF0YWJsZUNoYW5nZShJRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJYXNzZXJ0VHJ1ZShQT1NJVElPTlMubGVuZ3RoID49ICgyICogUkVQTEFDRU1FTlRTLmxlbmd0aCkpOwotCQl0cnkgewotCQkJZm9yIChpbnQgaT0gMDsgaSA8IFJFUExBQ0VNRU5UUy5sZW5ndGg7IGkrKykgewotCQkJCWludCBvZmZzZXQ9IFBPU0lUSU9OU1tpKjJdOwotCQkJCWludCBsZW5ndGg9IFBPU0lUSU9OU1tpKjIrMV07Ci0JCQkJaWYgKGRvY3VtZW50LmdldExlbmd0aCgpID4gb2Zmc2V0ICsgbGVuZ3RoKQotCQkJCQlkb2N1bWVudC5yZXBsYWNlKG9mZnNldCwgbGVuZ3RoLCBSRVBMQUNFTUVOVFNbaV0pOwotCQkJCWVsc2UKLQkJCQkJZG9jdW1lbnQucmVwbGFjZSgwLDAsIFJFUExBQ0VNRU5UU1tpXSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvb3BSYW5kb21BY2Nlc3NBc0NvbXBvdW5kKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3NBc0NvbXBvdW5kKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2VzcygpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0UmFuZG9tQWNjZXNzKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2Vzc0FzVW5jbG9zZWRDb21wb3VuZCgpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0UmFuZG9tQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcENvbnZlcnRMaW5lRGVsaW1pdGVycygpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0Q29udmVydExpbmVEZWxpbWl0ZXJzKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2Vzc1dpdGhNaXhlZENvbXBvdW5kKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3NXaXRoTWl4ZWRDb21wb3VuZCgpOwotCQkJaSsrOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2Vzc0FzQ29tcG91bmQoKSB7Ci0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTAwOwotCi0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPj0gMSk7Ci0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCVN0cmluZyBvcmlnaW5hbD0gY3JlYXRlUmFuZG9tU3RyaW5nKFJBTkRPTV9TVFJJTkdfTEVOR1RIKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBjYXNlIGZvciBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODgxNzIKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCkgewotCi0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTAwOwotCi0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPj0gMSk7Ci0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCVN0cmluZyBvcmlnaW5hbD0gY3JlYXRlUmFuZG9tU3RyaW5nKFJBTkRPTV9TVFJJTkdfTEVOR1RIKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQkvLyBkbyBub3QgY2xvc2UgdGhlIGNvbXBvdW5kLgotCQkvLyBmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2Vzc1dpdGhNaXhlZENvbXBvdW5kKCkgewotCi0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTA7Ci0JCWZpbmFsIGludCBOVU1CRVJfQ09NUE9VTkRTPSA1OwotCQlmaW5hbCBpbnQgTlVNQkVSX0FUT01JQ19QRVJfQ09NUE9VTkQ9IDM7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShOVU1CRVJfQ09NUE9VTkRTICogKDEgKyBOVU1CRVJfQVRPTUlDX1BFUl9DT01QT1VORCkgKiBSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZvciAoaW50IGk9IDA7IGkgPCBOVU1CRVJfQ09NUE9VTkRTOyBpKyspIHsKLQkJCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0JCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCWZvciAoaW50IGo9IDA7IGogPCBOVU1CRVJfQVRPTUlDX1BFUl9DT01QT1VORDsgaisrKSB7Ci0JCQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQkJCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCX0KLQkJfQotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0YWJsZUFjY2VzcygpIHsKLQkJYXNzZXJ0VHJ1ZShSRVBMQUNFTUVOVFMubGVuZ3RoIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzQXNDb21wb3VuZCgpIHsKLQkJYXNzZXJ0VHJ1ZShSRVBMQUNFTUVOVFMubGVuZ3RoIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJLy8gd2l0aCBhIHNpbmdsZSBjb21wb3VuZCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHVuZG8KLQkJYXNzZXJ0RmFsc2UoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3NXaXRoTWl4ZWRBbmRFbXB0eUNvbXBvdW5kKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggKyAyIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJLy8gaW5zZXJ0IGFuIGVtcHR5IGNvbXBvdW5kCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JICAgIC8vIGluc2VydCB0aGUgYXRvbWljIGNoYW5nZXMKLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0YW1wKCkgewotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQkJbG9uZyBzdGFtcD0gKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlkb0NoYW5nZShkb2N1bWVudCwgMSk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhzdGFtcCwgKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQotCX0KLQotCS8vIHNlZTogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEwOTEwNAotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0YW1wMigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoIiIpOwotCQlmaW5hbCBpbnQgc3RyaW5nTGVuZ3RoPSAxMzsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsIGNyZWF0ZVJhbmRvbVN0cmluZyhzdHJpbmdMZW5ndGgpKTsKLQkJbG9uZyBzdGFtcD0gKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsIGNyZWF0ZVJhbmRvbVN0cmluZyhzdHJpbmdMZW5ndGgpKTsKLQkJYXNzZXJ0RmFsc2Uoc3RhbXAgPT0gKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVSYW5kb21TdHJpbmcoaW50IGxlbmd0aCkgewotCQlmaW5hbCBTdHJpbmdCdWZmZXIgYnVmZmVyPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IGxlbmd0aDsgaSsrKQotCQkJYnVmZmVyLmFwcGVuZChnZXRSYW5kb21DaGFyYWN0ZXIoKSk7Ci0KLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgZ2V0UmFuZG9tQ2hhcmFjdGVyKCkgewotCQkvLyBYWFggc2hvdWxkIGluY2x1ZGUgXHQKLQkJcmV0dXJuIChjaGFyKSAoMzIgKyA5NSAqIE1hdGgucmFuZG9tKCkpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVSYW5kb21TdHJpbmdQb2lzc29uKCkgewotCQlmaW5hbCBpbnQgbGVuZ3RoPSBnZXRSYW5kb21Qb2lzc29uVmFsdWUoMik7Ci0JCXJldHVybiBjcmVhdGVSYW5kb21TdHJpbmcobGVuZ3RoKTsKLQl9Ci0JCi0JcHJpdmF0ZSBJRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiKTsKLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSAoQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQpIGhhbmRsZXIuZ2V0RG9jdW1lbnRMb2FkZXIoKS5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KGNvbnRlbnRzKTsKLS8vCQlyZXR1cm4gbmV3IERvY3VtZW50KGNvbnRlbnRzKTsKLQkJcmV0dXJuIGRvY3VtZW50OwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBQb3NpdGlvbiBjcmVhdGVSYW5kb21Qb3NpdGlvblBvaXNzb24oaW50IGRvY3VtZW50TGVuZ3RoKSB7Ci0KLQkJZmxvYXQgcmFuZG9tPSAoZmxvYXQpIE1hdGgucmFuZG9tKCk7Ci0JCWludCBvZmZzZXQ9IChpbnQpIChyYW5kb20gKiAoZG9jdW1lbnRMZW5ndGggKyAxKSk7Ci0KLQkJLy8gQ2F0Y2ggcG90ZW50aWFsIHJvdW5kaW5nIGlzc3VlCi0JCWlmIChvZmZzZXQgPT0gZG9jdW1lbnRMZW5ndGggKyAxKQotCQkJb2Zmc2V0PSBkb2N1bWVudExlbmd0aDsKLQotCQlpbnQgbGVuZ3RoPSBnZXRSYW5kb21Qb2lzc29uVmFsdWUoMik7Ci0JCWlmIChvZmZzZXQgKyBsZW5ndGggPiBkb2N1bWVudExlbmd0aCkKLQkJCWxlbmd0aD0gZG9jdW1lbnRMZW5ndGggLSBvZmZzZXQ7Ci0KLQkJcmV0dXJuIG5ldyBQb3NpdGlvbihvZmZzZXQsIGxlbmd0aCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGdldFJhbmRvbVBvaXNzb25WYWx1ZShpbnQgbWVhbikgewotCQlmaW5hbCBpbnQgTUFYX1ZBTFVFPSAxMDsKLQotCQlmaW5hbCBmbG9hdCByYW5kb209IChmbG9hdCkgTWF0aC5yYW5kb20oKTsKLQkJZmxvYXQgcHJvYmFiaWxpdHk9IDA7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAocHJvYmFiaWxpdHkgPCAxICYmIGkgPCBNQVhfVkFMVUUpIHsKLQkJCXByb2JhYmlsaXR5ICs9IGdldFBvaXNzb25EaXN0cmlidXRpb24obWVhbiwgaSk7Ci0JCQlpZiAocmFuZG9tIDw9IHByb2JhYmlsaXR5KQotCQkJCWJyZWFrOwotCQkJaSsrOwotCQl9Ci0JCXJldHVybiBpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZsb2F0IGdldFBvaXNzb25EaXN0cmlidXRpb24oZmxvYXQgbGFtYmRhLCBpbnQgaykgewotCQlyZXR1cm4gKGZsb2F0KSAoTWF0aC5leHAoLWxhbWJkYSkgKiBNYXRoLnBvdyhsYW1iZGEsIGspIC8gZmFjdWx0eShrKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdWx0eSBvZiBrLgotCSAqCi0JICogQHBhcmFtIGsgdGhlIDxjb2RlPmludDwvY29kZT4gZm9yIHdoaWNoIHRvIGdldCB0aGUgZmFjdWx0eQotCSAqIEByZXR1cm4gdGhlIGZhY3VsdHkKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZmFjdWx0eShpbnQgaykgewotCQlyZXR1cm4gayA9PSAwCi0JCQk/IDEKLQkJCTogayAqIGZhY3VsdHkoayAtIDEpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWFmYzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRQYWlyTWF0Y2hlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBDaHJpc3RpYW4gUGxlc25lciBIYW5zZW4gKHBsZXNuZXJAcXVlbnRhLm9yZykgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5EZWZhdWx0Q2hhcmFjdGVyUGFpck1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUNoYXJhY3RlclBhaXJNYXRjaGVyOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgZGVmYXVsdCBwYWlyIG1hdGNoZXIuCi0gKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFBhaXJNYXRjaGVyVGVzdCBleHRlbmRzIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJvdGVjdGVkIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBjcmVhdGVNYXRjaGVyKFN0cmluZyBjaGFycykgewotCQlyZXR1cm4gbmV3IERlZmF1bHRDaGFyYWN0ZXJQYWlyTWF0Y2hlcihjaGFycy50b0NoYXJBcnJheSgpLAotCQkJCWdldERvY3VtZW50UGFydGl0aW9uaW5nKCkpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkFic3RyYWN0UGFpck1hdGNoZXJUZXN0I2dldERvY3VtZW50UGFydGl0aW9uaW5nKCkKLQkgKiBAc2luY2UgMy4zCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREb2N1bWVudFBhcnRpdGlvbmluZygpIHsKLQkJcmV0dXJuIElEb2N1bWVudEV4dGVuc2lvbjMuREVGQVVMVF9QQVJUSVRJT05JTkc7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0VW5kb01hbmFnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0VW5kb01hbmFnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYTZiOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5EZWZhdWx0VW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci0KLS8qKgotICogVGVzdHMgZm9yIERlZmF1bHRVbmRvTWFuYWdlci4KLSAqCi0gKiBAc2luY2UgMy4yCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0VW5kb01hbmFnZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShEZWZhdWx0VW5kb01hbmFnZXJUZXN0LmNsYXNzKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgVGVzdENhc2UjVGVzdENhc2UoU3RyaW5nKQotCSAqLwotCXB1YmxpYyBEZWZhdWx0VW5kb01hbmFnZXJUZXN0KGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkFic3RyYWN0VW5kb01hbmFnZXJUZXN0I2NyZWF0ZVVuZG9NYW5hZ2VyKGludCkKLQkgKiBAc2luY2UgMy4yCi0JICovCi0JcHJvdGVjdGVkIElVbmRvTWFuYWdlciBjcmVhdGVVbmRvTWFuYWdlcihpbnQgbWF4VW5kb0xldmVsKSB7Ci0JCXJldHVybiBuZXcgRGVmYXVsdFVuZG9NYW5hZ2VyKG1heFVuZG9MZXZlbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9IVE1MMlRleHRSZWFkZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0hUTUwyVGV4dFJlYWRlclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmE0YzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0hUTUwyVGV4dFJlYWRlclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5pbnRlcm5hbC50ZXh0Lmh0bWwuSFRNTDJUZXh0UmVhZGVyOwotCi0KLXB1YmxpYyBjbGFzcyBIVE1MMlRleHRSZWFkZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRD0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsICJcbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotCXB1YmxpYyBIVE1MMlRleHRSZWFkZXJUZXN0ZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShIVE1MMlRleHRSZWFkZXJUZXN0ZXIuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgdm9pZCB2ZXJpZnkoU3RyaW5nIGlucHV0LCBTdHJpbmcgZXhwZWN0ZWRPdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJUmVhZGVyIHJlYWRlcj0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7Ci0JCUhUTUwyVGV4dFJlYWRlciBodG1sUmVhZGVyPSBuZXcgSFRNTDJUZXh0UmVhZGVyKHJlYWRlciwgbnVsbCk7Ci0JCVN0cmluZyByZXN1bHQ9IGh0bWxSZWFkZXIuZ2V0U3RyaW5nKCk7Ci0JCWlmIChERUJVRykKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPCIrIHJlc3VsdCArIi8+Iik7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZE91dHB1dCwgcmVzdWx0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MCgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxjb2RlPjM8NTxjb2RlPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIjM8NSI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MSgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxkbD48ZHQ+QGF1dGhvcjwvZHQ+PGRkPkZvbyBCYXI8L2RkPjwvZGw+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSBMRCsgIkBhdXRob3IiK0xEKyJcdEZvbyBCYXIiK0xEOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8Y29kZT4zPjU8Y29kZT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICIzPjUiOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDMoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8YSBocmVmPSBcIjxwPnRoaXMgaXMgb25seSBhIHN0cmluZyAtIG5vdCBhIHRhZzxwPlwiPnRleHQ8L2E+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAidGV4dCI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NCgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gCSI8aHRtbD48Ym9keSB0ZXh0PVwiIzAwMDAwMFwiIGJnY29sb3I9XCIjRkZGRjg4XCI+PGZvbnQgc2l6ZT0tMT48aDU+dm9pZCBwLkJiLmZlcygpPC9oNT48cD48ZGw+PGR0PlBhcmFtZXRlcnM6PC9kdD48ZGQ+PGI+aTwvYj4gZnJlZCBvciA8Y29kZT5udWxsPC9jb2RlPjwvZGQ+PC9kbD48L2ZvbnQ+PC9ib2R5PjwvaHRtbD4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICJ2b2lkIHAuQmIuZmVzKCkiKyBMRCArIExEICsgTEQrICJQYXJhbWV0ZXJzOiIrIExEICsgIlx0aSBmcmVkIG9yIG51bGwiK0xEOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDUoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8Y29kZT4xPDI8Mzw0PC9jb2RlPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIjE8MjwzPDQiOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDYoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCS8vdGVzdCBmb3IgYnVnIDE5MDcwCi0JCVN0cmluZyBzdHJpbmc9ICI8cD5Tb21ldGhpbmcuPHA+U29tZXRoaW5nIG1vcmUuIjsKLQkJU3RyaW5nIGV4cGVjdGVkPSBMRCArICJTb21ldGhpbmcuIiArIExEICsgIlNvbWV0aGluZyBtb3JlLiI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN0cmluZz0gIjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+bm8gY29tbWVudDwhLS0gZW5kLXVzZXItZG9jIC0tPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIm5vIGNvbW1lbnQiOwotCQl2ZXJpZnkoc3RyaW5nLGV4cGVjdGVkKTsKLQl9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSkZhY2VUZXh0VGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9KRmFjZVRleHRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRjOTg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9KRmFjZVRleHRUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqIFRlc3QgU3VpdGUgZm9yIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuCi0gKgotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgY2xhc3MgSkZhY2VUZXh0VGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlPSBuZXcgVGVzdFN1aXRlKCJvcmcuZWNsaXBzZS5qZmFjZS50ZXh0IFRlc3QgU3VpdGUgdXNpbmcgSlNQIEJhc2ljU3RydWN0dXJlZERvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLS8vCQlzdWl0ZS5hZGRUZXN0KEhUTUwyVGV4dFJlYWRlclRlc3Rlci5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRleHRIb3ZlclBvcHVwVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRleHRQcmVzZW50YXRpb25UZXN0LnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KERlZmF1bHRVbmRvTWFuYWdlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFJ1bGVzVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoUmVjb25jaWxlclRlc3RTdWl0ZS5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERlZmF1bHRQYWlyTWF0Y2hlclRlc3Quc3VpdGUoKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NGQ1YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0RXZlbnQ7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RUZXh0RXZlbnQgZXh0ZW5kcyBUZXh0RXZlbnQgewotCi0JVGVzdFRleHRFdmVudChEb2N1bWVudEV2ZW50IGV2ZW50LCBTdHJpbmcgcmVwbGFjZWRUZXh0KSB7Ci0JCXN1cGVyKGV2ZW50LmdldE9mZnNldCgpLCBldmVudC5nZXRMZW5ndGgoKSwgZXZlbnQuZ2V0VGV4dCgpLCByZXBsYWNlZFRleHQsIGV2ZW50LCB0cnVlKTsKLQl9Ci0KLQlUZXN0VGV4dEV2ZW50KFN0cmluZyB0ZXh0KSB7Ci0JCXN1cGVyKDAsIDAsIHRleHQsIChTdHJpbmcpIG51bGwsIChEb2N1bWVudEV2ZW50KSBudWxsLCB0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dFZpZXdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4NTliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dFZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0luZGVudFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRXZlbnRDb25zdW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklGaW5kUmVwbGFjZVRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRJbnB1dExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0T3BlcmF0aW9uVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVmlld3BvcnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRQcmVzZW50YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdFRleHRWaWV3ZXIgaW1wbGVtZW50cyBJU291cmNlVmlld2VyLCBJRG9jdW1lbnRMaXN0ZW5lciB7Ci0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnQgZkRvY3VtZW50OwotCXByb3RlY3RlZCBMaXN0IGZJbnB1dExpc3RlbmVycz0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBMaXN0IGZUZXh0TGlzdGVuZXJzPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJvdGVjdGVkIFRleHRQcmVzZW50YXRpb24gZlRleHRQcmVzZW50YXRpb247Ci0JcHJvdGVjdGVkIFBvaW50IGZTZWxlY3Rpb249IG5ldyBQb2ludCgtMSwgLTEpOwotCXByb3RlY3RlZCBTdHJpbmcgZkRlbGV0aW9uOwotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBkb2N1bWVudCwgaW50IHAxLCBpbnQgcDIpIHsKLQkJc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0RG9jdW1lbnQoKQotCSAqLwotCXB1YmxpYyBJRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB7Ci0JCXJldHVybiBmRG9jdW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RG9jdW1lbnQoSURvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUlEb2N1bWVudCBvbGREb2M9IGZEb2N1bWVudDsKLQkJZmlyZVRleHRJbnB1dENoYW5nZWQob2xkRG9jLCBkb2N1bWVudCwgdHJ1ZSk7Ci0KLQkJaWYgKG9sZERvYyAhPSBudWxsKQotCQkJb2xkRG9jLnJlbW92ZURvY3VtZW50TGlzdGVuZXIodGhpcyk7Ci0KLQkJZkRvY3VtZW50PSBkb2N1bWVudDsKLQotCQlpZiAoZkRvY3VtZW50ICE9IG51bGwpIHsKLQkJCWZpcmVUZXh0Q2hhbmdlZChuZXcgVGVzdFRleHRFdmVudChmRG9jdW1lbnQuZ2V0KCkpKTsKLQkJCWZEb2N1bWVudC5hZGREb2N1bWVudExpc3RlbmVyKHRoaXMpOwotCQl9Ci0KLQkJZmlyZVRleHRJbnB1dENoYW5nZWQob2xkRG9jLCBkb2N1bWVudCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVtb3ZlVGV4dElucHV0TGlzdGVuZXIoSVRleHRJbnB1dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmSW5wdXRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJaWYgKCFmSW5wdXRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKQotCQkJZklucHV0TGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlyZVRleHRJbnB1dENoYW5nZWQoSURvY3VtZW50IG9sZERvYywgSURvY3VtZW50IG5ld0RvYywgYm9vbGVhbiBhYm91dCkgewotCQlJdGVyYXRvciBlPSBuZXcgQXJyYXlMaXN0KGZJbnB1dExpc3RlbmVycykuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dElucHV0TGlzdGVuZXIgbD0gKElUZXh0SW5wdXRMaXN0ZW5lcikgZS5uZXh0KCk7Ci0JCQlpZiAoYWJvdXQpCi0JCQkJbC5pbnB1dERvY3VtZW50QWJvdXRUb0JlQ2hhbmdlZChvbGREb2MsIG5ld0RvYyk7Ci0JCQllbHNlCi0JCQkJbC5pbnB1dERvY3VtZW50Q2hhbmdlZChvbGREb2MsIG5ld0RvYyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2NoYW5nZVRleHRQcmVzZW50YXRpb24oVGV4dFByZXNlbnRhdGlvbiwgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjaGFuZ2VUZXh0UHJlc2VudGF0aW9uKFRleHRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uLCBib29sZWFuIHAxKSB7Ci0JCWZUZXh0UHJlc2VudGF0aW9uPSBwcmVzZW50YXRpb247Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNpbnZhbGlkYXRlVGV4dFByZXNlbnRhdGlvbigpCi0JICovCi0JcHVibGljIHZvaWQgaW52YWxpZGF0ZVRleHRQcmVzZW50YXRpb24oKSB7Ci0JfQotCi0JcHVibGljIFRleHRQcmVzZW50YXRpb24gZ2V0VGV4dFByZXNlbnRhdGlvbigpIHsKLQkJcmV0dXJuIGZUZXh0UHJlc2VudGF0aW9uOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvY3VtZW50QWJvdXRUb0JlQ2hhbmdlZChEb2N1bWVudEV2ZW50IGV2ZW50KSB7Ci0JCXRyeSB7Ci0JCQlmRGVsZXRpb249IGZEb2N1bWVudC5nZXQoZXZlbnQuZ2V0T2Zmc2V0KCksIGV2ZW50LmdldExlbmd0aCgpKTsKLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24geCkgewotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZG9jdW1lbnRDaGFuZ2VkKERvY3VtZW50RXZlbnQgZXZlbnQpIHsKLQkJZmlyZVRleHRDaGFuZ2VkKG5ldyBUZXN0VGV4dEV2ZW50KGV2ZW50LCBmRGVsZXRpb24pKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldEZpbmRSZXBsYWNlVGFyZ2V0KCkKLQkgKi8KLQlwdWJsaWMgSUZpbmRSZXBsYWNlVGFyZ2V0IGdldEZpbmRSZXBsYWNlVGFyZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRleHRPcGVyYXRpb25UYXJnZXQoKQotCSAqLwotCXB1YmxpYyBJVGV4dE9wZXJhdGlvblRhcmdldCBnZXRUZXh0T3BlcmF0aW9uVGFyZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHRDb2xvcihDb2xvciwgaW50LCBpbnQsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGV4dENvbG9yKENvbG9yIHAwLCBpbnQgcDEsIGludCBwMiwgYm9vbGVhbiBwMykgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VGV4dENvbG9yKENvbG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHRDb2xvcihDb2xvciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjb3ZlcmxhcHNXaXRoVmlzaWJsZVJlZ2lvbihpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBvdmVybGFwc1dpdGhWaXNpYmxlUmVnaW9uKGludCBwMCwgaW50IHAxKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFZpc2libGVSZWdpb24oKQotCSAqLwotCXB1YmxpYyBJUmVnaW9uIGdldFZpc2libGVSZWdpb24oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVzZXRWaXNpYmxlUmVnaW9uKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZXNldFZpc2libGVSZWdpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRWaXNpYmxlUmVnaW9uKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZpc2libGVSZWdpb24oaW50IHAwLCBpbnQgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEluZGVudFByZWZpeGVzKFN0cmluZ1tdLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZW50UHJlZml4ZXMoU3RyaW5nW10gcDAsIFN0cmluZyBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RGVmYXVsdFByZWZpeGVzKFN0cmluZ1tdLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdFByZWZpeGVzKFN0cmluZ1tdIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEF1dG9JbmRlbnRTdHJhdGVneShJQXV0b0luZGVudFN0cmF0ZWd5LCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QXV0b0luZGVudFN0cmF0ZWd5KElBdXRvSW5kZW50U3RyYXRlZ3kgcDAsIFN0cmluZyBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VGV4dERvdWJsZUNsaWNrU3RyYXRlZ3koSVRleHREb3VibGVDbGlja1N0cmF0ZWd5LCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGV4dERvdWJsZUNsaWNrU3RyYXRlZ3koSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFVuZG9NYW5hZ2VyKElVbmRvTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVbmRvTWFuYWdlcihJVW5kb01hbmFnZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRleHRXaWRnZXQoKQotCSAqLwotCXB1YmxpYyBTdHlsZWRUZXh0IGdldFRleHRXaWRnZXQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRleHRIb3ZlcihJVGV4dEhvdmVyIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FjdGl2YXRlUGx1Z2lucygpCi0JICovCi0JcHVibGljIHZvaWQgYWN0aXZhdGVQbHVnaW5zKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVzZXRQbHVnaW5zKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZXNldFBsdWdpbnMoKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUb3BJbnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRUb3BJbnNldCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRCb3R0b21JbmRleEVuZE9mZnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRCb3R0b21JbmRleEVuZE9mZnNldCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRCb3R0b21JbmRleCgpCi0JICovCi0JcHVibGljIGludCBnZXRCb3R0b21JbmRleCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUb3BJbmRleFN0YXJ0T2Zmc2V0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFRvcEluZGV4U3RhcnRPZmZzZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5kZXgoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0VG9wSW5kZXgoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VG9wSW5kZXgoaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRvcEluZGV4KGludCBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmV2ZWFsUmFuZ2UoaW50LCBpbnQpCi0JICovCi0JcHVibGljIHZvaWQgcmV2ZWFsUmFuZ2UoaW50IHAwLCBpbnQgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFNlbGVjdGVkUmFuZ2UoKQotCSAqLwotCXB1YmxpYyBQb2ludCBnZXRTZWxlY3RlZFJhbmdlKCkgewotCQlyZXR1cm4gZlNlbGVjdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFNlbGVjdGVkUmFuZ2UoaW50LCBpbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRSYW5nZShpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0JCWZTZWxlY3Rpb24ueD0gb2Zmc2V0OwotCQlmU2VsZWN0aW9uLnk9IGxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2lzRWRpdGFibGUoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRWRpdGFibGUoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RWRpdGFibGUoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFZGl0YWJsZShib29sZWFuIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRFdmVudENvbnN1bWVyKElFdmVudENvbnN1bWVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEV2ZW50Q29uc3VtZXIoSUV2ZW50Q29uc3VtZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWZUZXh0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlyZVRleHRDaGFuZ2VkKFRleHRFdmVudCBldmVudCkgewotCQlJdGVyYXRvciBlPSBuZXcgQXJyYXlMaXN0KGZUZXh0TGlzdGVuZXJzKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCUlUZXh0TGlzdGVuZXIgbD0gKElUZXh0TGlzdGVuZXIpIGUubmV4dCgpOwotCQkJbC50ZXh0Q2hhbmdlZChldmVudCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWlmICghZlRleHRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKQotCQkJZlRleHRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjYWRkVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRWaWV3cG9ydExpc3RlbmVyKElWaWV3cG9ydExpc3RlbmVyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldFNlbGVjdGlvblByb3ZpZGVyKCkKLQkgKi8KLQlwdWJsaWMgSVNlbGVjdGlvblByb3ZpZGVyIGdldFNlbGVjdGlvblByb3ZpZGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2hvd0Fubm90YXRpb25zKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2hvd0Fubm90YXRpb25zKGJvb2xlYW4gcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjcmVtb3ZlUmFuZ2VJbmRpY2F0aW9uKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVSYW5nZUluZGljYXRpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldFJhbmdlSW5kaWNhdGlvbigpCi0JICovCi0JcHVibGljIElSZWdpb24gZ2V0UmFuZ2VJbmRpY2F0aW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0UmFuZ2VJbmRpY2F0aW9uKGludCwgaW50LCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJhbmdlSW5kaWNhdGlvbihpbnQgcDAsIGludCBwMSwgYm9vbGVhbiBwMikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXRSYW5nZUluZGljYXRvcihBbm5vdGF0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJhbmdlSW5kaWNhdG9yKEFubm90YXRpb24gcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjZ2V0QW5ub3RhdGlvbk1vZGVsKCkKLQkgKi8KLQlwdWJsaWMgSUFubm90YXRpb25Nb2RlbCBnZXRBbm5vdGF0aW9uTW9kZWwoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBwMCwgSUFubm90YXRpb25Nb2RlbCBwMSwgaW50IHAyLCBpbnQgcDMpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBwMCwgSUFubm90YXRpb25Nb2RlbCBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXRBbm5vdGF0aW9uSG92ZXIoSUFubm90YXRpb25Ib3ZlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbm5vdGF0aW9uSG92ZXIoSUFubm90YXRpb25Ib3ZlciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNjb25maWd1cmUoU291cmNlVmlld2VyQ29uZmlndXJhdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25maWd1cmUoU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBwMCkgewotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dEhvdmVyUG9wdXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZmE2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dEhvdmVyUG9wdXBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLXB1YmxpYyBjbGFzcyBUZXh0SG92ZXJQb3B1cFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyBUZXh0SG92ZXJQb3B1cFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShUZXh0SG92ZXJQb3B1cFRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCX0KLQotCi0JcHJvdGVjdGVkIGludCBzZWFyY2goaW50W10gYXJyYXksIGludCB4KSB7Ci0JCWludCBsb3c9IDA7Ci0JCWludCBoaWdoPSBhcnJheS5sZW5ndGggLTE7Ci0KLQkJd2hpbGUgKGhpZ2ggPiBsb3cpIHsKLQkJCWludCBvZmZzZXQ9IChsb3cgKyBoaWdoKSAvIDI7Ci0JCQlpbnQgbG9va3VwPSBhcnJheVtvZmZzZXRdOwotCQkJaWYgKGxvb2t1cCA+IHgpCi0JCQkJaGlnaD0gb2Zmc2V0IC0gMTsKLQkJCWVsc2UgaWYgKGxvb2t1cCA8IHgpCi0JCQkJbG93PSBvZmZzZXQgKyAxOwotCQkJZWxzZQotCQkJCWxvdz0gaGlnaD0gb2Zmc2V0OwotCQl9Ci0KLQkJcmV0dXJuIGhpZ2g7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaCgpIHsKLQkJaW50W10gdmFsdWVzPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWludCByZXN1bHQ9IHNlYXJjaCh2YWx1ZXMsIGkpOwotCQkJYXNzZXJ0VHJ1ZShpID09IHJlc3VsdCk7Ci0JCX0KLQotCQlpbnRbXSB2YWx1ZXMyPSB7IDAsIDMsIDYsIDksIDEyLCAxNSwgMTgsIDIxLCAyNCwgMjcgfTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWludCByZXN1bHQ9IHNlYXJjaCh2YWx1ZXMyLCBpICogMyk7Ci0JCQlhc3NlcnRUcnVlKGkgPT0gcmVzdWx0KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRQcmVzZW50YXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODllOGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRQcmVzZW50YXRpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZVJhbmdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0UHJlc2VudGF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGV4dFByZXNlbnRhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9STUFMPSBTV1QuTk9STUFMOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCT0xEPSBTV1QuQk9MRDsKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJVEFMSUM9IFNXVC5JVEFMSUM7Ci0KLQlwcml2YXRlIFRleHRQcmVzZW50YXRpb24gZlRleHRQcmVzZW50YXRpb247Ci0JcHJpdmF0ZSBTdHlsZVJhbmdlW10gZkFsbFJhbmdlczsKLQlwcml2YXRlIFN0eWxlUmFuZ2VbXSBmTm9uRGVmYXVsdFJhbmdlczsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dFByZXNlbnRhdGlvblRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlzZXRVcFN0eWxlUmFuZ2VzKCk7Ci0JCXNldFVwVGV4dFByZXNlbnRhdGlvbigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFN0eWxlUmFuZ2VzKCkgewotCQlmQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCkKLQkJfTsKLQotCQlmTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCkKLQkJfTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBUZXh0UHJlc2VudGF0aW9uKCkgewotCQlmVGV4dFByZXNlbnRhdGlvbj0gbmV3IFRleHRQcmVzZW50YXRpb24oKTsKLQkJZlRleHRQcmVzZW50YXRpb24uc2V0RGVmYXVsdFN0eWxlUmFuZ2UoY3JlYXRlU3R5bGVSYW5nZSgwLCAxNDAsIE5PUk1BTCkpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgZkFsbFJhbmdlcy5sZW5ndGg7IGkrKykKLQkJCWZUZXh0UHJlc2VudGF0aW9uLmFkZFN0eWxlUmFuZ2UoZkFsbFJhbmdlc1tpXSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGNyZWF0ZVN0eWxlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3R5bGUpIHsKLQkJcmV0dXJuIGNyZWF0ZVN0eWxlUmFuZ2Uoc3RhcnQsIGVuZCwgbnVsbCwgbnVsbCwgc3R5bGUpOwotCX0KLQotCXByaXZhdGUgU3R5bGVSYW5nZSBjcmVhdGVTdHlsZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgQ29sb3IgZm9yZWdyb3VuZCwgQ29sb3IgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBuZXcgU3R5bGVSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQsIGZvcmVncm91bmQsIGJhY2tncm91bmQsIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlUmFuZ2UgY3JlYXRlU3R5bGVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIGludCBmb3JlZ3JvdW5kLCBpbnQgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBjcmVhdGVTdHlsZVJhbmdlKHN0YXJ0LCBlbmQsIGNyZWF0ZUNvbG9yKGZvcmVncm91bmQsIGZvcmVncm91bmQsIGZvcmVncm91bmQpLCBjcmVhdGVDb2xvcihiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKSwgc3R5bGUpOwotCX0KLQotCXByaXZhdGUgRGlzcGxheSBmRGlzcGxheT0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGNvbG9yLgotCSAqIAotCSAqIEBwYXJhbSByZWQgdGhlIGFtb3VudCBvZiByZWQgaW4gdGhlIGNvbG9yCi0JICogQHBhcmFtIGdyZWVuIHRoZSBhbW91bnQgb2YgZ3JlZW4gaW4gdGhlIGNvbG9yCi0JICogQHBhcmFtIGJsdWUgdGhlIGFtb3VudCBvZiBibHVlIGluIHRoZSBjb2xvcgotCSAqIEByZXR1cm4gPGNvZGU+bnVsbDwvY29kZT4gaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHNtYWxsZXIgdGhhbiAwIG9yIGdyZWF0ZXIgdGhhbiAyNTUKLQkgKi8KLQlwcml2YXRlIENvbG9yIGNyZWF0ZUNvbG9yKGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUpIHsKLQkJaWYgKHJlZCA8IDAgfHwgcmVkID4gMjU1IHx8IGdyZWVuIDwgMCB8fCBncmVlbiA+IDI1NSB8fCBibHVlIDwgMCB8fCBibHVlID4gMjU1KQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBuZXcgQ29sb3IoZkRpc3BsYXksIHJlZCwgZ3JlZW4sIGJsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1JlZ2lvbnMoU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzLCBTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKSB7Ci0JCUl0ZXJhdG9yIGU9IGZUZXh0UHJlc2VudGF0aW9uLmdldEFsbFN0eWxlUmFuZ2VJdGVyYXRvcigpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgZXhwZWN0ZWRBbGxSYW5nZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoZS5oYXNOZXh0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQWxsUmFuZ2VzW2ldLCBlLm5leHQoKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSghZS5oYXNOZXh0KCkpOwotCi0JCWU9IGZUZXh0UHJlc2VudGF0aW9uLmdldE5vbkRlZmF1bHRTdHlsZVJhbmdlSXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0VHJ1ZShlLmhhc05leHQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzW2ldLCBlLm5leHQoKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSghZS5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVbmNsaXBwZWRSZWdpb25zKCkgewotCQljaGVja1JlZ2lvbnMoZkFsbFJhbmdlcywgZk5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGlwcGVkUmVnaW9uczEoKSB7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLnNldFJlc3VsdFdpbmRvdyhuZXcgUmVnaW9uKDAsIDE0MCkpOwotCQljaGVja1JlZ2lvbnMoZkFsbFJhbmdlcywgZk5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGlwcGVkUmVnaW9uczIoKSB7Ci0KLQkJZlRleHRQcmVzZW50YXRpb24uc2V0UmVzdWx0V2luZG93KG5ldyBSZWdpb24oMzAsIDcwKSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAxNywgTk9STUFMKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDE3LCAyNCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAyNCwgNjYsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA2NiwgNzAsIEJPTEQpCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAxNywgMjQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNjYsIDcwLCBCT0xEKQotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBzdGFydCBvZiBmaXJzdCBleGlzdGluZyByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMSgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDIsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBlbmQgb2YgbGFzdCBleGlzdGluZyByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMigpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTM4LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBzdGFydCBvZiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UzKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDIyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMiwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIHdpdGhpbiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U0KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIyLCAyNCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgMjIsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMiwgMjQsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDI0LCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjIsIDI0LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGV4aXN0aW5nIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTUoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTYoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSB3aXRoaW4gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTcoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDksIDUxLCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDQ5LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDQ5LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBlbmQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTgoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIGRlZmF1bHQgdG8gbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTkoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ5LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgdG8gZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTAoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU2LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDU2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NiwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3RpbmcgZGVmYXVsdCBvdmVyIG5vbi1kZWZhdWx0IHRvIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTExKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA1NiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU2LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgb3ZlciBkZWZhdWx0IHRvIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMigpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg1MiwgOTgsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgOTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoOTYsIDk4LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTgsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDk2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDk2LCA5OCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk4LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBvdmVyIGV4aXN0aW5nIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEzKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIwLCA0NywgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBvdmVyIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxNCgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg0NywgNTQsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2VzMSgpIHsKLQkJU3R5bGVSYW5nZVtdIHJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgc3RhcnQgb2YgZmlyc3QgZXhpc3RpbmcKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIGRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksIC8vIHdpdGhpbiBleGlzdGluZyBkZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBlbmQgb2YgZXhpc3RpbmcgZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgc3RhcnQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIE5PUk1BTCksIC8vIHdpdGhpbiBleGlzdGluZyBub24tZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgZW5kIG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IGVuZCBvZiBsYXN0IGV4aXN0aW5nCi0JCX07Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZXMocmFuZ2VzKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDIsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjIsICAyNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjYsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDUwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTM4LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjQsIDI2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDUwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotLy8gVGVtcGxhdGUKLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMCgpIHsKLS8vLy8JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCk7Ci0vLy8vCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotLy8KLS8vLy8JCVN0eWxlUmFuZ2VbXSByYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotLy8vLwkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotLy8vLwkJfTsKLS8vLy8JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZXMocmFuZ2VzKTsKLS8vCi0vLwkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0vLwkJfTsKLS8vCi0vLwkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0vLwkJfTsKLS8vCi0vLwkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotLy8JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmZkMjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLklVbmRvYWJsZU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuT3BlcmF0aW9uSGlzdG9yeUZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC51bmRvLkRvY3VtZW50VW5kb0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5Eb2N1bWVudFVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5JRG9jdW1lbnRVbmRvTGlzdGVuZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlclVuZG9NYW5hZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciBUZXh0Vmlld2VyVW5kb01hbmFnZXIuCi0gKgotICogQHNpbmNlIDMuMgotICovCi1wdWJsaWMgY2xhc3MgVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdCBleHRlbmRzIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIFRlc3RDYXNlI1Rlc3RDYXNlKFN0cmluZykKLQkgKi8KLQlwdWJsaWMgVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCNjcmVhdGVVbmRvTWFuYWdlcihpbnQpCi0JICogQHNpbmNlIDMuMgotCSAqLwotCXByb3RlY3RlZCBJVW5kb01hbmFnZXIgY3JlYXRlVW5kb01hbmFnZXIoaW50IG1heFVuZG9MZXZlbCkgewotCQlyZXR1cm4gbmV3IFRleHRWaWV3ZXJVbmRvTWFuYWdlcihtYXhVbmRvTGV2ZWwpOwotCX0KLQotCS8vLS0tIERvY3VtZW50VW5kb01hbmFnZXIgb25seSAtLS0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsVGVzdFRyYW5zZmVyTm9uVGV4dE9wKGZpbmFsIGJvb2xlYW4gaXNVbmRvYWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU9iamVjdCBjb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCURvY3VtZW50VW5kb01hbmFnZXIgdGVtcFVuZG9NYW5hZ2VyPSBuZXcgRG9jdW1lbnRVbmRvTWFuYWdlcihuZXcgRG9jdW1lbnQoKSk7Ci0JCXRlbXBVbmRvTWFuYWdlci5jb25uZWN0KGNvbnRleHQpOwotCi0JCUlVbmRvYWJsZU9wZXJhdGlvbiBvcGVyYXRpb249IG5ldyBBYnN0cmFjdE9wZXJhdGlvbigiIikgewotCQkJcHVibGljIGJvb2xlYW4gY2FuVW5kbygpIHsKLQkJCQlyZXR1cm4gaXNVbmRvYWJsZTsKLQkJCX0KLQkJCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgcmVkbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyB1bmRvKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQkJfTsKLQkJb3BlcmF0aW9uLmFkZENvbnRleHQodGVtcFVuZG9NYW5hZ2VyLmdldFVuZG9Db250ZXh0KCkpOwotCQlPcGVyYXRpb25IaXN0b3J5RmFjdG9yeS5nZXRPcGVyYXRpb25IaXN0b3J5KCkuYWRkKG9wZXJhdGlvbik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGlzVW5kb2FibGUsIHRlbXBVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBEb2N1bWVudFVuZG9NYW5hZ2VyIHVuZG9NYW5hZ2VyPSBuZXcgRG9jdW1lbnRVbmRvTWFuYWdlcihuZXcgRG9jdW1lbnQoKSk7Ci0JCU9iamVjdCBuZXdDb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCXVuZG9NYW5hZ2VyLmNvbm5lY3QobmV3Q29udGV4dCk7Ci0KLQkJdW5kb01hbmFnZXIuYWRkRG9jdW1lbnRVbmRvTGlzdGVuZXIobmV3IElEb2N1bWVudFVuZG9MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRvY3VtZW50VW5kb05vdGlmaWNhdGlvbihEb2N1bWVudFVuZG9FdmVudCBldmVudCkgewotCQkJCWZhaWwoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdW5kb01hbmFnZXIudHJhbnNmZXJVbmRvSGlzdG9yeSh0ZW1wVW5kb01hbmFnZXIpOwotCQl0ZW1wVW5kb01hbmFnZXIuZGlzY29ubmVjdChjb250ZXh0KTsKLQotCQlhc3NlcnRFcXVhbHMoaXNVbmRvYWJsZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQl1bmRvTWFuYWdlci5kaXNjb25uZWN0KG5ld0NvbnRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUcmFuc2Zlck5vblVuZG9hYmxlTm9uVGV4dE9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWludGVybmFsVGVzdFRyYW5zZmVyTm9uVGV4dE9wKGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNmZXJVbmRvYWJsZU5vblRleHRPcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcCh0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FuVW5kbygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jPSBuZXcgRG9jdW1lbnQoKTsKLQkJZmluYWwgRG9jdW1lbnRVbmRvTWFuYWdlciB1bmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIoZG9jKTsKLQkJT2JqZWN0IGNvbnRleHQ9IG5ldyBPYmplY3QoKTsKLQkJdW5kb01hbmFnZXIuY29ubmVjdChjb250ZXh0KTsKLQotCQl1bmRvTWFuYWdlci5hZGREb2N1bWVudFVuZG9MaXN0ZW5lcihuZXcgSURvY3VtZW50VW5kb0xpc3RlbmVyKCkgewotCi0JCQlwdWJsaWMgdm9pZCBkb2N1bWVudFVuZG9Ob3RpZmljYXRpb24oRG9jdW1lbnRVbmRvRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuZ2V0RXZlbnRUeXBlKCkgPT0gRG9jdW1lbnRVbmRvRXZlbnQuQUJPVVRfVE9fVU5ETykKLQkJCQkJYXNzZXJ0RXF1YWxzKHRydWUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJCWVsc2UgaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IERvY3VtZW50VW5kb0V2ZW50LlVORE9ORSkKLQkJCQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZG9jLnNldCgiZm9vIik7Ci0KLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl1bmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJdW5kb01hbmFnZXIuZGlzY29ubmVjdChjb250ZXh0KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9BYnN0cmFjdFJlY29uY2lsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMGZiYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9BYnN0cmFjdFJlY29uY2lsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucmVjb25jaWxlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC50ZXN0cy5BY2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5BYnN0cmFjdFJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLkRpcnR5UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxpbmdTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLlRlc3RUZXh0Vmlld2VyOwotCi0KLS8qKgotICogUmVjb25jaWxlciB0ZXN0cy4gVXNlcyBiYXJyaWVyIHN5bmNocm9uaXphdGlvbiBhbmQgYSBjYWxsIGxvZyB0byBhc3NlcnQKLSAqIGNvcnJlY3Qgb3JkZXIgb2YgcmVjb25jaWxpbmcgZXZlbnRzLgotICoKLSAqIFRPRE8gdGVzdCByZWNvbmNpbGVyIGFyZ3VtZW50cyAoZGVsYXkgPiAwIGV0Yy4pCi0gKiBUT0RPIGluY3JlbWVudGFsIHJlY29uY2lsZXIgdGVzdHMKLSAqCi0gKiBAc2luY2UgMy4xCi0gKi8KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdFJlY29uY2lsZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogTW9kaWZpZWQgYmFycmllcjogdGhlcmUgYXJlIHR3byB0aHJlYWRzOiB0aGUgbWFpbiAodGVzdGluZykgdGhyZWFkCi0JICogY3JlYXRpbmcgdGhlIGJhcnJpZXIsIGFuZCB0aGUgcmVjb25jaWxlciB0aHJlYWQuIFdoZW4gYm90aCB0aHJlYWRzIGhhdmUKLQkgKiBtZXQgYXQgdGhlIGJhcnJpZXIsIHRoZSBtYWluIHRocmVhZCBpcyByZWxlYXNlZCBhbmQgY2FuIHBlcmZvcm0KLQkgKiBhc3NlcnRpb25zIHdoaWxlIGJlaW5nIHN1cmUgdGhhdCB0aGUgcmVjb25jaWxlciBpcyBkb3JtYW50LiBBZnRlciB0aGUKLQkgKiB0ZXN0cyBoYXZlIGJlZW4gcGVyZm9ybWVkLCB0aGUgbWFpbiB0aHJlYWQgbXVzdCBjYWxsIDxjb2RlPndha2VBbGw8L2NvZGU+Ci0JICogdG8gcmVsZWFzZSB0aGUgcmVjb25jaWxlciB0aHJlYWQuCi0JICovCi0Jc3RhdGljIGNsYXNzIEJhcnJpZXIgewotCQlwcml2YXRlIGZpbmFsIE9iamVjdCBmTXV0ZXg9IG5ldyBPYmplY3QoKTsKLQkJcHJpdmF0ZSBmaW5hbCBpbnQgZlBhcnRpY2lwYW50czsKLQkJcHJpdmF0ZSBmaW5hbCBUaHJlYWQgZk1haW5UaHJlYWQ7Ci0KLQkJcHJpdmF0ZSBpbnQgZldhaXRpbmc9IDA7Ci0JCXByaXZhdGUgYm9vbGVhbiBmTWFpblRocmVhZEFycml2ZWQ9IGZhbHNlOwotCQlwcml2YXRlIGJvb2xlYW4gZklzSW5hY3RpdmU9IGZhbHNlOwotCi0JCUJhcnJpZXIoKSB7Ci0JCQlmUGFydGljaXBhbnRzPSAyOwotCQkJZk1haW5UaHJlYWQ9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhd2FpdCgpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJaWYgKGZJc0luYWN0aXZlKQotCQkJCQlyZXR1cm47Ci0KLQkJCQlmV2FpdGluZysrOwotCi0JCQkJYm9vbGVhbiBpc01haW5UaHJlYWQ9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkgPT0gZk1haW5UaHJlYWQ7Ci0JCQkJaWYgKGlzTWFpblRocmVhZCkKLQkJCQkJZk1haW5UaHJlYWRBcnJpdmVkPSB0cnVlOwotCi0JCQkJaWYgKGFsbEFycml2ZWQoKSkgewotCQkJCQlpZiAoIWZNYWluVGhyZWFkQXJyaXZlZCkgewotCQkJCQkJZldhaXRpbmctLTsKLQkJCQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGdldENsYXNzKCkgKyAiIGNhbid0IGpvaW4gYmFycmllciBpZiBvbmx5IHRoZSBtYWluIHRocmVhZCBpcyBtaXNzaW5nISIpOwotCQkJCQl9Ci0KLQkJCQkJaWYgKCFpc01haW5UaHJlYWQpCi0JCQkJCQlub3RpZnlNYWluVGhyZWFkKCk7Ci0JCQkJfQotCQkJCWlmICghYWxsQXJyaXZlZCgpIHx8ICFpc01haW5UaHJlYWQpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCWlmICghaXNNYWluVGhyZWFkKQotCQkJCQkJCWZNdXRleC53YWl0KCk7Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQlmTXV0ZXgud2FpdCg1MDAwKTsgLy8gZG9uJ3Qgd2FpdCBmb3JldmVyIGZvciBiYWQgcmVjb25jaWxlcnMKLQkJCQkJCQlpZiAoIWFsbEFycml2ZWQoKSkKLQkJCQkJCQkJZmFpbCgicmVjb25jaWxlciBuZXZlciByYW4gaW4gNSBzZWNvbmRzIik7Ci0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIHRocmVhZHMgbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQKLQkJCQkJCXRocm93IG5ldyBFcnJvcigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZSBib29sZWFuIGFsbEFycml2ZWQoKSB7Ci0JCQlyZXR1cm4gZldhaXRpbmcgPT0gZlBhcnRpY2lwYW50czsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBub3RpZnlNYWluVGhyZWFkKCkgewotCQkJZk11dGV4Lm5vdGlmeSgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgd2FrZUFsbCgpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJZldhaXRpbmc9IDA7Ci0JCQkJZk1haW5UaHJlYWRBcnJpdmVkPSBmYWxzZTsKLQkJCQlmTXV0ZXgubm90aWZ5QWxsKCk7Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzaHV0ZG93bigpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJZklzSW5hY3RpdmU9IHRydWU7Ci0JCQkJZk11dGV4Lm5vdGlmeUFsbCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBBY2Nlc3NvciBmQWNjZXNzb3I7Ci0JcHJpdmF0ZSBCYXJyaWVyIGZCYXJyaWVyOwotCXByaXZhdGUgTGlzdCBmQ2FsbExvZzsKLQlwcml2YXRlIElUZXh0Vmlld2VyIGZWaWV3ZXI7Ci0JcHJvdGVjdGVkIEFic3RyYWN0UmVjb25jaWxlciBmUmVjb25jaWxlcjsKLQlwcml2YXRlIERvY3VtZW50IGZEb2N1bWVudDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlmQmFycmllcj0gbmV3IEJhcnJpZXIoKTsKLQkJZkNhbGxMb2c9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QobmV3IEFycmF5TGlzdCgpKTsKLQkJZlJlY29uY2lsZXI9IG5ldyBBYnN0cmFjdFJlY29uY2lsZXIoKSB7Ci0JCQkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxQcm9jZXNzKCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJpbml0aWFsUHJvY2VzcyIpOwotCQkJCQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKERpcnR5UmVnaW9uIGRpcnR5UmVnaW9uKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInByb2Nlc3MiKTsKLQkJCQkJCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZChJRG9jdW1lbnQgbmV3RG9jdW1lbnQpIHsKLQkJCQkJCWZDYWxsTG9nLmFkZCgicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIpOwotCQkJCQl9Ci0JCQkJCXByb3RlY3RlZCB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoImFib3V0VG9CZVJlY29uY2lsZWQiKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVyUmVzZXQoKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInJlY29uY2lsZXJSZXNldCIpOwotCQkJCQl9Ci0JCQkJCXB1YmxpYyBJUmVjb25jaWxpbmdTdHJhdGVneSBnZXRSZWNvbmNpbGluZ1N0cmF0ZWd5KFN0cmluZyBjb250ZW50VHlwZSkgewotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCX0KLQkJCQl9OwotCQlmUmVjb25jaWxlci5zZXRJc0luY3JlbWVudGFsUmVjb25jaWxlcihmYWxzZSk7Ci0JCWZSZWNvbmNpbGVyLnNldERlbGF5KDUwKTsgLy8gbWFrZSB0ZXN0cyBydW4gZmFzdGVyCi0KLQkJZlZpZXdlcj0gbmV3IFRlc3RUZXh0Vmlld2VyKCk7Ci0JCWZSZWNvbmNpbGVyLmluc3RhbGwoZlZpZXdlcik7Ci0KLQkJZkFjY2Vzc29yPSBuZXcgQWNjZXNzb3IoZlJlY29uY2lsZXIsIEFic3RyYWN0UmVjb25jaWxlci5jbGFzcyk7Ci0JCU9iamVjdCBvYmplY3Q9IGZBY2Nlc3Nvci5nZXQoImZUaHJlYWQiKTsKLQkJZkFjY2Vzc29yPSBuZXcgQWNjZXNzb3Iob2JqZWN0LCBvYmplY3QuZ2V0Q2xhc3MoKSk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmQmFycmllci5zaHV0ZG93bigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbFJlY29uY2lsZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIGluaXRpYWxseSB0aGUgcmVjb25jaWxlciBpcyBuZWl0aGVyIGFjdGl2ZSBub3IgZGlydHkKLQkJLy8gWFhYIHNob3VsZG4ndCBpdCBiZSBkaXJ0eT8KLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0KLQkJLy8gc2V0IHVwIGluaXRpYWwgZG9jdW1lbnQKLQkJZkRvY3VtZW50PSBuZXcgRG9jdW1lbnQoImZvbyIpOwotCQlmVmlld2VyLnNldERvY3VtZW50KGZEb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0KLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbml0aWFsUHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCS8vIFhYWCBzaG91bGRuJ3QgaXQgYmUgZGlydHkgYW5kIGFjdGl2ZSBkdXJpbmcgaW5pdGlhbFByb2Nlc3M/Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gd2FpdCB1bnRpbCBjbGVhbgotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlpbmdXaGVuQ2xlYW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJZGlydHkoKTsKLQkJYXNzZXJ0RXF1YWxzKCJhYm91dFRvQmVSZWNvbmNpbGVkIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvbmNpbGVyUmVzZXQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydFRydWUoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUoaXNEaXJ0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIHdhaXQgdW50aWwgY2xlYW4KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgZGlydHkoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jdW1lbnQucmVwbGFjZSgwLDAsImJhciIpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5aW5nV2hlblJ1bm5pbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJZGlydHkoKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0VHJ1ZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0VHJ1ZShpc0RpcnR5KCkpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlkaXJ0eSgpOwotCQkvLyBubyBhYm91dFRvQmVSZWNvbmNpbGVkIHNpbmNlIHRoZSByZWNvbmNpbGVyIGlzIHN0aWxsIHJ1bm5pbmcKLQkJLy8gd2hlbiB0aGUgc2Vjb25kIGVkaXRpb24gY29tZXMgaW4KLQkJYXNzZXJ0RXF1YWxzKCJyZWNvbmNpbGVyUmVzZXQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FuY2VsbGluZ1doZW5DbGVhbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhZ2FpbgotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gY2FuY2VsCi0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZSZWNvbmNpbGVyLnVuaW5zdGFsbCgpOwotCQlwb2xsVW50aWxJbmFjdGl2ZSgpOwotCQlhc3NlcnRUcnVlKGZDYWxsTG9nLmlzRW1wdHkoKSk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQkvLyBYWFggZmFpbHMgc2luY2UgQWJzdHJhY3RSZWNvbmNpbGVyIGRvZXMgbm90IHVwZGF0ZSBzdGF0ZSBiZWZvcmUgbGVhdmluZwotLy8JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7IC8vIGZhaWxzCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhbmNlbGxpbmdXaGVuUnVubmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhbmQgY2FuY2VsCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZSZWNvbmNpbGVyLnVuaW5zdGFsbCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0JCXBvbGxVbnRpbEluYWN0aXZlKCk7Ci0JCWFzc2VydFRydWUoZkNhbGxMb2cuaXNFbXB0eSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCS8vIFhYWCBmYWlscyBzaW5jZSBBYnN0cmFjdFJlY29uY2lsZXIgZG9lcyBub3QgdXBkYXRlIHN0YXRlIGJlZm9yZSBsZWF2aW5nCi0vLwkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjaW5nRG9jdW1lbnRXaGVuQ2xlYW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyByZXBsYWNlCi0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNpbmdEb2N1bWVudFdoZW5SdW5uaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCS8vIGRpcnR5IGFuZCByZXBsYWNlCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJYXNzZXJ0VHJ1ZShmQ2FsbExvZy5pc0VtcHR5KCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gWFhYIHRoaXMgZmFpbHMsIHdoaWNoIGlzIGEgYnVnIC0gcmVwbGFjaW5nIHRoZSBkb2N1bWVudCBzaG91bGQKLQkJLy8gY2FuY2VsIHRoZSBwcm9ncmVzcyBtb25pdG9yCi0vLwkJZkJhcnJpZXIuYXdhaXQoKTsKLS8vCQlhc3NlcnRFcXVhbHMoInByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotLy8JCWZCYXJyaWVyLndha2VBbGwoKTsKLQl9Ci0KLQl2b2lkIGluc3RhbGxEb2N1bWVudCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJmb28iKTsKLQkJZlZpZXdlci5zZXREb2N1bWVudChmRG9jdW1lbnQpOwotCi0JCS8vIGluaXRpYWwgcHJvY2VzcwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJZkNhbGxMb2cuY2xlYXIoKTsKLQl9Ci0KLQl2b2lkIHBvbGxVbnRpbENsZWFuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJLy8gd2FpdCBmb3IgcmVjb25jaWxlciB0byBiZWNvbWUgY2xlYW4KLQkJbG9uZyBzdGFydD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXdoaWxlIChpc0RpcnR5KCkpIHsKLQkJCWxvbmcgY3VycmVudD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlpZiAoY3VycmVudCA+IHN0YXJ0ICsgNTAwMCkKLQkJCQlmYWlsKCJ3YWl0ZWQgPiA1cyBmb3IgcmVjb25jaWxlciB0byBjb21wbGV0ZSIpOwotCQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQkJd2FpdCg1MCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl2b2lkIHBvbGxVbnRpbEluYWN0aXZlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJLy8gd2FpdCBmb3IgcmVjb25jaWxlciB0byBiZWNvbWUgY2xlYW4KLQkJbG9uZyBzdGFydD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXdoaWxlIChpc0FjdGl2ZSgpKSB7Ci0JCQlsb25nIGN1cnJlbnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJaWYgKGN1cnJlbnQgPiBzdGFydCArIDUwMDApCi0JCQkJZmFpbCgid2FpdGVkID4gNXMgZm9yIHJlY29uY2lsZXIgdG8gY29tcGxldGUiKTsKLQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCXdhaXQoNTApOwotCQkJfQotCQl9Ci0JfQotCi0JYm9vbGVhbiBpc0FjdGl2ZSgpIHsKLQkJT2JqZWN0IGJvb2w9IGZBY2Nlc3Nvci5pbnZva2UoImlzQWN0aXZlIiwgbnVsbCk7Ci0JCXJldHVybiAoKEJvb2xlYW4pIGJvb2wpLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCWJvb2xlYW4gaXNEaXJ0eSgpIHsKLQkJT2JqZWN0IGJvb2w9IGZBY2Nlc3Nvci5pbnZva2UoImlzRGlydHkiLCBudWxsKTsKLQkJcmV0dXJuICgoQm9vbGVhbikgYm9vbCkuYm9vbGVhblZhbHVlKCk7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9SZWNvbmNpbGVyVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZGZlMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9SZWNvbmNpbGVyVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJlY29uY2lsZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIFJlY29uY2lsZXJUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlRlc3QgU3VpdGUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5yZWNvbmNpbGVyIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMTE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5EZWZhdWx0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUGFydGl0aW9uVG9rZW5TY2FubmVyOwotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFBhcnRpdGlvbmVyVGVzdCBleHRlbmRzIEZhc3RQYXJ0aXRpb25lclRlc3QgewotCXByb3RlY3RlZCBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcihJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXIpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlcy5GYXN0UGFydGl0aW9uZXJUZXN0I3Rlc3RQUjEzMDkwMCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBSMTMwOTAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQnVnMTMwOTAwIG5vdCBmaXhlZCBpbiBEZWZhdWx0UGFydGl0aW9uZXIiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRmFzdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVBhcnRpdGlvblRva2VuU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQcmVkaWNhdGVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuTXVsdGlMaW5lUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLQotCi0vKioKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRQYXJ0aXRpb25lclplcm9MZW5ndGhUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlQ9ICJjb21tZW50IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVD0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvYzsKLQlwcml2YXRlIEZhc3RQYXJ0aXRpb25lciBmUGFydGl0aW9uZXI7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJZkRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBNdWx0aUxpbmVSdWxlKCIvKiIsICIqLyIsIGNvbW1lbnQpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCi0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gbmV3IEZhc3RQYXJ0aXRpb25lcihzY2FubmVyLCBuZXcgU3RyaW5nW10geyBERUZBVUxULCBDT01NRU5UIH0pOwotCQlmRG9jLnNldERvY3VtZW50UGFydGl0aW9uZXIoZlBhcnRpdGlvbmVyKTsKLQkJZlBhcnRpdGlvbmVyLmNvbm5lY3QoZkRvYyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhQYXJ0aXRpb24oKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoUGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZUVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ0VtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUJlZm9yZUJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEyLCAzOCwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAzOSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMjYsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VBZnRlckJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDE0LCA0MCwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczEoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDAsIGZEb2MuZ2V0TGVuZ3RoKCksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgaW50W10gb2Zmc2V0cywgU3RyaW5nIHN0YXJ0VHlwZSkgewotCQlJVHlwZWRSZWdpb25bXSByZWdpb25zPSBmUGFydGl0aW9uZXIuY29tcHV0ZVBhcnRpdGlvbmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIHRydWUpOwotCi0JCVN0cmluZyB0eXBlPSBzdGFydFR5cGU7Ci0JCWludCBwcmV2aW91c09mZnNldD0gc3RhcnRPZmZzZXQ7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9mZnNldHMubGVuZ3RoICsgMSwgcmVnaW9ucy5sZW5ndGgpOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBjdXJyZW50T2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBlbmRPZmZzZXQgOiBvZmZzZXRzW2ldOwotCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gcmVnaW9uc1tpXTsKLQotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBwcmV2aW91c09mZnNldCwgY3VycmVudE9mZnNldCwgdHlwZSk7Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IGN1cnJlbnRPZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlTdHJpbmcgdHlwZT0gREVGQVVMVDsKLQkJaW50IHByZXZpb3VzT2Zmc2V0PSAwOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBvZmZzZXQ9IChpID09IG9mZnNldHMubGVuZ3RoKSA/IGZEb2MuZ2V0TGVuZ3RoKCkgOiBvZmZzZXRzW2ldOwotCQkJYXNzZXJ0RXF1YWxQYXJ0aXRpb25UeXBlKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNPcGVuVHlwZShTdHJpbmcgdHlwZSkgewotCQlyZXR1cm4gdHlwZS5lcXVhbHMoREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uKGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBpc09wZW5UeXBlKHR5cGUpID8gb2Zmc2V0IDogb2Zmc2V0ICsgMTsKLQkJaW50IHRvPSBpc09wZW5UeXBlKHR5cGUpID8gaW5jbHVzaXZlRW5kIDogaW5jbHVzaXZlRW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlJVHlwZWRSZWdpb24gcmVnaW9uPSBmUGFydGl0aW9uZXIuZ2V0UGFydGl0aW9uKGksIHRydWUpOwotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBvZmZzZXQsIGluY2x1c2l2ZUVuZCwgdHlwZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0VHlwZWRSZWdpb24oSVR5cGVkUmVnaW9uIHJlZ2lvbiwgaW50IG9mZnNldCwgaW50IGluY2x1c2l2ZUVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGluY2x1c2l2ZUVuZCAtIG9mZnNldCwgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHR5cGUsIHJlZ2lvbi5nZXRUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUoaW50IG9mZnNldCwgaW50IGluY2x1c2l2ZUVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IGlzT3BlblR5cGUodHlwZSkgPyBvZmZzZXQgOiBvZmZzZXQgKyAxOwotCQlpbnQgdG89IGlzT3BlblR5cGUodHlwZSkgPyBpbmNsdXNpdmVFbmQgOiBpbmNsdXNpdmVFbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyh0eXBlLCBmUGFydGl0aW9uZXIuZ2V0Q29udGVudFR5cGUoaSwgdHJ1ZSkpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9GYXN0UGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9GYXN0UGFydGl0aW9uZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NzAxNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkZhc3RQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQYXJ0aXRpb25Ub2tlblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLk11bHRpTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuU2luZ2xlTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLQotCi0vKioKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEZhc3RQYXJ0aXRpb25lclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UPSAiY29tbWVudCI7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVD0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvYzsKLQlwcml2YXRlIElEb2N1bWVudFBhcnRpdGlvbmVyIGZQYXJ0aXRpb25lcjsKLQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlmRG9jPSBuZXcgRG9jdW1lbnQoKTsKLQkJSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcigpIHsKLQkJCXsKLQkJCQlJVG9rZW4gY29tbWVudD0gbmV3IFRva2VuKENPTU1FTlQpOwotCQkJCUlQcmVkaWNhdGVSdWxlW10gcnVsZXM9IG5ldyBJUHJlZGljYXRlUnVsZVtdIHsgbmV3IE11bHRpTGluZVJ1bGUoIi8qIiwgIiovIiwgY29tbWVudCkgfTsKLQkJCQlzZXRQcmVkaWNhdGVSdWxlcyhydWxlcyk7Ci0KLQkJCX0KLQkJfTsKLQkJZlBhcnRpdGlvbmVyPSBjcmVhdGVQYXJ0aXRpb25lcihzY2FubmVyKTsKLQkJZkRvYy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGZQYXJ0aXRpb25lcik7Ci0JCWZQYXJ0aXRpb25lci5jb25uZWN0KGZEb2MpOwotCX0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcihJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXIpIHsKLQkJcmV0dXJuIG5ldyBGYXN0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25FbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbkVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudFR5cGVFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZUVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlQmVmb3JlQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMiwgMzgsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAzOSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAyNiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUFmdGVyQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxNCwgNDAsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMxKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEsIDEyLCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UFIxMDEwMTQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnNldCgKLQkJCQkicGFja2FnZSBwcjEwMTAxNDtcbiIgKwotCQkJCSJcbiIgKwotCQkJCSJjbGFzcyBYIHtcbiIgKwotCQkJCSJTdHJpbmcgcz0gXG4iICsKLQkJCQkiCS8qZm9vKi87XG4iICsKLQkJCQkifVxuIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gezQxLCA0OH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQotCQlmRG9jLnJlcGxhY2UoNDAsIDgsICIJLypmb28qLyIpOwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBSMTMwOTAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZQYXJ0aXRpb25lci5kaXNjb25uZWN0KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBTaW5nbGVMaW5lUnVsZSgiIyIsIG51bGwsIGNvbW1lbnQsIChjaGFyKSAwLCB0cnVlLCBmYWxzZSkgfTsKLQkJCQlzZXRQcmVkaWNhdGVSdWxlcyhydWxlcyk7Ci0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gY3JlYXRlUGFydGl0aW9uZXIoc2Nhbm5lcik7Ci0JCWZEb2Muc2V0RG9jdW1lbnRQYXJ0aXRpb25lcihmUGFydGl0aW9uZXIpOwotCQlmUGFydGl0aW9uZXIuY29ubmVjdChmRG9jKTsKLQotCQlmRG9jLnNldCgiIyIpOwotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxIH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQotICAgIH0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMCwgZkRvYy5nZXRMZW5ndGgoKSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludFtdIG9mZnNldHMsIFN0cmluZyBzdGFydFR5cGUpIHsKLQkJSVR5cGVkUmVnaW9uW10gcmVnaW9ucz0gZlBhcnRpdGlvbmVyLmNvbXB1dGVQYXJ0aXRpb25pbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLQotCQlTdHJpbmcgdHlwZT0gc3RhcnRUeXBlOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IHN0YXJ0T2Zmc2V0OwotCi0JCWludCBqPSAwOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBjdXJyZW50T2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBlbmRPZmZzZXQgOiBvZmZzZXRzW2ldOwotCQkJaWYgKGN1cnJlbnRPZmZzZXQgLSBwcmV2aW91c09mZnNldCAhPSAwKSB7IC8vIGRvbid0IGRvIGVtcHR5IHBhcnRpdGlvbnMKLQkJCQlJVHlwZWRSZWdpb24gcmVnaW9uPSByZWdpb25zW2orK107Ci0KLQkJCQlhc3NlcnRUeXBlZFJlZ2lvbihyZWdpb24sIHByZXZpb3VzT2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCB0eXBlKTsKLQkJCX0KLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gY3VycmVudE9mZnNldDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0RXF1YWxQYXJ0aXRpb24oaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IG9mZnNldDsKLQkJaW50IHRvPSBlbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCUlUeXBlZFJlZ2lvbiByZWdpb249IGZQYXJ0aXRpb25lci5nZXRQYXJ0aXRpb24oaSk7Ci0JCQlhc3NlcnRUeXBlZFJlZ2lvbihyZWdpb24sIG9mZnNldCwgZW5kLCB0eXBlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRUeXBlZFJlZ2lvbihJVHlwZWRSZWdpb24gcmVnaW9uLCBpbnQgb2Zmc2V0LCBpbnQgZW5kLCBTdHJpbmcgdHlwZSkgewotCQlhc3NlcnRFcXVhbHMob2Zmc2V0LCByZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQlhc3NlcnRFcXVhbHMoZW5kIC0gb2Zmc2V0LCByZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHModHlwZSwgcmVnaW9uLmdldFR5cGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShpbnQgb2Zmc2V0LCBpbnQgZW5kLCBTdHJpbmcgdHlwZSkgewotCQlpbnQgZnJvbT0gb2Zmc2V0OwotCQlpbnQgdG89IGVuZCAtIDE7Ci0JCWZvciAoaW50IGk9IGZyb207IGkgPD0gdG87IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKHR5cGUsIGZQYXJ0aXRpb25lci5nZXRDb250ZW50VHlwZShpKSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1J1bGVzVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGRlYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1J1bGVzVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBSdWxlc1Rlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZT0gbmV3IFRlc3RTdWl0ZSgKLQkJCQkiVGVzdCBTdWl0ZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzIik7Ci0JCS8vICRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEZhc3RQYXJ0aXRpb25lclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVmYXVsdFBhcnRpdGlvbmVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShEZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShXb3JkUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2Nhbm5lckNvbHVtblRlc3QuY2xhc3MpOwotCQkvLyAkSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvU2Nhbm5lckNvbHVtblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMGM4YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvU2Nhbm5lckNvbHVtblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFNjYW5uZXI7Ci0KLQotLyoqCi0gKiBAc2luY2UgMy40Ci0gKi8KLXB1YmxpYyBjbGFzcyBTY2FubmVyQ29sdW1uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2N1bWVudDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJzY2FubmVyIHRlc3QiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJ1bGVCYXNlZFNjYW5uZXJDb2x1bW5SZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5SZWFkKG5ldyBSdWxlQmFzZWRTY2FubmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdWxlQmFzZWRTY2FubmVyQ29sdW1uVW5yZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQobmV3IFJ1bGVCYXNlZFNjYW5uZXIoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lckNvbHVtblJlYWQoKSB7Ci0JCV90ZXN0U2Nhbm5lckNvbHVtblJlYWQobmV3IEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcigxMDApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyZWRSdWxlQmFzZWRTY2FubmVyQ29sdW1uVW5yZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQobmV3IEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcigxMDApKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgX3Rlc3RTY2FubmVyQ29sdW1uUmVhZChSdWxlQmFzZWRTY2FubmVyIHNjYW5uZXIpIHsKLQkJc2Nhbm5lci5zZXRSYW5nZShmRG9jdW1lbnQsIDAsIDEwKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCQlhc3NlcnRFcXVhbHMoJ3MnLCBzY2FubmVyLnJlYWQoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJc2Nhbm5lci51bnJlYWQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQoUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZkRvY3VtZW50LCAwLCAxMCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCdzJywgc2Nhbm5lci5yZWFkKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCXNjYW5uZXIudW5yZWFkKCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvV29yZFJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNWVjZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvV29yZFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklXb3JkRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5QYXR0ZXJuUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLldvcmRSdWxlOwotCi0vKioKLSAqIEBzaW5jZSAzLjMKLSAqLwotcHVibGljIGNsYXNzIFdvcmRSdWxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2ltcGxlV29yZERldGVjdG9yIGltcGxlbWVudHMgSVdvcmREZXRlY3RvciB7Ci0JCXB1YmxpYyBib29sZWFuIGlzV29yZFN0YXJ0KGNoYXIgYykgewotCQkJcmV0dXJuICFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNXb3JkUGFydChjaGFyIGMpIHsKLQkJCXJldHVybiAhQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKTsKLQkJfQotCX0KLQotCi0JLyoKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMTE2Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE2MzExNigpIHRocm93cyBFeGNlcHRpb24gewotCQlJV29yZERldGVjdG9yIGRldGVjdG9yPSBuZXcgSVdvcmREZXRlY3RvcigpIHsKLQotCQkJcHVibGljIGJvb2xlYW4gaXNXb3JkUGFydChjaGFyIGMpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gaXNXb3JkU3RhcnQoY2hhciBjKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0KLQkJfTsKLQotCQlXb3JkUnVsZSBydWxlPSBuZXcgV29yZFJ1bGUoZGV0ZWN0b3IsIG5ldyBUb2tlbih0aGlzKSk7Ci0KLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHsgcnVsZSB9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQoKSwgMCwgMCk7Ci0KLQkJSVRva2VuIHRva2VuPSBudWxsOwotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKHRva2VuICE9IFRva2VuLkVPRiAmJiBpKysgPCAxMDAwKQotCQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0KLQkJYXNzZXJ0VHJ1ZShpIDwgMTAwMCk7Ci0KLQl9Ci0KLQkvKgotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNDQzNTUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTQ0MzU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlXb3JkRGV0ZWN0b3IgZGV0ZWN0b3I9IG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKTsKLQotCQlTdHJpbmcgZGVmYXVsdFRva2VuU3RyaW5nPSAiZGVmYXVsdFRva2VuIjsKLQkJVG9rZW4gZGVmYXVsdFRva2VuPSBuZXcgVG9rZW4oZGVmYXVsdFRva2VuU3RyaW5nKTsKLQotCQlTdHJpbmcgdGVzdFRva2VuU3RyaW5nTm9ybWFsPSAiVGVzdFRva2VuU3RyaW5nIjsKLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uPSAiVGVzdFRPS0VOU3RyaW5nIjsKLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ0NvbXBsZXRlbHlEaWZmZXJlbnQ9ICJYWFgiOwotCQlUb2tlbiBub3JtYWxUb2tlbj0gbmV3IFRva2VuKHRlc3RUb2tlblN0cmluZ05vcm1hbCk7Ci0KLQkJV29yZFJ1bGUgcnVsZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBkZWZhdWx0VG9rZW4sIHRydWUpOwotCQlydWxlLmFkZFdvcmQodGVzdFRva2VuU3RyaW5nTm9ybWFsLCBub3JtYWxUb2tlbik7Ci0KLQkJLy8gc2NlbmFyaW8gMQotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nICgiVGVzdFRva2VuU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHtydWxlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ05vcm1hbCksIDAsIHRlc3RUb2tlblN0cmluZ05vcm1hbC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDIKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyBidXQgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uICgiVGVzdFRPS0VOU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbiksIDAsIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHModGVzdFRva2VuU3RyaW5nTm9ybWFsKSk7Ci0KLQkJLy8gc2NlbmFyaW8gMwotCQkvLyBwcmU6IHBhc3MgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzdHJpbmcgKCJYWFgiKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIGRlZmF1bHQgdG9rZW4gdG8gYmUgcmV0dXJuZWQgYmVjYXVzZSB0aGUgc3RyaW5nIGNhbid0IGJlIG1hdGNoZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdDb21wbGV0ZWx5RGlmZmVyZW50KSwgMCwgdGVzdFRva2VuU3RyaW5nQ29tcGxldGVseURpZmZlcmVudC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKGRlZmF1bHRUb2tlblN0cmluZykpOwotCi0JCVdvcmRSdWxlIHJ1bGVXaXRob3V0SWdub3JlQ2FzZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBkZWZhdWx0VG9rZW4pOwotCQlydWxlV2l0aG91dElnbm9yZUNhc2UuYWRkV29yZCh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwsIG5vcm1hbFRva2VuKTsKLQotCQkvLyBzY2VuYXJpbyA0Ci0JCS8vIHByZTogcGFzcyBpbiBhIG5vcm1hbCBzdHJpbmcgKCJUZXN0VG9rZW5TdHJpbmciKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIG5vcm1hbCB0b2tlbiB0byBiZSByZXR1cm5lZAotCQlzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHtydWxlV2l0aG91dElnbm9yZUNhc2V9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nTm9ybWFsKSwgMCwgdGVzdFRva2VuU3RyaW5nTm9ybWFsLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHModGVzdFRva2VuU3RyaW5nTm9ybWFsKSk7Ci0KLQkJLy8gc2NlbmFyaW8gNQotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nIGJ1dCBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24gKCJUZXN0VE9LRU5TdHJpbmciKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIGRlZmF1bHQgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZVdpdGhvdXRJZ25vcmVDYXNlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uKSwgMCwgdGVzdFRva2VuU3RyaW5nRGlmZmVyZW50Q2FwaXRhbGl6YXRpb24ubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyhkZWZhdWx0VG9rZW5TdHJpbmcpKTsKLQl9Ci0KLQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NzEyCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE3NTcxMl8xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdWxlW10gcnVsZXM9IG5ldyBJUnVsZVsyXTsKLQotCQlJVG9rZW4gc3RlcFRva2VuPSBuZXcgVG9rZW4obmV3IFRleHRBdHRyaWJ1dGUobnVsbCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJUGF0dGVyblJ1bGUgc3RlcFJ1bGU9IG5ldyBQYXR0ZXJuUnVsZSgiKCgoIiwgIikiLCBzdGVwVG9rZW4sIChjaGFyKSAwLGZhbHNlKTsKLQkJc3RlcFJ1bGUuc2V0Q29sdW1uQ29uc3RyYWludCgtMSk7Ci0JCXJ1bGVzWzFdPSBzdGVwUnVsZTsKLQotCQlJVG9rZW4gdGl0bGVUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVdvcmRSdWxlIHdvcmRSdWxlPSBuZXcgV29yZFJ1bGUobmV3IFNpbXBsZVdvcmREZXRlY3RvcigpKTsKLQkJd29yZFJ1bGUuYWRkV29yZCgiKCgiLCB0aXRsZVRva2VuKTsKLQkJcnVsZXNbMF09IHdvcmRSdWxlOwotCi0JCUlEb2N1bWVudCBkb2N1bWVudD0gbmV3IERvY3VtZW50KCIoKCggXG4oKFxuLSBDaGVlc2Vcbi0gV2luZSIpOwotCQlSdWxlQmFzZWRTY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMocnVsZXMpOwotCQlzY2FubmVyLnNldFJhbmdlKGRvY3VtZW50LCAwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0KLQkJSVRva2VuIGRlZmF1bHRUb2tlbj0gbmV3IFRva2VuKHRoaXMpOwotCQlzY2FubmVyLnNldERlZmF1bHRSZXR1cm5Ub2tlbihkZWZhdWx0VG9rZW4pOwotCi0JCUlUb2tlbiB0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZSh0aXRsZVRva2VuLCB0b2tlbik7Ci0KLQl9Ci0KLQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NzEyCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE3NTcxMl8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdWxlW10gcnVsZXM9IG5ldyBJUnVsZVsyXTsKLQotCQlJVG9rZW4gc3RlcFRva2VuPSBuZXcgVG9rZW4obmV3IFRleHRBdHRyaWJ1dGUobnVsbCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJUGF0dGVyblJ1bGUgc3RlcFJ1bGU9IG5ldyBQYXR0ZXJuUnVsZSgiKCgoIiwgIikiLCBzdGVwVG9rZW4sIChjaGFyKSAwLGZhbHNlKTsKLQkJc3RlcFJ1bGUuc2V0Q29sdW1uQ29uc3RyYWludCgtMSk7Ci0JCXJ1bGVzWzFdPSBzdGVwUnVsZTsKLQotCQlJVG9rZW4gdGl0bGVUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVdvcmRSdWxlIHdvcmRSdWxlPSBuZXcgV29yZFJ1bGUobmV3IFNpbXBsZVdvcmREZXRlY3RvcigpKTsKLQkJd29yZFJ1bGUuYWRkV29yZCgiKCgiLCB0aXRsZVRva2VuKTsKLQkJcnVsZXNbMF09IHdvcmRSdWxlOwotCi0JCUlEb2N1bWVudCBkb2N1bWVudD0gbmV3IERvY3VtZW50KCIoKFxuKChcbi0gQ2hlZXNlXG4tIFdpbmUiKTsKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKHJ1bGVzKTsKLQkJc2Nhbm5lci5zZXRSYW5nZShkb2N1bWVudCwgMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCi0JCUlUb2tlbiBkZWZhdWx0VG9rZW49IG5ldyBUb2tlbih0aGlzKTsKLQkJc2Nhbm5lci5zZXREZWZhdWx0UmV0dXJuVG9rZW4oZGVmYXVsdFRva2VuKTsKLQotCQlJVG9rZW4gdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUodGl0bGVUb2tlbiwgdG9rZW4pOwotCi0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTE0ZDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBTdHJ1Y3R1cmVkIFNvdXJjZSBFZGl0b3IgZm9yIEpTUCBUZXN0cwotdmlldy5uYW1lLjAgPSBFbWJlZGRlZCBKU1AgU3RydWN0dXJlZCBUZXh0IFZpZXdlcgotZWRpdG9yLm5hbWUuMCA9IEdlbmVyaWMgU3RydWN0dXJlZCBUZXh0IEVkaXRvcgotdGFnbGlidmlldy5uYW1lLjA9VGFnbGliSW5kZXggRGVsdGEgVHJhY2UgVmlldwotX1VJX1NIT1dfVFJBTlNMQVRJT049U2hvdyBKYXZhIFRyYW5zbGF0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmNmYzU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4wIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEpTUCIKLQkJCWlkPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SlNQIiAvPgotCQk8dmlldwotCQkJbmFtZT0iJXRhZ2xpYnZpZXcubmFtZS4wIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5UYWdsaWJJbmRleERlbHRhVHJhY2VWaWV3IgotCQkJaWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldyIgLz4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KLQkJPGVkaXRvcgotCQkJbmFtZT0iJWVkaXRvci5uYW1lLjAiCi0JCQlleHRlbnNpb25zPSJwcm9qZWN0LCBjbGFzc3BhdGgsIHdlYnNldHRpbmdzLCBzZXJ2ZXJQcmVmZXJlbmNlIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiCi0JCQljb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3IiCi0JCQlzeW1ib2xpY0ZvbnROYW1lPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotCSAgICA8Y29tbWFuZAotCSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5zaG93VHJhbnNsYXRpb24iCi0JICAgICAgICAgIG5hbWU9IiVfVUlfU0hPV19UUkFOU0xBVElPTiI+Ci0JICAgIDwvY29tbWFuZD4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5iaW5kaW5ncyI+Ci0gICAgICA8IS0tICB3aW4zMjogIE0xPUNUUkwsICAgIE0yPVNISUZULCBNMz1BTFQsIE00PS0KLSAgICAgICAgICAgIGNhcmJvbjogTTE9Q09NTUFORCwgTTI9U0hJRlQsIE0zPUFMVCwgTTQ9Q1RSTAotICAgICAgICAgICAgZ3RrOiA/IAotICAgICAgLS0+Ci0JCTxrZXkKLQkJCXNlcXVlbmNlPSJNMStNMis5IgotCQkJY29udGV4dElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0cnVjdHVyZWRUZXh0RWRpdG9yU2NvcGUiCi0JCQljb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkuc2hvd1RyYW5zbGF0aW9uIgotCQkJc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iLz4KLQk8L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+Ci0gICAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5TaG93VHJhbnNsYXRpb25IYW5kbGVyIgotICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5zaG93VHJhbnNsYXRpb24iPgotICAgICAgIDwvaGFuZGxlcj4KLQk8L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkuY2xhc3NQYXR0ZXJuUHJvdmlkZXIiPgotICAgICAgIDxjbGFzc1BhdHRlcm5Qcm92aWRlcgotICAgICAgICAgICAgIGNvbnRlbnRUeXBlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnR5cGUiCi0gICAgICAgICAgICAgcGF0dGVybj0iKmZvbywqYmFyIj4KLSAgICAgICA8L2NsYXNzUGF0dGVyblByb3ZpZGVyPgotICAgICAgIDxjbGFzc1BhdHRlcm5Qcm92aWRlcgotICAgICAgICAgICAgIGNvbnRlbnRUeXBlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm11bHRpdHlwZSIKLSAgICAgICAgICAgICBwYXR0ZXJuPSIqZm9vLCpiYXIiPgotICAgICAgIDwvY2xhc3NQYXR0ZXJuUHJvdmlkZXI+Ci0gICAgICAgPGNsYXNzUGF0dGVyblByb3ZpZGVyCi0gICAgICAgICAgICAgY29udGVudFR5cGU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubXVsdGl0eXBlIgotICAgICAgICAgICAgIHBhdHRlcm49IipiYXoiPgotICAgICAgIDwvY2xhc3NQYXR0ZXJuUHJvdmlkZXI+Ci0gICAgPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9UZXN0SlNQQ29udGVudEFzc2lzdENvbXB1dGVycy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzQzMmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9UZXN0SlNQQ29udGVudEFzc2lzdENvbXB1dGVycy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvYmVhbmluZm9fdGVzdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2JlYW5pbmZvX3Rlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwYTlhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvYmVhbmluZm9fdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2luY2x1ZGVzX3Rlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9pbmNsdWRlc190ZXN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjA0ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2luY2x1ZGVzX3Rlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9qc3BzZWFyY2hfdGVzdHMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2pzcHNlYXJjaF90ZXN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2EzMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2pzcHNlYXJjaF90ZXN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvdGVzdEpTUEVMQ29udGVudEFzc2lzdC56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvdGVzdEpTUEVMQ29udGVudEFzc2lzdC56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZWFjMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3Rlc3RKU1BFTENvbnRlbnRBc3Npc3QuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BUcmFuc2xhdGlvbkVkaXRvcklucHV0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmZjZhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRvY3VtZW50SW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEpTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQgaW1wbGVtZW50cyBJU3RvcmFnZUVkaXRvcklucHV0IHsKLQlwcml2YXRlIGNsYXNzIEpTUFRyYW5zbGF0aW9uU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHsKLQkJLyoqCi0JCSAqIAotCQkgKi8KLQkJcHVibGljIEpTUFRyYW5zbGF0aW9uU3RvcmFnZShJRE9NTW9kZWwganNwTW9kZWwpIHsKLQkJCWZNb2RlbCA9IGpzcE1vZGVsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZQotCQkgKiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykKLQkJICovCi0JCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCQlyZXR1cm4gZk1vZGVsLmdldEFkYXB0ZXIoYWRhcHRlcik7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldENvbnRlbnRzKCkKLQkJICovCi0JCXB1YmxpYyBJbnB1dFN0cmVhbSBnZXRDb250ZW50cygpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCXJldHVybiBuZXcgRG9jdW1lbnRJbnB1dFN0cmVhbShnZXRUcmFuc2xhdGlvbkFkYXB0ZXIoKS5nZXRKU1BUcmFuc2xhdGlvbigpLmdldEphdmFEb2N1bWVudCgpKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0RnVsbFBhdGgoKQotCQkgKi8KLQkJcHVibGljIElQYXRoIGdldEZ1bGxQYXRoKCkgewotCQkJcmV0dXJuIG5ldyBQYXRoKGdldFRyYW5zbGF0aW9uQWRhcHRlcigpLmdldEpTUFRyYW5zbGF0aW9uKCkuZ2V0SmF2YVBhdGgoKSk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotLy8JCQlyZXR1cm4gZ2V0VHJhbnNsYXRpb25BZGFwdGVyKCkuZ2V0SlNQVHJhbnNsYXRpb24oKS5nZXRDb21waWxhdGlvblVuaXQoKS5nZXRFbGVtZW50TmFtZSgpOwotCQkJcmV0dXJuIG5ldyBQYXRoKGZNb2RlbC5nZXRCYXNlTG9jYXRpb24oKSkubGFzdFNlZ21lbnQoKSArICIuamF2YSI7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2lzUmVhZE9ubHkoKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JSURPTU1vZGVsIGZNb2RlbDsKLQotCXByaXZhdGUgSlNQVHJhbnNsYXRpb25TdG9yYWdlIGZTdG9yYWdlOwotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIEpTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQoSURPTU1vZGVsIG1vZGVsKSB7Ci0JCWZTdG9yYWdlID0gbmV3IEpTUFRyYW5zbGF0aW9uU3RvcmFnZShtb2RlbCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZXhpc3RzKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBleGlzdHMoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCXJldHVybiBmTW9kZWwuZ2V0QWRhcHRlcihhZGFwdGVyKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRJbWFnZURlc2NyaXB0b3IoKQotCSAqLwotCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXROYW1lKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBmU3RvcmFnZS5nZXROYW1lKCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0UGVyc2lzdGFibGUoKQotCSAqLwotCXB1YmxpYyBJUGVyc2lzdGFibGVFbGVtZW50IGdldFBlcnNpc3RhYmxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQjZ2V0U3RvcmFnZSgpCi0JICovCi0JcHVibGljIElTdG9yYWdlIGdldFN0b3JhZ2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBmU3RvcmFnZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRUb29sVGlwVGV4dCgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJcmV0dXJuIGZNb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQl9Ci0KLQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgZ2V0VHJhbnNsYXRpb25BZGFwdGVyKCkgewotCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIGZNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJcmV0dXJuIGFkYXB0ZXI7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNmZlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLkpTUFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuSlNQVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBKU1AgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydE5vdFNhbWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIiArIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFLCAiPD0iKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKYXZhU2V2ZXJpdHlQYWdlSURzTWF0Y2goKSB7Ci0JCS8vIHVzZWQgd2hlbiBsaW5raW5nIGZyb20gb3VyIEpTUCBzZXZlcml0eSBwcmVmZXJlbmNlIHBhZ2UgdG8gdGhlIEphdmEgc2V2ZXJpdHkgcHJlZmVyZW5jZSBwYWdlCi0JCWFzc2VydEVxdWFscyhvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUHJvYmxlbVNldmVyaXRpZXNQcmVmZXJlbmNlUGFnZS5QUkVGX0lELG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuSlNQVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLkpBVkFfU0VWRVJJVFlfUFJFRkVSRU5DRV9QQUdFKTsKLQkJYXNzZXJ0RXF1YWxzKG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5Qcm9ibGVtU2V2ZXJpdGllc1ByZWZlcmVuY2VQYWdlLlBST1BfSUQsb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5KU1BWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuSkFWQV9TRVZFUklUWV9QUk9QRVJUWV9QQUdFKTsKLQkJYXNzZXJ0RXF1YWxzKG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5Qcm9wZXJ0eUFuZFByZWZlcmVuY2VQYWdlLkRBVEFfTk9fTElOSywgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5KU1BWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuREFUQV9OT19MSU5LKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdEltYWdlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RJbWFnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlMWViMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdEltYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLQotcHVibGljIGZpbmFsIGNsYXNzIEpTUFVJVGVzdEltYWdlcyB7Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElDT05TX1BBVEggPSAiaWNvbnMvZnVsbC8iOyAvLyROT04tTkxTLTEkCi0KLQkvKiBkaXNhYmxlZCAqLwotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBETENMID0gSUNPTlNfUEFUSCArICJkbGNsMTYvIjsgLy8gJE5PTi1OTFMtMSQKLQkvKiBlbmFibGVkICovCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEVMQ0wgPSBJQ09OU19QQVRIICsgImVsY2wxNi8iOyAvLyROT04tTkxTLTEkCi0KLQkvLyBJbWFnZXMgY291cnRlc3kgb2Ygb3JnLmVjbGlwc2UuZGVidWcudWkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfRUxDTF9TVVNQRU5EID0gRUxDTCArICJTVVNQRU5EIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19FTENMX1JFU1VNRSA9IEVMQ0wgKyAiUkVTVU1FIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19ETENMX1NVU1BFTkQgPSBETENMICsgIlNVU1BFTkQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0RMQ0xfUkVTVU1FID0gRExDTCArICJSRVNVTUUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0VMQ0xfUkVNT1ZFX0FMTCA9IEVMQ0wgKyAiQ0xFQVIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0RMQ0xfUkVNT1ZFX0FMTCA9IERMQ0wgKyAiQ0xFQVIiOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgdm9pZCBpbml0aWFsaXplSW1hZ2VSZWdpc3RyeShJbWFnZVJlZ2lzdHJ5IHJlZykgewotCQlyZWcucHV0KElNR19FTENMX1JFU1VNRSwgQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKEpTUFVJVGVzdHNQbHVnaW4uSUQsIEVMQ0wgKyAicmVzdW1lX2NvLmdpZiIpKTsKLQkJcmVnLnB1dChJTUdfRExDTF9SRVNVTUUsIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKU1BVSVRlc3RzUGx1Z2luLklELCBETENMICsgInJlc3VtZV9jby5naWYiKSk7Ci0KLQkJcmVnLnB1dChJTUdfRUxDTF9TVVNQRU5ELCBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oSlNQVUlUZXN0c1BsdWdpbi5JRCwgRUxDTCArICJzdXNwZW5kX2NvLmdpZiIpKTsKLQkJcmVnLnB1dChJTUdfRExDTF9TVVNQRU5ELCBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oSlNQVUlUZXN0c1BsdWdpbi5JRCwgRExDTCArICJzdXNwZW5kX2NvLmdpZiIpKTsKLQotCQlyZWcucHV0KElNR19FTENMX1JFTU9WRV9BTEwsIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKU1BVSVRlc3RzUGx1Z2luLklELCBFTENMICsgInJlbV9hbGxfY28uZ2lmIikpOwotCQlyZWcucHV0KElNR19ETENMX1JFTU9WRV9BTEwsIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKU1BVSVRlc3RzUGx1Z2luLklELCBETENMICsgInJlbV9hbGxfY28uZ2lmIikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg1ODM4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkpGYWNlVGV4dFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmJyZWFrcG9pbnRwcm92aWRlcnMuQnJlYWtwb2ludFByb3ZpZGVyc1Rlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkJlYW5JbmZvUHJvdmlkZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5KU1BFTENvbnRlbnRBc3Npc3RUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5KU1BKYXZhVHJhbnNsYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkpTUFRyYW5zbGF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50ZGVzY3JpcHRpb24uVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LkZpbGVCdWZmZXJEb2N1bWVudFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsLlRlc3RNb2RlbHNGcm9tRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlci5TY2FubmVyVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIuVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZS5UZXN0UGFnZURpcmVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZy5UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52YWxpZGF0aW9uLkpTUEhUTUxWYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudGVzdHMuRWNsaXBzZVRleHRUZXN0U3VpdGU7Ci0KLQotCi0KLXB1YmxpYyBjbGFzcyBKU1BVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEpTUFVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEpTUFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSlNQIFVJIFRlc3QgU3VpdGUiKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTY2FubmVyVW5pdFRlc3RzLmNsYXNzLCAiU2Nhbm5lclVuaXRUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVuaXRUZXN0cy5jbGFzcywgIlVuaXRUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuY2xhc3MsICJUZXN0U3RydWN0dXJlZFBhcnRpb25lciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE1vZGVsUXVlcnlUZXN0ZXIuY2xhc3MsICJNb2RlbFF1ZXJ5VGVzdGVyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmNsYXNzLCAiTWl4ZWQgSmF2YVNjcmlwdCBUcmFuc2xhdG9yIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVtYWlsTm90aWNlLmNsYXNzLCAiVGVzdEVtYWlsTm90aWNlIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQmVhbkluZm9Qcm92aWRlclRlc3QuY2xhc3MsICJCZWFuSW5mbyBQcm92aWRlciBUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQVHJhbnNsYXRpb25UZXN0LmNsYXNzLCAiVHJhbnNsYXRvciBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEVMQ29udGVudEFzc2lzdFRlc3QuY2xhc3MsICJKU1AgRUwgQ29udGVudCBBc3Npc3QgVGVzdHMiKSk7Ci0JCWFkZFRlc3QoVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnMuc3VpdGUoKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5jbGFzcywgIkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BVSVByZWZlcmVuY2VzVGVzdC5jbGFzcywgIlByZWZlcmVuY2UgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5jbGFzcywgIlNvdXJjZSBWaWV3ZXIgQ29uZmlndXJhdGlvbiBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uSlNQLmNsYXNzLCAiRWRpdG9yIENvbmZpZ3VyYXRpb24gVGVzdHMiKSk7Ci0JCQotCQkvLyBtb3ZlZCBmcm9tIGpzcCBjb3JlIHRlc3RzIGJlY2F1c2UgdGhleSByZXF1aXJlIFVJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0UGFnZURpcmVjdGl2ZS5jbGFzcywgIlBhZ2UgRGlyZWN0aXZlIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmNsYXNzLCAiRmlsZUJ1ZmZlciBEb2N1bWVudCBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbENsb25lLmNsYXNzLCAiTW9kZWwgQ2xvbmUgVGVzdHMiKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsc0Zyb21GaWxlcy5jbGFzcywgIlRlc3QgTW9kZWxzIEZyb20gRmlsZXMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmNsYXNzLCAiVGVzdCBNb2RlbCBFbWJlZGRlZCBDb250ZW50VHlwZSIpKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgIkNvbnRlbnQgRGVzY3JpcHRpb24gVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BIVE1MVmFsaWRhdG9yVGVzdC5jbGFzcywgIkpTUCBIVE1MIFZhbGlkYXRvciBUZXN0IikpOwotCi0JCS8vIEJyZWFrcG9pbnQgUHJvdmlkZXJzCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShCcmVha3BvaW50UHJvdmlkZXJzVGVzdC5jbGFzcywgIkFkZGl0aW9uYWwgSlNQIEJyZWFrcG9pbnQgY2xhc3NlcyIpKTsKLQotCQkvLyBwYV9UT0RPIGZpeCB0aGlzIHRlc3QKLQkJLy9hZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQU2VhcmNoVGVzdHMuY2xhc3MpKTsKLQotCQlhZGRUZXN0KEpGYWNlVGV4dFRlc3RTdWl0ZS5zdWl0ZSgpKTsKLQkJYWRkVGVzdChFY2xpcHNlVGV4dFRlc3RTdWl0ZS5zdWl0ZSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjFkOTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSlNQVUlUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBKU1BVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiOwotCi0gICAgLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBKU1BVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuU1NFRm9ySlNQVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KEltYWdlUmVnaXN0cnkgcmVnKSB7Ci0JCXN1cGVyLmluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KHJlZyk7Ci0JCUpTUFVJVGVzdEltYWdlcy5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeShyZWcpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmIxMDcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjIxMTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuSVByb2JsZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQUHJvYmxlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Bbm5vdGF0aW9uVHlwZUxvb2t1cDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLQotLyoqCi0gKiBPcGVucyB0aGUgY3VycmVudCBKU1AgZWRpdG9yJ3MgY3VycmVudCB0cmFuc2xhdGVkIHNvdXJjZSBpbiBhIEphdmEgZWRpdG9yCi0gKiAKLSAqIEludm9rZSB3aXRoIE0xK00yKzkKLSAqIAotICogQGF1dGhvciBuaXRpbgotICovCi1wdWJsaWMgY2xhc3MgU2hvd1RyYW5zbGF0aW9uSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgU2hvd1RyYW5zbGF0aW9uSGFuZGxlcigpIHsKLQl9Ci0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUKLQkgKiBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcwotCSAqIC5FeGVjdXRpb25FdmVudCkKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkvLyBJREUub3BlbkVkaXRvcihldmVudC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwgY3JlYXRlRWRpdG9ySW5wdXQoKSwKLQkJLy8gSmF2YVVJLklEX0NVX0VESVRPUiwgdHJ1ZSk7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwuZ2V0Q3VycmVudFNlbGVjdGlvbihldmVudCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKTsKLQkJCWlmICghbGlzdC5pc0VtcHR5KCkpIHsKLQkJCQlpZiAobGlzdC5nZXQoMCkgaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkJCQlmaW5hbCBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKSBsaXN0LmdldCgwKSkuZ2V0TW9kZWwoKTsKLQkJCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJCQkJSm9iIG9wZW5lciA9IG5ldyBVSUpvYigiT3BlbmluZyBKU1AgSmF2YSBUcmFuc2xhdGlvbiIpIHsKLQkJCQkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCQkJCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQkJCQkJCWZpbmFsIEpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0KLQkJCQkJCQkJLy8gY3JlYXRlIGFuIElFZGl0b3JJbnB1dCBmb3IgdGhlIEphdmEgZWRpdG9yCi0JCQkJCQkJCWZpbmFsIElTdG9yYWdlRWRpdG9ySW5wdXQgaW5wdXQgPSBuZXcgSlNQVHJhbnNsYXRpb25FZGl0b3JJbnB1dChtb2RlbCk7Ci0JCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBJREUub3BlbkVkaXRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSwgaW5wdXQsIEphdmFVSS5JRF9DVV9FRElUT1IsIHRydWUpOwotCQkJCQkJCQkJLy8gTm93IGFkZCB0aGUgcHJvYmxlbXMgd2UgZm91bmQKLQkJCQkJCQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikgewotCQkJCQkJCQkJCUlBbm5vdGF0aW9uTW9kZWwgYW5ub3RhdGlvbk1vZGVsID0gKChJVGV4dEVkaXRvcikgZWRpdG9yKS5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGlucHV0KTsKLQkJCQkJCQkJCQl0cmFuc2xhdGlvbi5yZWNvbmNpbGVDb21waWxhdGlvblVuaXQoKTsKLQkJCQkJCQkJCQlMaXN0IHByb2JsZW1zTGlzdCA9IHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCk7Ci0JCQkJCQkJCQkJSVByb2JsZW1bXSBwcm9ibGVtcyA9IChJUHJvYmxlbVtdKSBwcm9ibGVtc0xpc3QudG9BcnJheShuZXcgSVByb2JsZW1bcHJvYmxlbXNMaXN0LnNpemUoKV0pOwotCQkJCQkJCQkJCUFubm90YXRpb25UeXBlTG9va3VwIGxvb2t1cCA9IG5ldyBBbm5vdGF0aW9uVHlwZUxvb2t1cCgpOwotCQkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvYmxlbXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCQkJCQkJaWYgKHByb2JsZW1zW2ldIGluc3RhbmNlb2YgSUpTUFByb2JsZW0pCi0JCQkJCQkJCQkJCQljb250aW51ZTsKLQkJCQkJCQkJCQkJaW50IGxlbmd0aCA9IHByb2JsZW1zW2ldLmdldFNvdXJjZUVuZCgpIC0gcHJvYmxlbXNbaV0uZ2V0U291cmNlU3RhcnQoKSArIDE7Ci0JCQkJCQkJCQkJCVBvc2l0aW9uIHBvc2l0aW9uID0gbmV3IFBvc2l0aW9uKHByb2JsZW1zW2ldLmdldFNvdXJjZVN0YXJ0KCksIGxlbmd0aCk7Ci0JCQkJCQkJCQkJCUFubm90YXRpb24gYW5ub3RhdGlvbiA9IG51bGw7Ci0JCQkJCQkJCQkJCVN0cmluZyB0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9JTkZPKTsKLQkJCQkJCQkJCQkJaWYgKHByb2JsZW1zW2ldLmlzRXJyb3IoKSkgewotCQkJCQkJCQkJCQkJdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWVsc2UgaWYgKHByb2JsZW1zW2ldLmlzV2FybmluZygpKSB7Ci0JCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQlhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb24odHlwZSwgZmFsc2UsIHByb2JsZW1zW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQkJCQkJCQkJCWlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsKLQkJCQkJCQkJCQkJCWFubm90YXRpb25Nb2RlbC5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24sIHBvc2l0aW9uKTsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJCQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmJlZXAoKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkJCQl9Ci0JCQkJCQl9OwotCQkJCQkJb3BlbmVyLnNldFN5c3RlbShmYWxzZSk7Ci0JCQkJCQlvcGVuZXIuc2V0VXNlcih0cnVlKTsKLQkJCQkJCW9wZW5lci5zY2hlZHVsZSgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UYWdsaWJJbmRleERlbHRhVHJhY2VWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZWEwNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UYWdsaWJJbmRleERlbHRhVHJhY2VWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFycmF5Q29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLklUYWdsaWJJbmRleERlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuSVRhZ2xpYkluZGV4TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5UYWdsaWJJbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLlRhZ2xpYkluZGV4RGVsdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TYXNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotCi1wdWJsaWMgY2xhc3MgVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgTUVNX0xJU1RFTklORyA9ICJJU19MSVNURU5JTkciOwotCWJvb2xlYW4gaXNMaXN0ZW5pbmcgPSBmYWxzZTsKLQotCS8qKgotCSAqIFJlc3VtZXMgbGlzdGVuaW5nIHRvIFRhZ2xpYkluZGV4RGVsdGFzCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBSZXN1bWVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgUmVzdW1lQWN0aW9uKCkgewotCQkJc3VwZXIoKTsKLQkJCXNldFRleHQoIlJlc3VtZSIpOwotCQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXREZXNjcmlwdG9yKEpTUFVJVGVzdEltYWdlcy5JTUdfRUxDTF9SRVNVTUUpKTsKLQkJCXNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXREZXNjcmlwdG9yKEpTUFVJVGVzdEltYWdlcy5JTUdfRExDTF9SRVNVTUUpKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJVGFnbGliSW5kZXguYWRkVGFnbGliSW5kZXhMaXN0ZW5lcihmSW50ZXJuYWxMaXN0ZW5lcik7Ci0JCQlpc0xpc3RlbmluZyA9IHRydWU7Ci0JCQlmU3VzcGVuZEFjdGlvbi5zZXRFbmFibGVkKHRydWUpOwotCQkJc2V0RW5hYmxlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gVGFnbGliSW5kZXhEZWx0YXMKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFN1c3BlbmRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgU3VzcGVuZEFjdGlvbigpIHsKLQkJCXNldFRleHQoIlN1c3BlbmQiKTsKLQkJCXNldEltYWdlRGVzY3JpcHRvcihKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0RGVzY3JpcHRvcihKU1BVSVRlc3RJbWFnZXMuSU1HX0VMQ0xfU1VTUEVORCkpOwotCQkJc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldERlc2NyaXB0b3IoSlNQVUlUZXN0SW1hZ2VzLklNR19ETENMX1NVU1BFTkQpKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJVGFnbGliSW5kZXgucmVtb3ZlVGFnbGliSW5kZXhMaXN0ZW5lcihmSW50ZXJuYWxMaXN0ZW5lcik7Ci0JCQlpc0xpc3RlbmluZyA9IGZhbHNlOwotCQkJc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQlmUmVzdW1lQWN0aW9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBFbXB0aWVzIGRlbHRhcyBmcm9tIHZpZXdlcgotCSAqLwotCXByaXZhdGUgY2xhc3MgQ2xlYXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgQ2xlYXJBY3Rpb24oKSB7Ci0JCQlzZXRUZXh0KCJDbGVhciIpOwotCQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXREZXNjcmlwdG9yKEpTUFVJVGVzdEltYWdlcy5JTUdfRUxDTF9SRU1PVkVfQUxMKSk7Ci0JCQlzZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcihKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0RGVzY3JpcHRvcihKU1BVSVRlc3RJbWFnZXMuSU1HX0RMQ0xfUkVNT1ZFX0FMTCkpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlmSW5wdXQuY2xlYXIoKTsKLQkJCWZWaWV3ZXIucmVmcmVzaCgpOwotCQkJc2V0RW5hYmxlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBUYWdsaWJJbmRleExpc3RlbmVyIGltcGxlbWVudHMgSVRhZ2xpYkluZGV4TGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBpbmRleENoYW5nZWQoZmluYWwgSVRhZ2xpYkluZGV4RGVsdGEgZGVsdGEpIHsKLQkJCWdldENvbnRyb2woKS5nZXREaXNwbGF5KCkuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJZklucHV0LmFkZChkZWx0YSk7Ci0JCQkJCWZWaWV3ZXIucmVmcmVzaCgpOwotCQkJCQlmVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihkZWx0YSkpOwotCQkJCQlmQ2xlYXJBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCUlUYWdsaWJJbmRleExpc3RlbmVyIGZJbnRlcm5hbExpc3RlbmVyID0gbnVsbDsKLQotCUxpc3QgZklucHV0ID0gbmV3IEFycmF5TGlzdCgpOwotCVRhYmxlVmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCVJlc3VtZUFjdGlvbiBmUmVzdW1lQWN0aW9uOwotCVN1c3BlbmRBY3Rpb24gZlN1c3BlbmRBY3Rpb247Ci0JSUFjdGlvbiBmQ2xlYXJBY3Rpb247Ci0KLQlwdWJsaWMgVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldygpIHsKLQkJc3VwZXIoKTsKLQkJZkludGVybmFsTGlzdGVuZXIgPSBuZXcgVGFnbGliSW5kZXhMaXN0ZW5lcigpOwotCX0KLQotCXZvaWQgc2hvd1NlbGVjdGlvbkRldGFpbChmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlKSB7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZlZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJaWYgKCFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0JCQlmaW5hbCBUYWdsaWJJbmRleERlbHRhIHNlbGVjdGVkRGVsdGEgPSAoVGFnbGliSW5kZXhEZWx0YSkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJZmluYWwgSVRhYmxlTGFiZWxQcm92aWRlciB0YWJsZUxhYmVsUHJvdmlkZXIgPSAoKElUYWJsZUxhYmVsUHJvdmlkZXIpIGZWaWV3ZXIuZ2V0TGFiZWxQcm92aWRlcigpKTsKLQkJCVN0cmluZyBjb2x1bW5UZXh0ID0gdGFibGVMYWJlbFByb3ZpZGVyLmdldENvbHVtblRleHQoc2VsZWN0ZWREZWx0YSwgMSk7Ci0JCQljb2x1bW5UZXh0ID0gY29sdW1uVGV4dCArICI6IiArIHRhYmxlTGFiZWxQcm92aWRlci5nZXRDb2x1bW5UZXh0KHNlbGVjdGVkRGVsdGEsIDIpOwotCQkJbmV3IERpYWxvZyhjb21wb3NpdGUuZ2V0U2hlbGwoKSkgewotCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKLQkJCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQkJCQkJc3VwZXIuY3JlYXRlKCk7Ci0JCQkJfQotCi0JCQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQkJCWZpbmFsIENvbXBvc2l0ZSBpbm5lciA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCQkJCWlubmVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSkpOwotCQkJCQlmaW5hbCBTYXNoIHNhc2ggPSBuZXcgU2FzaChpbm5lciwgU1dULkhPUklaT05UQUwpOwotCi0JCQkJCWZpbmFsIFRyZWVWaWV3ZXIgdHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKGlubmVyKTsKLQkJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElUcmVlQ29udGVudFByb3ZpZGVyKCkgewotCQkJCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCQkJCQkJcmV0dXJuIGdldENoaWxkcmVuKGlucHV0RWxlbWVudCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJCQkJcmV0dXJuIGdldENoaWxkcmVuKGVsZW1lbnQpLmxlbmd0aCA+IDA7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJCQkJcmV0dXJuIHNlbGVjdGVkRGVsdGE7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkgewotCQkJCQkJCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgVGFnbGliSW5kZXhEZWx0YSkgewotCQkJCQkJCQlUYWdsaWJJbmRleERlbHRhIHRhZ2xpYkluZGV4RGVsdGEgPSAoKFRhZ2xpYkluZGV4RGVsdGEpIHBhcmVudEVsZW1lbnQpOwotCQkJCQkJCQlpZiAodGFnbGliSW5kZXhEZWx0YS5nZXRUcmlnZ2VyKCkgIT0gbnVsbCkgewotCQkJCQkJCQkJTGlzdCBjb21iaW5lZCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJCQkJCWNvbWJpbmVkLmFkZCh0YWdsaWJJbmRleERlbHRhLmdldFRyaWdnZXIoKSk7Ci0JCQkJCQkJCQljb21iaW5lZC5hZGRBbGwoQXJyYXlzLmFzTGlzdCh0YWdsaWJJbmRleERlbHRhLmdldEFmZmVjdGVkQ2hpbGRyZW4oKSkpOwotCQkJCQkJCQkJcmV0dXJuIGNvbWJpbmVkLnRvQXJyYXkoKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlyZXR1cm4gdGFnbGliSW5kZXhEZWx0YS5nZXRBZmZlY3RlZENoaWxkcmVuKCk7Ci0JCQkJCQkJfQotCQkJCQkJCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMYWJlbFByb3ZpZGVyKCkgewotCQkJCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJVGFnbGliSW5kZXhEZWx0YSkgewotCQkJCQkJCQlJVGFnbGliSW5kZXhEZWx0YSB0YWdsaWJJbmRleERlbHRhID0gKChJVGFnbGliSW5kZXhEZWx0YSkgZWxlbWVudCk7Ci0JCQkJCQkJCWlmICh0YWdsaWJJbmRleERlbHRhLmdldFRhZ2xpYlJlY29yZCgpICE9IG51bGwpCi0JCQkJCQkJCQlyZXR1cm4gdGFnbGliSW5kZXhEZWx0YS50b1N0cmluZygpOwotCQkJCQkJCQlTdHJpbmcgdGV4dCA9IHRhYmxlTGFiZWxQcm92aWRlci5nZXRDb2x1bW5UZXh0KHNlbGVjdGVkRGVsdGEsIDEpOwotCQkJCQkJCQl0ZXh0ID0gdGV4dCArICI6IiArIHRhYmxlTGFiZWxQcm92aWRlci5nZXRDb2x1bW5UZXh0KHNlbGVjdGVkRGVsdGEsIDIpOwotCQkJCQkJCQlyZXR1cm4gdGV4dDsKLQkJCQkJCQl9Ci0JCQkJCQkJcmV0dXJuIFN0cmluZ1V0aWxzLmZpcnN0TGluZU9mKHN1cGVyLmdldFRleHQoZWxlbWVudCkpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQkJdHJlZVZpZXdlci5zZXRJbnB1dChzZWxlY3RlZERlbHRhKTsKLQotCQkJCQlmaW5hbCBUZXh0IHRleHQgPSBuZXcgVGV4dChpbm5lciwgU1dULk1VTFRJKTsKLQotCQkJCQl0cmVlVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uMiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdHJlZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJCQkJCQlpZiAoIXNlbGVjdGlvbjIuaXNFbXB0eSgpKQotCQkJCQkJCQl0ZXh0LnNldFRleHQoIiIgKyAoc2VsZWN0aW9uMikuZ2V0Rmlyc3RFbGVtZW50KCkpOwotCQkJCQkJCWVsc2UKLQkJCQkJCQkJdGV4dC5zZXRUZXh0KCIiKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0KLQkJCQkJZmluYWwgRm9ybUxheW91dCBmb3JtID0gbmV3IEZvcm1MYXlvdXQoKTsKLQkJCQkJaW5uZXIuc2V0TGF5b3V0KGZvcm0pOwotCi0JCQkJCUZvcm1EYXRhIGZpcnN0RGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQkJCQlmaXJzdERhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQkJCQlmaXJzdERhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KHNhc2gsIDIpOwotCQkJCQlmaXJzdERhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJCQkJZmlyc3REYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0JCQkJCXRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldExheW91dERhdGEoZmlyc3REYXRhKTsKLQotCQkJCQlGb3JtRGF0YSBzZWNvbmREYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQkJCXNlY29uZERhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHNhc2gsIDIpOwotCQkJCQlzZWNvbmREYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCQkJCXNlY29uZERhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKLQkJCQkJc2Vjb25kRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKLQkJCQkJdGV4dC5zZXRMYXlvdXREYXRhKHNlY29uZERhdGEpOwotCi0JCQkJCWZpbmFsIEZvcm1EYXRhIHNhc2hEYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQkJCXNhc2hEYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg2MCwgMCk7Ci0JCQkJCXNhc2hEYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCQkJCXNhc2hEYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0JCQkJCXNhc2guc2V0TGF5b3V0RGF0YShzYXNoRGF0YSk7Ci0JCQkJCXNhc2guYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyKCkgewotCQkJCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgewotCQkJCQkJCXNhc2hEYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCBlLnkpOwotCQkJCQkJCWlubmVyLmxheW91dCgpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQkJcmV0dXJuIHNhc2g7Ci0JCQkJfQotCQkJfS5vcGVuKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWZWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIocGFyZW50LCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OKTsKLQkJZlZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRvdWJsZUNsaWNrKERvdWJsZUNsaWNrRXZlbnQgZXZlbnQpIHsKLQkJCQlzaG93U2VsZWN0aW9uRGV0YWlsKHBhcmVudCk7Ci0JCQl9Ci0KLQkJfSk7Ci0JCWZWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsKLQkJZlZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBJVGFibGVMYWJlbFByb3ZpZGVyKCkgewotCQkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJfQotCi0JCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpIHsKLQkJCQkJY2FzZSAwIDogewotCQkJCQkJcmV0dXJuIExvbmcudG9TdHJpbmcoKChUYWdsaWJJbmRleERlbHRhKSBlbGVtZW50KS5nZXRUaW1lKCkpOwotCQkJCQl9Ci0JCQkJCWNhc2UgMSA6IHsKLQkJCQkJCVN0cmluZyBraW5kID0gbnVsbDsKLQkJCQkJCXN3aXRjaCAoKChJVGFnbGliSW5kZXhEZWx0YSkgZWxlbWVudCkuZ2V0S2luZCgpKSB7Ci0JCQkJCQkJY2FzZSBJVGFnbGliSW5kZXhEZWx0YS5BRERFRCA6Ci0JCQkJCQkJCWtpbmQgPSAiYWRkZWQiOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQljYXNlIElUYWdsaWJJbmRleERlbHRhLlJFTU9WRUQgOgotCQkJCQkJCQlraW5kID0gInJlbW92ZWQiOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQljYXNlIElUYWdsaWJJbmRleERlbHRhLkNIQU5HRUQgOgotCQkJCQkJCQlraW5kID0gImNoYW5nZWQiOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJCXJldHVybiBraW5kOwotCQkJCQl9Ci0JCQkJCWNhc2UgMiA6Ci0JCQkJCQlyZXR1cm4gKChJVGFnbGliSW5kZXhEZWx0YSkgZWxlbWVudCkuZ2V0UHJvamVjdCgpLmdldE5hbWUoKTsKLQkJCQkJY2FzZSAzIDoKLQkJCQkJCXJldHVybiAoKFRhZ2xpYkluZGV4RGVsdGEpIGVsZW1lbnQpLmdldFRyaWdnZXIoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlyZXR1cm4gIiI7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJfSk7Ci0KLQkJU3RyaW5nW10gY29sdW1uUHJvcGVydGllcyA9IG5ldyBTdHJpbmdbXXsidGltZSIsICJLaW5kIiwgIlByb2plY3QiLCAiVHJpZ2dlciJ9OwotCQlUYWJsZUxheW91dCB0bGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0JCUNlbGxFZGl0b3JbXSBjZWxsRWRpdG9ycyA9IG5ldyBDZWxsRWRpdG9yW2NvbHVtblByb3BlcnRpZXMubGVuZ3RoXTsKLQkJaW50IGNvbHVtbldpZHRoc1tdID0gbmV3IGludFtde0Rpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEJvdW5kcygpLndpZHRoIC8gMTQsIERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEJvdW5kcygpLndpZHRoIC8gNywgRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLyA3LCBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRCb3VuZHMoKS53aWR0aCAvIDE0LCBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRCb3VuZHMoKS53aWR0aCAvIDd9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtblByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKLQkJCXRsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgxKSk7Ci0JCQlUYWJsZUNvbHVtbiB0YyA9IG5ldyBUYWJsZUNvbHVtbihmVmlld2VyLmdldFRhYmxlKCksIFNXVC5OT05FKTsKLQkJCXRjLnNldFRleHQoY29sdW1uUHJvcGVydGllc1tpXSk7Ci0JCQl0Yy5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQl0Yy5zZXRXaWR0aChjb2x1bW5XaWR0aHNbaV0pOwotCQl9Ci0JCWZWaWV3ZXIuc2V0Q2VsbEVkaXRvcnMoY2VsbEVkaXRvcnMpOwotCQlmVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uUHJvcGVydGllcyk7Ci0KLQkJZlZpZXdlci5nZXRUYWJsZSgpLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JCWZWaWV3ZXIuZ2V0VGFibGUoKS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0JCWZWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW5Qcm9wZXJ0aWVzKTsKLQotCQlNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKLQkJY29udGV4dE1lbnVNYW5hZ2VyLnNldFJlbW92ZUFsbFdoZW5TaG93bihmYWxzZSk7Ci0JCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlzdXBlci5ydW4oKTsKLQkJCQlzaG93U2VsZWN0aW9uRGV0YWlsKHBhcmVudCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQlyZXR1cm4gIkRldGFpbHMuLi4iOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0JCQkJcmV0dXJuICFmVmlld2VyLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJTWVudSBjb250ZXh0TWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShmVmlld2VyLmdldENvbnRyb2woKSk7Ci0JCWdldENvbnRyb2woKS5zZXRNZW51KGNvbnRleHRNZW51KTsKLQotCQlmVmlld2VyLnNldElucHV0KGZJbnB1dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCQlUYWdsaWJJbmRleC5yZW1vdmVUYWdsaWJJbmRleExpc3RlbmVyKGZJbnRlcm5hbExpc3RlbmVyKTsKLQl9Ci0KLQlDb250cm9sIGdldENvbnRyb2woKSB7Ci0JCXJldHVybiBmVmlld2VyLmdldENvbnRyb2woKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCi0JCWJvb2xlYW4gc2hvdWxkTGlzdGVuID0gbWVtZW50byAhPSBudWxsICYmIEJvb2xlYW4udmFsdWVPZihtZW1lbnRvLmdldFN0cmluZyhNRU1fTElTVEVOSU5HKSkuYm9vbGVhblZhbHVlKCk7Ci0JCWlmIChzaG91bGRMaXN0ZW4pIHsKLQkJCVRhZ2xpYkluZGV4LmFkZFRhZ2xpYkluZGV4TGlzdGVuZXIoZkludGVybmFsTGlzdGVuZXIpOwotCQkJaXNMaXN0ZW5pbmcgPSB0cnVlOwotCQl9Ci0JCWZSZXN1bWVBY3Rpb24gPSBuZXcgUmVzdW1lQWN0aW9uKCk7Ci0JCWZTdXNwZW5kQWN0aW9uID0gbmV3IFN1c3BlbmRBY3Rpb24oKTsKLQkJZkNsZWFyQWN0aW9uID0gbmV3IENsZWFyQWN0aW9uKCk7Ci0JCWZTdXNwZW5kQWN0aW9uLnNldEVuYWJsZWQoaXNMaXN0ZW5pbmcpOwotCQlmUmVzdW1lQWN0aW9uLnNldEVuYWJsZWQoIWlzTGlzdGVuaW5nKTsKLQotCQlJVG9vbEJhck1hbmFnZXIgbWdyID0gc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKTsKLQkJbWdyLmFkZChmUmVzdW1lQWN0aW9uKTsKLQkJbWdyLmFkZChmU3VzcGVuZEFjdGlvbik7Ci0JCW1nci5hZGQoZkNsZWFyQWN0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzYXZlU3RhdGUoSU1lbWVudG8gbWVtZW50bykgewotCQlzdXBlci5zYXZlU3RhdGUobWVtZW50byk7Ci0JCW1lbWVudG8ucHV0U3RyaW5nKE1FTV9MSVNURU5JTkcsIEJvb2xlYW4udG9TdHJpbmcoaXNMaXN0ZW5pbmcpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJZlZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYWU1NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXh0LklKU1BQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwudGFnaW5mby5KU1BKYXZhSmF2YWRvY0hvdmVyUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudmlld3MuY29udGVudG91dGxpbmUuSlNQQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLnByb3BlcnRpZXMuWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IganNwIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgby5nZXRDbGFzcygpLCBKU1BDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8uZ2V0Q2xhc3MoKSwgWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPQ1VNRU5UQVRJT05URVhUSE9WRVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgcHJvY2Vzc29yIGZvciAiICsgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgcHJvY2Vzc29yIGZvciAiICsgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgby5nZXRDbGFzcygpLCBKU1BKYXZhSmF2YWRvY0hvdmVyUHJvY2Vzc29yLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0MTU2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVtYWlsTm90aWNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBzZW5kTm90aWZpY2F0aW9ucyA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdEVtYWlsTm90aWNlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWFpbCgpIHsKLQkJYXNzZXJ0RmFsc2UoIlNpbXBsZSB0ZXN0IHRvIGJlIHN1cmUgZW1haWwgZ2V0cyBzZW50IG9uIGZhaWx1cmUiLCBzZW5kTm90aWZpY2F0aW9ucyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdE1vZGVsQ2xvbmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdE1vZGVsQ2xvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiM2RkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5LkpTUE1vZGVsUXVlcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLkVtYmVkZGVkSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuSFRNTE1vZGVsUXVlcnlJbXBsOwotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUZhbWlseUZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuWE1MTW9kZWxRdWVyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsQ2xvbmUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIEhhc2hNYXAgZW1iZWRkZWRNb2RlbFF1ZXJpZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbENsb25lLgotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxDbG9uZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0TW9kZWxDbG9uZSgidGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBtb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UGFyc2VyKCkgPT0gbW9kZWwuZ2V0UGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFJlUGFyc2VyKCkgPT0gbW9kZWwuZ2V0UmVQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb25lU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgTk9UIGlkZW50aWNhbCwgYnV0IHRoYXQgbmV3IGluc3RhbmNlcyAKLQkJLy8gaGF2ZSBiZWVuIG1hZGUKLQkJYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpID09IG1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRQYXJzZXIoKSA9PSBtb2RlbC5nZXRQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UmVQYXJzZXIoKSA9PSBtb2RlbC5nZXRSZVBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxKU1AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgZW1iZWRkZWQgdHlwZSBpcyBjb3JyZWN0Ci0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJjbG9uZWQgbW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gbW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFBhcnNlcigpID09IG1vZGVsLmdldFBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRSZVBhcnNlcigpID09IG1vZGVsLmdldFJlUGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG5vdGUsIHdlIGluaXRpYWx5IGV4cGVjdCBIVE1MLCBzaW5jZSB0aGVyZSBpcyBub3QgY29udGVudAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkKLQkJU3RyaW5nIHRlc3RDb250ZW50ID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC94bWxcIiAlPiI7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgdGVzdENvbnRlbnQpOwotCQotCQkvLyBtb2RpZmllZCBmb3IgZGVzaWduIGNoYW5nZSwgd2hlcmUgcmUtaW5pdCBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgCi0JCS8vIHNldCByZXR1cm5zLgotCQlhc3NlcnRUcnVlKCJtb2RlbCBzaG91bGQgbm90IG5lZWQgcmVpbml0IiwgIW1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQkKLQkJLy8JCWJ1dCBpZiBpdCBkaWQgbmVlZCByZS1pbml0LCBoZXJlJ3MgdGhlIHJpZ2h0IGNhbGxpbmcgc2VxdWVuY2UJCQotCQkvLwkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCS8vCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JCS8vCQkJbW9kZWwgPSBtb2RlbC5yZWluaXQoKTsKLQkJLy8JCQltb2RlbC5jaGFuZ2VkTW9kZWwoKTsKLQkJLy8JCX0KLQkKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIEVtYmVkZGVkWE1MLmNsYXNzKTsKLQkKLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJY2hlY2tFbWJlZGRlZFR5cGUoY2xvbmVkTW9kZWwsIEVtYmVkZGVkWE1MLmNsYXNzKTsKLQkKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgQ2xhc3MgZXhwZWN0ZWRUeXBlKSB7Ci0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRFeGlzdGluZ0FkYXB0ZXIoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgcGFnZURpcmVjdGl2ZSIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgaGFuZGxlciIsIGVtYmVkZGVkSGFuZGxlcik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVHlwZSwgZW1iZWRkZWRIYW5kbGVyLmdldENsYXNzKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCi0JCUFycmF5TGlzdCBmYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBtb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgZmFjdG9yaWVzLmNsb25lKCk7Ci0JCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlpZiAobW9kZWwuZ2V0TW9kZWxIYW5kbGVyKCkgPT0gbnVsbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBjb3JyZWN0LgotCQotCQlBcnJheUxpc3QgbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgY2xvbmVkTW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCW5ld0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIG5ld0ZhY3Rvcmllcy5jbG9uZSgpOwotCQotCQlib29sZWFuIHBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgbmV3RmFjdG9yaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKG1vZGVsLCBjbG9uZWRNb2RlbCk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQkvLyBOb3csIGFzc2lnbmluZyBzb21lIGNvbnRlbnQgc2hvdWxkbid0IGNoYW5nZSB0aGUgZmFjdG9yaWVzCi0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgdHdvRmFjdG9yaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKG1vZGVsLCBjbG9uZWRNb2RlbCk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIiKTsKLQkJQXJyYXlMaXN0IHRocmVlRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgY2xvbmVkTW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCXRocmVlRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdGhyZWVGYWN0b3JpZXMuY2xvbmUoKTsKLQkKLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCB0aHJlZUZhY3Rvcmllcyk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQkKLQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQWEhUTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCQotCQotCQotCQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIklTTy04ODU5LTFcIiA/PlxuIiArIAotCQkJCSI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOXCJcbiIgKyAKLQkJCQkiXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZFwiPlxuIiArIAotCQkJCSI8JUBwYWdlIGxhbmd1YWdlPVwiamF2YVwiIGNvbnRlbnRUeXBlPVwidGV4dC94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiXG4iICsgCi0JCQkJIiAgICAgICAgcGFnZUVuY29kaW5nPVwiSVNPLTg4NTktMVwiJT5cbiIgKyAKLQkJCQkiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iICsgCi0JCQkJIjxoZWFkPlxuIiArIAotCQkJCSI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIiAvPlxuIiArIAotCQkJCSI8c3R5bGU+XG4iICsgCi0JCQkJIkEgeyBjb2xvcjogcmVkOyB9XG4iICsgCi0JCQkJIjwvc3R5bGU+XG4iICsgCi0JCQkJIjwvaGVhZD5cbiIgKyAKLQkJCQkiPC9odG1sPlxuIiArIAotCQkJCSIiKTsKLQkKLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZEhUTUwuY2xhc3MpOwotCQkJY2hlY2tNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQljaGVja0VtYmVkZGVkTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsLmNsYXNzLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcywgSFRNTE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCQotCQkJCi0JCQkKLQkJCQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkTW9kZWxKU1BYSFRNbm9Eb2N0eXBlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkKLQkKLQkKLQkKLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJJU08tODg1OS0xXCIgPz5cbiIgKyAKLQkJCQkiPCVAcGFnZSBsYW5ndWFnZT1cImphdmFcIiBjb250ZW50VHlwZT1cInRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIlxuIiArIAotCQkJCSIgICAgICAgIHBhZ2VFbmNvZGluZz1cIklTTy04ODU5LTFcIiU+XG4iICsgCi0JCQkJIjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIiArIAotCQkJCSI8aGVhZD5cbiIgKyAKLQkJCQkiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L3htbDsgY2hhcnNldD1JU08tODg1OS0xXCIgLz5cbiIgKyAKLQkJCQkiPHN0eWxlPlxuIiArIAotCQkJCSJBIHsgY29sb3I6IHJlZDsgfVxuIiArIAotCQkJCSI8L3N0eWxlPlxuIiArIAotCQkJCSI8L2hlYWQ+XG4iICsgCi0JCQkJIjwvaHRtbD5cbiIgKyAKLQkJCQkiIik7Ci0JCi0JCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIEhUTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQWEhUTUwyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCi0KLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIklTTy04ODU5LTFcIiA/PlxuIiArIAotCQkJCQkiPCVAcGFnZSBsYW5ndWFnZT1cImphdmFcIiBjb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1JU08tODg1OS0xXCJcbiIgKyAKLQkJCQkJIiAgICAgICAgcGFnZUVuY29kaW5nPVwiSVNPLTg4NTktMVwiJT5cbiIgKyAKLQkJCQkJIjwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU5cIlxuIiArIAotCQkJCSJcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkXCI+XG4iICsgCi0JCQkJIjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIiArIAotCQkJCSI8aGVhZD5cbiIgKyAKLQkJCQkiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiIC8+XG4iICsgCi0JCQkJIjxzdHlsZT5cbiIgKyAKLQkJCQkiQSB7IGNvbG9yOiByZWQ7IH1cbiIgKyAKLQkJCQkiPC9zdHlsZT5cbiIgKyAKLQkJCQkiPC9oZWFkPlxuIiArIAotCQkJCSI8L2h0bWw+XG4iICsgCi0JCQkJIiIpOwotCi0JCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIEhUTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tNb2RlbFF1ZXJ5KElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIENsYXNzIGNsYXNzMSkgewotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0RXhpc3RpbmdBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZGlkIG5vdCBoYXZlIG1vZGVsUXVlcnlBZGFwdGVyIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgibW9kZWxRdWVyeUFkYXB0ZXIgaXMgd3JvbmcgY2xhc3MiLCBjbGFzczEuZXF1YWxzKEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzKSk7Ci0JCQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0VtYmVkZGVkTW9kZWxRdWVyeShJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBDbGFzcyBvdXRlclF1ZXJ5QWRhcHRlciwgQ2xhc3Mgb3V0ZXJRdWVyeUNsYXNzLCBDbGFzcyBlbWJlZGRlZFF1ZXJ5Q2xhc3MpIHsKLQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0RXhpc3RpbmdBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZGlkIG5vdCBoYXZlIG1vZGVsUXVlcnlBZGFwdGVyIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCi0JCUNsYXNzIGV4cGVjdGVkID0gb3V0ZXJRdWVyeUFkYXB0ZXI7Ci0JCUNsYXNzIGFjdHVhbCA9IG1vZGVsUXVlcnlBZGFwdGVyLmdldENsYXNzKCk7Ci0JCWFzc2VydEVxdWFscygiZG9jdW1lbnQncyBtb2RlbCBxdWVyeSBpcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZCwgYWN0dWFsKTsKLQkJCi0JCU1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IG1vZGVsUXVlcnlBZGFwdGVyLmdldE1vZGVsUXVlcnkoKTsKLQkJZXhwZWN0ZWQgPSBvdXRlclF1ZXJ5Q2xhc3M7Ci0JCWFjdHVhbCA9IG1vZGVsUXVlcnkuZ2V0Q2xhc3MoKTsKLQkJYXNzZXJ0RXF1YWxzKCJtb2RlbCBxdWVyeSBhZGFwdGVyJ3MgbW9kZWwgcXVlcnkgaXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JCQotCQlNb2RlbFF1ZXJ5IG5vZGVRdWVyeSA9IGdldEVtYmVkZGVkTW9kZWxRdWVyeShkb2MpOwotCQlhc3NlcnROb3ROdWxsKCJub2RlIGRvZXMgbm90IGhhdmUgYSBtb2RlbFF1ZXJ5QWRhcHRlciIsIG5vZGVRdWVyeSk7Ci0JCQotCQlleHBlY3RlZCA9IGVtYmVkZGVkUXVlcnlDbGFzczsKLQkJYWN0dWFsID0gbm9kZVF1ZXJ5LmdldENsYXNzKCk7Ci0JCWFzc2VydEVxdWFscygiZG9jdW1lbnRzIG1vZGVsIHF1ZXJ5IGlzIG5vdCBhcyBleHBlY3RlZCIsIGV4cGVjdGVkLCBhY3R1YWwpOwotCi0KLQkJCi0JfQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRW1iZWRkZWRGYWN0b3JpZXMuCi0JICogQHBhcmFtIG1vZGVsCi0JICogQHBhcmFtIGNsb25lZE1vZGVsCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBvbGRFbWJlZGRlZFR5cGUgPSBnZXRFbWJlZGRlZFR5cGUobW9kZWwpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIG5ld0VtYmVkZGVkVHlwZSA9IGdldEVtYmVkZGVkVHlwZShjbG9uZWRNb2RlbCk7Ci0JCS8vIGV4cGVjdCB0byBiZSB0aGUgc2FtZSB0eXBlCi0JCWlmICghb2xkRW1iZWRkZWRUeXBlLmdldENsYXNzKCkuZXF1YWxzKG5ld0VtYmVkZGVkVHlwZS5nZXRDbGFzcygpKSkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQlhc3NlcnRUcnVlKHJlc3VsdCk7Ci0JCX0KLQotCQlMaXN0IG9sZEZhY3RvcmllcyA9IG9sZEVtYmVkZGVkVHlwZS5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCUxpc3QgbmV3RmFjdG9yaWVzID0gbmV3RW1iZWRkZWRUeXBlLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJcmVzdWx0ID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9yRXF1aXZhbGVuY2Uob2xkRmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCi0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIEVtYmVkZGVkVHlwZUhhbmRsZXIgZ2V0RW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlyZXR1cm4gZW1iZWRkZWRIYW5kbGVyOwotCX0KLQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRmFjdG9yaWVzTGlzdC4KLQkgKiBAcGFyYW0gZmFjdG9yaWVzCi0JICogQHBhcmFtIG5ld0ZhY3RvcmllcwotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShMaXN0IGZhY3RvcmllcywgTGlzdCBuZXdGYWN0b3JpZXMpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpZiAoZmFjdG9yaWVzLnNpemUoKSAhPSBuZXdGYWN0b3JpZXMuc2l6ZSgpKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIG5uZWQgbm90IGJlIGlkZW50aWNhbCwgbm9yIHNhbWUgb3JkZXIKLQkJCS8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCS8vCQkJCWlmICghKGZhY3Rvcmllcy5nZXQoaSkgPT0gbmV3RmFjdG9yaWVzLmdldChpKSkpIHsKLQkJCS8vCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCS8vCQkJCQlicmVhazsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRmFjdG9yaWVzTGlzdEZvckVxdWl2YWxlbmNlKExpc3QgZmFjdG9yaWVzLCBMaXN0IG5ld0ZhY3RvcmllcykgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWlmIChmYWN0b3JpZXMuc2l6ZSgpICE9IG5ld0ZhY3Rvcmllcy5zaXplKCkpIHsKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWVsc2UgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCQlpZiAoIWZhY3Rvcmllcy5nZXQoaSkuZ2V0Q2xhc3MoKS5lcXVhbHMobmV3RmFjdG9yaWVzLmdldChpKS5nZXRDbGFzcygpKSkgewotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlBcnJheUxpc3QgZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCWZhY3RvcmllcyA9IChBcnJheUxpc3QpIGZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBjb3JyZWN0LgotCi0JCUFycmF5TGlzdCBuZXdGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbmV3RmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJYm9vbGVhbiBwYXNzZWQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShmYWN0b3JpZXMsIG5ld0ZhY3Rvcmllcyk7Ci0KLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgc29tZSBjb250ZW50IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGZhY3RvcmllcwotCQljbG9uZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXByaXZhdGUgTW9kZWxRdWVyeSBnZXRFbWJlZGRlZE1vZGVsUXVlcnkoTm9kZSBub2RlKSB7Ci0JCU1vZGVsUXVlcnkgZW1iZWRkZWRNb2RlbFF1ZXJ5ID0gbnVsbDsKLQotCQlpZiAobm9kZSBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpIHsgCi0JCQlOb2RlIG93bmVyTm9kZSA9IG5vZGUuZ2V0T3duZXJEb2N1bWVudCgpOwotCQkJaWYgKG93bmVyTm9kZSA9PSBudWxsKSB7Ci0JCQkJLy8gdGhlbiBtdXN0IGJlIHRoZSBkb2N1bWVudCBpdHNlbGYKLQkJCQlvd25lck5vZGUgPSBub2RlOyAKLQkJCX0KLQkJCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIG93bmVyTm9kZSkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCQlpZiAocGFnZURpcmVjdGl2ZUFkYXB0ZXIgIT0gbnVsbCkgewotCi0JCQkJU3RyaW5nIGVmZmVjdGl2ZUNvbnRlbnRUeXBlID0gbnVsbDsKLQkJCQlNb2RlbFF1ZXJ5IHBvdGVudGlhbE1vZGVsUXVlcnlPYmplY3QgPSBudWxsOwotCi0JCQkJU3RyaW5nIGZhbWlseUlkID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCkuZ2V0RmFtaWx5SWQoKTsKLQkJCQkvL2lmIChDb250ZW50VHlwZUZhbWlseUZvckhUTUwuSFRNTF9GQU1JTFkuZXF1YWxzKGZhbWlseUlkKSkgewotCQkJCWlmICgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5jb250ZW50ZmFtaWx5Lmh0bWwiLmVxdWFscyhmYW1pbHlJZCkpIHsKLQkJCQkJZWZmZWN0aXZlQ29udGVudFR5cGUgPSAidGV4dC9odG1sIjsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWVmZmVjdGl2ZUNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcG90ZW50aWFsTW9kZWxRdWVyeU9iamVjdCA9IChNb2RlbFF1ZXJ5KSBlbWJlZGRlZE1vZGVsUXVlcmllcy5nZXQoZWZmZWN0aXZlQ29udGVudFR5cGUpOwotCQkJCQotCQkJCWlmIChwb3RlbnRpYWxNb2RlbFF1ZXJ5T2JqZWN0ID09IG51bGwpIHsKLQkJCQkJTW9kZWxRdWVyeUFkYXB0ZXIgZW1iZWRkZWRBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBwYWdlRGlyZWN0aXZlQWRhcHRlci5hZGFwdCgoSU5vZGVOb3RpZmllcikgbm9kZSwgTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQkJCQlpZiAoZW1iZWRkZWRBZGFwdGVyICE9IG51bGwpIHsKLQkJCQkJCS8vIHdlIHdpbGwgY2FjaGUgb25lIG1vZGVsIHF1ZXJ5IHBlciBjb250ZW50IHR5cGUKLQkJCQkJCWVtYmVkZGVkTW9kZWxRdWVyeSA9IGVtYmVkZGVkQWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCk7Ci0JCQkJCQllbWJlZGRlZE1vZGVsUXVlcmllcy5wdXQoZWZmZWN0aXZlQ29udGVudFR5cGUsIGVtYmVkZGVkTW9kZWxRdWVyeSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWVtYmVkZGVkTW9kZWxRdWVyeSA9IHBvdGVudGlhbE1vZGVsUXVlcnlPYmplY3Q7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBlbWJlZGRlZE1vZGVsUXVlcnk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCi0JCi0JCi0JCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCUtLSBrZWVwIEpTUCBwYWdlIGNvbXBpbGVyIGZyb20gZ2VuZXJhdGluZyBjb2RlIHRoYXQgYWNjZXNzZXMgdGhlIHNlc3Npb24gLS0lPlxuIiArIAotCQkJCSI8JUAgcGFnZSBzZXNzaW9uPVwiZmFsc2VcIiAgY29udGVudFR5cGU9XCJ0ZXh0L3htbDsgY2hhcnNldD1JU08tODg1OS0xXCIgJT5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIjwhLS0gbG9hZCBXUFMgcG9ydGxldCB0YWcgbGlicmFyeSBhbmQgaW5pdGlhbGl6ZSBvYmplY3RzIC0tPlxuIiArIAotCQkJCSI8JUAgdGFnbGliIHVyaT1cIi9XRUItSU5GL3RsZC9wb3J0bGV0LnRsZFwiIHByZWZpeD1cInBvcnRsZXRBUElcIiAlPlxuIiArIAotCQkJCSI8cG9ydGxldEFQSTppbml0IC8+IFxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPCUtLSBSZXBsYWNlIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgc3BlY2lmaWVkIGJ5IHRoZSBsYXlvdXROYW1lIGF0dHJpYnV0ZSBvZiB0aGUgY2FudmFzIGVsZW1lbnQgYmVsb3cgd2l0aCB0aGUgbGF5b3V0IG5hbWUgZm9yIHlvdXIgcG9ydGxldC4gLS0lPlxuIiArIAotCQkJCSI8Y2FudmFzIHhtbG5zID1cImh0dHA6Ly93d3cudm9sYW50aXMuY29tL3htbG5zL21hcmxpbi1jZG1cIiBcbiIgKyAKLQkJCQkiICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiIFxuIiArIAotCQkJCSIgICAgICAgIGxheW91dE5hbWU9XCIvc2FtcGxlX2xheW91dC5tbHl0XCIgXG4iICsgCi0JCQkJIiAgICAgICAgdHlwZT1cInBvcnRsZXRcIiA+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPCUtLSBTcGVjaWZ5IHRoZSBwYW5lIG5hbWUgZnJvbSB5b3VyIGxheW91dCBwb2xpY3kgYXMgdGhlIHZhbHVlIGZvciB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIHBhbmUgZWxlbWVudCBiZWxvdyAgLS0lPlxuIiArIAotCQkJCSI8cGFuZSBuYW1lPVwic2FtcGxlX3BhbmVcIj5cbiIgKyAKLQkJCQkiICAgIDxwPkhlbGxvITwvcD5cbiIgKyAKLQkJCQkiICAgIDxwPlRoaXMgaXMgYW4gWERJTUUgPGI+dmlldyBtb2RlPC9iPiBwYWdlIC4gWW91IGhhdmUgdG8gZWRpdCB0aGlzIHBhZ2UgdG8gY3VzdG9taXplIGl0IGZvciB5b3VyIG93biB1c2UuPGJyLz48YnIvPlxuIiArIAotCQkJCSIgICAgVGhlIHNvdXJjZSBmaWxlIGZvciB0aGlzIHBhZ2UgaXMgXCIvV2ViIENvbnRlbnQvdGVzdHBvcnRsZXRfbGVnYWN5L2pzcC94ZGltZS9UZW1wbGF0ZUxlZ2FjeVBvcnRsZXRWaWV3LmpzcFwiLlxuIiArIAotCQkJCSI8L3A+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSI8YnIvPlxuIiArIAotCQkJCSJUaGlzIGlzIGltYWdlIDEgICAgXG4iICsgCi0JCQkJIjxpbWcgc3JjPVwiL3Bhdy5taW1nXCIgYWx0PVwibm9pbWdcIiAvPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPGJyLz5cbiIgKyAKLQkJCQkiVGhpcyBpcyBpbWFnZSAyICAgIFxuIiArIAotCQkJCSI8aW1nIHNyYz1cInBhdy5taW1nXCIgYWx0PVwibm9pbWdcIiAvPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPC9wYW5lPlxuIiArIAotCQkJCSI8L2NhbnZhcz4iKTsKLQkKLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZFhNTC5jbGFzcyk7Ci0JCQljaGVja01vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCWNoZWNrRW1iZWRkZWRNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5QWRhcHRlckltcGwuY2xhc3MsIEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzLCBYTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQV01MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkKLQkKLQkKLQkKLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvdm5kLndhcC53bWxcIiAlPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiICA8anNwOnVzZUJlYW4gaWQ9XCJiZWFuSW5zdGFuY2VOYW1lXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCJwYWNrYWdlLmNsYXNzXCIgLz5cbiIgKyAKLQkJCQkiICA8anNwOmdldFByb3BlcnR5IG5hbWU9XCJiZWFuSW5zdGFuY2VOYW1lXCIgcHJvcGVydHk9XCIqXCIgLz5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+XG4iICsgCi0JCQkJIiAgPCFET0NUWVBFIHdtbCBQVUJMSUMgXCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOXCIgXCJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMTMuZHRkXCI+XG4iICsgCi0JCQkJIiAgPHdtbD5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgICA8dGVtcGxhdGU+XG4iICsgCi0JCQkJIiAgICAgIDwhLS0gVGVtcGxhdGUgaW1wbGVtZW50YXRpb24gaGVyZS4gLS0+XG4iICsgCi0JCQkJIiAgICAgIDxkbyB0eXBlPVwicHJldlwiPjxwcmV2Lz48L2RvPlxuIiArIAotCQkJCSIgICAgPC90ZW1wbGF0ZT5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgPCVcbiIgKyAKLQkJCQkiICBpZiAoc2Vzc2lvbi5pc05ldygpIHx8IHNlc3Npb24uZ2V0QXR0cmlidXRlKFwidXNlcmlkXCIpPT1udWxsICkge1xuIiArIAotCQkJCSIgICU+XG4iICsgCi0JCQkJIiAgICA8Y2FyZCBpZD1cImNhcmQxXCIgdGl0bGU9XCJDYXJkICMxXCI+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSIgICAgICA8ZG8gdHlwZT1cInVua25vd25cIiBsYWJlbD1cIk5leHRcIj5cbiIgKyAKLQkJCQkiICAgICAgICA8Z28gaHJlZj1cIiNjYXJkMlwiLz5cbiIgKyAKLQkJCQkiICAgICAgPC9kbz5cbiIgKyAKLQkJCQkiICAgICAgPHAgYWxpZ249XCJjZW50ZXJcIj5cbiIgKyAKLQkJCQkiICAgICAgICA8YmlnPjxiPkZpcnN0IENhcmQ8L2I+PC9iaWc+XG4iICsgCi0JCQkJIiAgICAgIDwvcD5cbiIgKyAKLQkJCQkiICAgIDwvY2FyZD5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgPCVcbiIgKyAKLQkJCQkiICB9IGVsc2Uge1xuIiArIAotCQkJCSIgICU+XG4iICsgCi0JCQkJIiAgICA8Y2FyZCBpZD1cImNhcmQyXCIgdGl0bGU9XCJDYXJkICMyXCI+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSIgICAgICA8cCBhbGlnbj1cImNlbnRlclwiPlxuIiArIAotCQkJCSIgICAgICAgIDxiaWc+PGI+IDwlPSBiZWFuSW5zdGFuY2VOYW1lLmdldFVzZXJpZCgpICU+IDwvYj48L2JpZz5cbiIgKyAKLQkJCQkiICAgICAgPC9wPlxuIiArIAotCQkJCSIgICAgPC9jYXJkPlxuIiArIAotCQkJCSIgIDwlXG4iICsgCi0JCQkJIiAgfVxuIiArIAotCQkJCSIgICU+XG4iICsgCi0JCQkJIiAgPC93bWw+Iik7Ci0JCi0JCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIEhUTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkZmFiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKiAKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKLSAqIHR5cGUgY29tbWVudHMgZ28gdG8gV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXN0TW9kZWxDbG9uZS4KLQkgKi8KLQlwdWJsaWMgVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IGdldFRlc3QoKSB7Ci0JCXJldHVybiBuZXcgVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZSgidGVzdFN0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQQ2hhbmdlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCwgT2JqZWN0IGV4cGVjdGVkVHlwZSkgewotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgY2xvbmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIGVtYmVkZGVkVHlwZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY2xvbmVkIG1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgZW1iZWRkZWRUeXBlQWRhcHRlcik7Ci0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSBlbWJlZGRlZFR5cGVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJjbG9uZWQgbW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBlbWJlZGRlZEhhbmRsZXIgaXMgd3JvbmcgdHlwZSIsIGVtYmVkZGVkSGFuZGxlci5lcXVhbHMoZXhwZWN0ZWRUeXBlKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWRNb2RlbEVtYmVkZGVkWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBYTUwgc2hvdWxkIE5PVCBoYXZlIGFuIGVtYmVkZGVkIHR5cGUKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IChFbWJlZGRlZFR5cGVIYW5kbGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihFbWJlZGRlZFR5cGVIYW5kbGVyLmNsYXNzKTsKLQkJYXNzZXJ0VHJ1ZSgiZW1iZWRlZEhhbmxkZXIgc2hvdWxkIGJlIG51bGwgZm9yIFhNTCIsIGVtYmVkZGVkSGFuZGxlciA9PSBudWxsKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEhUTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gc2hvdWxkIE5PVCBoYXZlIGFuIGVtYmVkZGVkIHR5cGUKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IChFbWJlZGRlZFR5cGVIYW5kbGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihFbWJlZGRlZFR5cGVIYW5kbGVyLmNsYXNzKTsKLQkJYXNzZXJ0VHJ1ZSgiZW1iZWRlZEhhbmxkZXIgc2hvdWxkIGJlIG51bGwgZm9yIEhUTUwiLCBlbWJlZGRlZEhhbmRsZXIgPT0gbnVsbCk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBkb1N0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBzaG91bGQgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgZW1iZWRkZWRIYW5kbGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBOT1QgYmUgbnVsbCBmb3IgSlNQIiwgZW1iZWRkZWRIYW5kbGVyICE9IG51bGwpOwotCi0JCS8vIGVtYmVkZGVkIHR5cGUgc2hvdWxkIGJlIEhUTUwgc2luY2Ugbm8gY29udGVudAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgTW9kZWxIYW5kbGVyVXRpbGl0eS5nZXREZWZhdWx0RW1iZWRkZWRUeXBlKCkpOwotCi0JCVN0cmluZyB0ZXN0Q29udGVudCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiICU+IjsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgMCwgMCwgdGVzdENvbnRlbnQpOwotCQlhc3NlcnRUcnVlKCJyZWluaXQgc2hvdWxkIE5PVCBiZSBuZWVkZWQgaW4gdGhpcyBjYXNlIiwgIW1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQotCQkvLyBlbWJlZGRlZCB0eXBlIHNob3VsZCBTVElMTCBiZSBIVE1MIHNpbmNlIG5vIGNvbnRlbnRUeXBlIHdhcwotCQkvLyB0ZXh0L2h0bWwKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RGVmYXVsdEVtYmVkZGVkVHlwZSgpKTsKLQotCQlyZXR1cm4gbW9kZWw7Ci0JCS8vCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9TdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUENoYW5nZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJLy8gc3RhcnQgd2l0aCB0aGUgZnVsbCB0ZXN0IGNhc2UKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGRvU3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1AoKTsKLQkJLy8gY2hhbmdlICJodG1sIiB0byAieG1sIgotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCAyNywgNCwgInhtbCIpOwotCQkvLyB3aXRoIHJlaW5pdCBpbiBYTUwgbW9kZWwgLi4uIGl0cyBhbHJlYWR5IGJlZW4gcmUtaW5pdGlhbGl6ZWQKLQkJLy8gYXNzZXJ0VHJ1ZSgicmVpbml0IFNIT1VMRCBiZSBuZWVkZWQgaW4gdGhpcyBjYXNlIiwKLQkJLy8gbW9kZWwuaXNSZWluaWl0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQotCQlpZiAobW9kZWwuaXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkpIHsKLQkJCW1vZGVsLnJlaW5pdCgpOwotCQl9Ci0KLQkJLy8gZW1iZWRkZWQgdHlwZSBzaG91bGQgbm93IGJlIFhNTAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgTW9kZWxIYW5kbGVyVXRpbGl0eS5nZXRFbWJlZGRlZENvbnRlbnRUeXBlRm9yKCJ0ZXh0L3htbCIpKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvYnJlYWtwb2ludHByb3ZpZGVycy9CcmVha3BvaW50UHJvdmlkZXJzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9icmVha3BvaW50cHJvdmlkZXJzL0JyZWFrcG9pbnRQcm92aWRlcnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZDMxYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9icmVha3BvaW50cHJvdmlkZXJzL0JyZWFrcG9pbnRQcm92aWRlcnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5icmVha3BvaW50cHJvdmlkZXJzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5icmVha3BvaW50cHJvdmlkZXJzLkNsYXNzUGF0dGVyblJlZ2lzdHJ5OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgQnJlYWtwb2ludFByb3ZpZGVyc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBUZXN0cyB0aGUgY2FzZSBvZiBhIHNpbmdsZSBwcm92aWRlciBvZiBhZGRpdGlvbmFsIGNsYXNzIHBhdHRlcm5zCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEFkZGl0aW9uYWxQcm92aWRlcnMoKSB7Ci0JCS8vIFRlc3QKLQkJZmluYWwgU3RyaW5nIHBhdHRlcm4gPSBDbGFzc1BhdHRlcm5SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldENsYXNzUGF0dGVybigib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy50eXBlIik7Ci0JCWFzc2VydE5vdE51bGwoIkNsYXNzIHBhdHRlcm4gZm9yICd0eXBlJyBzaG91bGRuJ3QgYmUgbnVsbCIsIHBhdHRlcm4pOwotCQlhc3NlcnRFcXVhbHMoIkNsYXNzIHBhdHRlcm5zIGFyZSBub3QgZXF1YWwiLCAiKmZvbywqYmFyIiwgcGF0dGVybik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgdGhlIGNhc2Ugb2Ygbm8gcHJvdmlkZXIgZm9yIGEgY29udGVudCB0eXBlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vQWRkaXRpb25hbFByb3ZpZGVycygpIHsKLQkJZmluYWwgU3RyaW5nIHBhdHRlcm4gPSBDbGFzc1BhdHRlcm5SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldENsYXNzUGF0dGVybigib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5ub3R5cGUiKTsKLQkJYXNzZXJ0TnVsbCgiVGhlcmUgc2hvdWxkIGJlIG5vIHByb3ZpZGVycyBmb3IgJ25vdHlwZSciLCBwYXR0ZXJuKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyB0aGUgY2FzZSBvZiBtdWx0aXBsZSBwcm92aWRlcnMgZm9yIGEgY29udGVudCB0eXBlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE11bHRpcGxlUHJvdmlkZXJzKCkgewotCQlmaW5hbCBTdHJpbmcgcGF0dGVybiA9IENsYXNzUGF0dGVyblJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0Q2xhc3NQYXR0ZXJuKCJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm11bHRpdHlwZSIpOwotCQlhc3NlcnROb3ROdWxsKCJDbGFzcyBwYXR0ZXJuIGZvciAndHlwZScgc2hvdWxkbid0IGJlIG51bGwiLCBwYXR0ZXJuKTsKLQkJYXNzZXJ0RXF1YWxzKCJDbGFzcyBwYXR0ZXJucyBhcmUgbm90IGVxdWFsIiwgIipmb28sKmJhciwqYmF6IiwgcGF0dGVybik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9CZWFuSW5mb1Byb3ZpZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MzYwOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JT3BlbmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFyZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSUphdmFQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgQmVhbkluZm9Qcm92aWRlci4gQ3VycmVudGx5IHRlc3Qgd29ya3NwYWNlIE1VU1QgcG9pbnQKLSAqIHRvIHRoZSBzcGVjaWZpYyBvbmUgZm9yIHRoaXMgdGVzdC4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEJlYW5JbmZvUHJvdmlkZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCWNsYXNzIE92ZXJ3cml0ZU5vbmUgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gSU92ZXJ3cml0ZVF1ZXJ5LkFMTDsKLQkJfQotCX0KLQotCXByaXZhdGUgSVJlc291cmNlIGZSZXNvdXJjZTsKLQlwcml2YXRlIEJlYW5JbmZvUHJvdmlkZXIgZlByb3ZpZGVyOwotCXByaXZhdGUgSGFzaFNldCBmQWxyZWFkeU9wZW4gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIEJlYW5JbmZvUHJvdmlkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5mSXNTZXR1cCkgewotCQkJaW5pdGlhbGl6ZVJlc291cmNlKCk7Ci0JCQl0aGlzLmZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCS8vIHBsYXRmb3JtIGxvY2F0aW9uIG1heSBiZSBudWxsIC0tIGRlcGVuZHMgb24gIm1vZGUiIG9mIHBsYXRmb3JtCi0JCWlmIChwbGF0Zm9ybUxvY2F0aW9uICE9IG51bGwpIHsKLQkJCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImJlYW5pbmZvX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgiQkVBTklORk8iKTsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJU3RyaW5nIHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24gPSAiL0JFQU5JTkZPL0JFQU5fVEVTVFMvYmVhbkluZm9fdGVzdC5qc3AiOwotCQkJZlJlc291cmNlID0gcm9vdC5nZXRGaWxlKG5ldyBQYXRoKHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24pKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShmUmVzb3VyY2UuZ2V0UHJvamVjdCgpKTsKLQkJCW9wZW5QYXRoKGphdmFQcm9qKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBGaWxlIGdldFNvdXJjZURpcmVjdG9yeShTdHJpbmcgYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKSB7Ci0JCUZpbGUgc291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKTsKLQkJaWYgKCFzb3VyY2VEaXJlY3RvcnkuZXhpc3RzKCkgfHwgIXNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gc291cmNlRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgdm9pZCBvcGVuUGF0aChJSmF2YVByb2plY3QgamF2YVByb2opIHsKLQkJdHJ5IHsKLQkJCWlmIChqYXZhUHJvai5leGlzdHMoKSAmJiAhamF2YVByb2ouaXNPcGVuKCkpIHsKLQkJCQlqYXZhUHJvai5vcGVuKG51bGwpOwotCQkJfQotCQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGphdmFQcm9qLmdldFBhY2thZ2VGcmFnbWVudFJvb3QoZlJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQlpZiAoIXJvb3QuaXNPcGVuKCkpCi0JCQkJcm9vdC5vcGVuKG51bGwpOwotCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJCRUFOX1RFU1RTIik7Ci0JCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZSIpOwotCQkJaWYgKGZyYWcgIT0gbnVsbCAmJiAhZnJhZy5pc09wZW4oKSkKLQkJCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnLmVjbGlwc2UuanN0Iik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUGFja2FnZUZyYWdtZW50IGdldFBhY2thZ2VGcmFnbWVudChJUGFja2FnZUZyYWdtZW50Um9vdCByb290LCBTdHJpbmcgZnJhZ21lbnROYW1lKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gbnVsbDsKLQkJSUphdmFFbGVtZW50W10gY2hpbGRyZW4gPSByb290LmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhmcmFnbWVudE5hbWUpKSB7Ci0JCQkJZnJhZyA9IChJUGFja2FnZUZyYWdtZW50KSBjaGlsZHJlbltpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZnJhZzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkFsbChJSmF2YUVsZW1lbnQgamF2YUVsZW0pIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlpZiAoamF2YUVsZW0gaW5zdGFuY2VvZiBJT3BlbmFibGUpIHsKLQkJCWlmICghKChJT3BlbmFibGUpIGphdmFFbGVtKS5pc09wZW4oKSkKLQkJCQkoKElPcGVuYWJsZSkgamF2YUVsZW0pLm9wZW4obnVsbCk7Ci0JCX0KLQkJaWYgKGphdmFFbGVtIGluc3RhbmNlb2YgSVBhcmVudCAmJiAoKElQYXJlbnQpIGphdmFFbGVtKS5oYXNDaGlsZHJlbigpKSB7Ci0JCQlJSmF2YUVsZW1lbnRbXSBjaGlsZHJlbiA9ICgoSVBhcmVudCkgamF2YUVsZW0pLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCFmQWxyZWFkeU9wZW4uY29udGFpbnMoY2hpbGRyZW5baV0uZ2V0RWxlbWVudE5hbWUoKSkpIHsKLQkJCQkJZkFscmVhZHlPcGVuLmFkZChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpKTsKLQkJCQkJb3BlbkFsbChjaGlsZHJlbltpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKLQkJYmVhbk9uQ2xhc3NwYXRoKCk7Ci0JCWJlYW5JblByb2plY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYmVhbk9uQ2xhc3NwYXRoKCkgewotCQkvLyBwYV9UT0RPIGRvbid0IHVzZSBKQnV0dG9uLCBwcm9wZXJ0aWVzIGNoYW5nZQotCQkvLyB1c2Ugc29tZXRoaW5nIG1vcmUgc3RhdGljCi0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgImphdmF4LnN3aW5nLkpCdXR0b24iKTsKLQkJLy8JCWFzc2VydEVxdWFscygiTnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIEpCdXR0b246IiwgMTIyLCBkZXNjcmlwdG9ycy5sZW5ndGgpOwotCQlhc3NlcnROb3ROdWxsKCJkZXNjcmlwdG9ycyBzaG91bGRuJ3QgYmUgbnVsbCIsIGRlc2NyaXB0b3JzKTsKLQotCQkvLwkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBzZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBib3RoID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJLy8JCWZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspIHsKLQkJLy8JCQlqcGQgPSBkZXNjcmlwdG9yc1tpXTsKLQkJLy8JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkvLwkJCQlib3RoLmFkZChqcGQpOwotCQkvLwkJCWVsc2UgaWYgKGpwZC5nZXRSZWFkYWJsZSgpICYmICFqcGQuZ2V0V3JpdGVhYmxlKCkpCi0JCS8vCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCS8vCQkJZWxzZQotCQkvLwkJCQlzZXRPbmx5LmFkZChqcGQpOwotCQkvLwkJfQotCQkvLwkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgZ2V0T25seSBwcm9wZXJ0aWVzOiIsIDYyLCBnZXRPbmx5LnNpemUoKSk7Ci0JCS8vYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2Ygc2V0T25seSBwcm9wZXJ0aWVzOiIsIDAsIHNldE9ubHkuc2l6ZSgpKTsKLQkJLy9hc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDU5LAotCQkvLyBib3RoLnNpemUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJlYW5JblByb2plY3QoKSB7Ci0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW4iKTsKLQkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgcHJvcGVydGllcyBmb3IgQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW46IiwgNCwgZGVzY3JpcHRvcnMubGVuZ3RoKTsKLQkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQlMaXN0IHNldE9ubHkgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUxpc3QgYm90aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykgewotCQkJanBkID0gZGVzY3JpcHRvcnNbaV07Ci0JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWJvdGguYWRkKGpwZCk7Ci0JCQllbHNlIGlmIChqcGQuZ2V0UmVhZGFibGUoKSAmJiAhanBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCQllbHNlCi0JCQkJc2V0T25seS5hZGQoanBkKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgZ2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBzZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgc2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDIsIGJvdGguc2l6ZSgpKTsKLQkJLy8gZ2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBnZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIGdldCBvbmx5IHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBnZXQgb25seSBwcm9wZXJ0eToiLCBmYWxzZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBnZXQgb25seSBwcm9wZXJ0eSIsICJudW1DZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3IgZ2V0IG9ubHkgcHJvcGVydHkiLCAiaW50IiwganBkLmdldERlY2xhcmVkVHlwZSgpKTsKLQkJLy8gc2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBzZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIHNldCBvbmx5IHByb3BlcnR5OiAiLCBmYWxzZSwganBkLmdldFJlYWRhYmxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImdldCB3cml0YWJsZSBmb3Igc2V0IG9ubHkgcHJvcGVydHk6IiwgdHJ1ZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBzZXQgb25seSBwcm9wZXJ0eSIsICJjZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3Igc2V0IG9ubHkgcHJvcGVydHkiLCAiU3RyaW5nW10iLCBqcGQuZ2V0RGVjbGFyZWRUeXBlKCkpOwotCQkvLyBib3RoCi0JCWpwZCA9IChJSmF2YVByb3BlcnR5RGVzY3JpcHRvcikgYm90aC5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHJlYWRhYmxlIGZvciBib3RoIHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBib3RoIHByb3BlcnR5OiIsIHRydWUsIGpwZC5nZXRXcml0ZWFibGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBCZWFuSW5mb1Byb3ZpZGVyIGdldFByb3ZpZGVyKCkgewotCQlpZiAoZlByb3ZpZGVyID09IG51bGwpCi0JCQlmUHJvdmlkZXIgPSBuZXcgQmVhbkluZm9Qcm92aWRlcigpOwotCQlyZXR1cm4gZlByb3ZpZGVyOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BFTENvbnRlbnRBc3Npc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQRUxDb250ZW50QXNzaXN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzVkNjZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BFTENvbnRlbnRBc3Npc3RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5KU1BFTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci0KLXB1YmxpYyBjbGFzcyBKU1BFTENvbnRlbnRBc3Npc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQlwcml2YXRlIFN0cmluZyBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSU50ZXJhY3RpdmVQcm9wVmFsdWUgPSBudWxsOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJ0ZXN0SlNQRUxDb250ZW50QXNzaXN0IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF9ESVIgPSAiV2ViQ29udGVudCI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUlVDVFVSRURfRURJVE9SX1RZUEUgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0IjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV8wX1BBVEggPSBDT05URU5UX0RJUiArIElQYXRoLlNFUEFSQVRPUiArICJUZXN0MC5qc3AiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFXzFfUEFUSCA9IENPTlRFTlRfRElSICsgSVBhdGguU0VQQVJBVE9SICsgIlRlc3QxLmpzcCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfMl9QQVRIID0gQ09OVEVOVF9ESVIgKyBJUGF0aC5TRVBBUkFUT1IgKyAiVGVzdDIuanNwIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBURVNUXzBfRVhQRUNURURfUFJPUFMgPSB7Ci0JCSJlcnJvckRhdGEiLCAiZXhjZXB0aW9uIiwgImV4cHJlc3Npb25FdmFsdWF0b3IiLCAib3V0IiwgInBhZ2UiLCAicmVxdWVzdCIsICJyZXNwb25zZSIsCi0JCSJzZXJ2bGV0Q29uZmlnIiwgInNlcnZsZXRDb250ZXh0IiwgInNlc3Npb24iLCAidmFyaWFibGVSZXNvbHZlciJ9OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFRFU1RfMV9FWFBFQ1RFRF9QUk9QUyA9IHsicmVxdWVzdCIsICJyZXNwb25zZSJ9OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFRFU1RfMl9FWFBFQ1RFRF9QUk9QUyA9IHsicmVxdWVzdCJ9OwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVNUXzBfRE9DX0xPQyA9IDM3MTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF8xX0RPQ19MT0MgPSAzNzI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFU1RfMl9ET0NfTE9DID0gMzc0OwotCQotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQlwcml2YXRlIElXb3JrYmVuY2hQYWdlIHBhZ2U7Ci0JCi0JcHVibGljIEpTUEVMQ29udGVudEFzc2lzdFRlc3QoKSB7Ci0JCXN1cGVyKCJKU1AgRUwgQ29udGVudCBBc3Npc3QgVGVzdHMiKTsKLQl9Ci0JCi0JcHVibGljIEpTUEVMQ29udGVudEFzc2lzdFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qKgotCSAqIERvIHNldCB1cCwgaWdub3JlIGFsbCBwb3AgdXBzIGR1cmluZyB0ZXN0Ci0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaW5pdGlhbGl6ZVJlc291cmNlKCk7Ci0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkKLQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpIHsKLQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JTnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQl9IGVsc2UgewotCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbklOdGVyYWN0aXZlUHJvcFZhbHVlID0gImZhbHNlIjsKLQkJfQotCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbklOdGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JTnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCX0KLQkJCi0JCXRyeSB7Ci0JCQl0aGlzLnByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSApIHsKLQkJCS8vaWdub3JlLCB0aGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSB0ZXN0LCBqdXN0IHVzZWZ1bCBjbGVhbnVwCi0JCX0KLQl9Ci0JCi0JLyoqCi0JICogU2V0IHVwIHRoZSBwcm9qZWN0IGFuZCB3b3JrYmVuY2gKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQkJLy8gcGxhdGZvcm0gbG9jYXRpb24gbWF5IGJlIG51bGwgLS0gZGVwZW5kcyBvbiAibW9kZSIgb2YgcGxhdGZvcm0KLQkJaWYgKHBsYXRmb3JtTG9jYXRpb24gIT0gbnVsbCkgewotCQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoCi0JCQkJUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLAotCQkJCVRFU1RfUFJPSkVDVF9OQU1FICsgUHJvamVjdFVuemlwVXRpbGl0eS5aSVBfRVhURU5TSU9OLAotCQkJCVByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlJV29ya3NwYWNlUm9vdCByb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCXRoaXMucHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQkKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCXRoaXMucGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVMUHJvcG9zYWxzXzAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCQotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMgPSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKEZJTEVfMF9QQVRILCBURVNUXzBfRE9DX0xPQyk7Ci0JCXZlcmlmeVByb3Bvc2Fscyhwcm9wcywgVEVTVF8wX0VYUEVDVEVEX1BST1BTKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVMUHJvcG9zYWxzXzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCQotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMgPSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKEZJTEVfMV9QQVRILCBURVNUXzFfRE9DX0xPQyk7Ci0JCXZlcmlmeVByb3Bvc2Fscyhwcm9wcywgVEVTVF8xX0VYUEVDVEVEX1BST1BTKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVMUHJvcG9zYWxzXzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCQotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMgPSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKEZJTEVfMl9QQVRILCBURVNUXzJfRE9DX0xPQyk7Ci0JCXZlcmlmeVByb3Bvc2Fscyhwcm9wcywgVEVTVF8yX0VYUEVDVEVEX1BST1BTKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVMQ2hvc2VuUHJvcG9zYWxDb21wbGV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKEZJTEVfMV9QQVRIKTsKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3BzID0gZ2V0Q29tcGxldGlvblByb3Bvc2FscyhmaWxlLCBURVNUXzFfRE9DX0xPQyk7Ci0JCXZlcmlmeVByb3Bvc2Fscyhwcm9wcywgVEVTVF8xX0VYUEVDVEVEX1BST1BTKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IGdldEVkaXRvcihmaWxlKTsKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCXByb3BzWzBdLmFwcGx5KGRvY3VtZW50KTsKLQkJCi0JCVN0cmluZyBpbnNlcnRlZCA9IGRvY3VtZW50LmdldChURVNUXzFfRE9DX0xPQy0xLCBURVNUXzFfRVhQRUNURURfUFJPUFNbMF0ubGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIGNvbXBsZXRlZCBwcm9wb3NhbCAiICsgaW5zZXJ0ZWQgKyAiIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBjb21wbGV0aW9uICIgKyBURVNUXzFfRVhQRUNURURfUFJPUFNbMF0sCi0JCQlURVNUXzFfRVhQRUNURURfUFJPUFNbMF0sIGluc2VydGVkKTsKLQkJCi0JCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIEdldCBhIGZpbGUgY29udGFpbmVkIGluIHRoZSBwcm9qZWN0Ci0JICogCi0JICogQHBhcmFtIGZpbGVQYXRoCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgcmV0RmlsZSA9IHRoaXMucHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJCi0JCWFzc2VydFRydWUocmV0RmlsZSArICIgdGVzdGluZyBmaWxlIGRvZXMgbm90IGV4aXN0LiIsIHJldEZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIHJldEZpbGU7Ci0JfQotCQotCS8qKgotCSAqIHVzZSBhIHZpZXdlciBhbmQgZG9jdW1lbnQgbG9jYXRpb24gdG8gZ2VuZXJhdGUgY29tcGxldGlvbiBwcm9wb3NhbHMgZm9yIHRoYXQgbG9jYXRpb24gaW4gdGhlIHZpZXdlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlUGF0aAotCSAqIEBwYXJhbSBkb2N1bWVudExvY2F0aW9uCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElDb21wbGV0aW9uUHJvcG9zYWxbXSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKFN0cmluZyBmaWxlUGF0aCwgaW50IGRvY3VtZW50TG9jYXRpb24pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKGZpbGVQYXRoKTsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlyZXR1cm4gZ2V0Q29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIGRvY3VtZW50TG9jYXRpb24pOwotCX0KLQkKLQkKLQkvKioKLQkgKiB1c2UgYSB2aWV3ZXIgYW5kIGRvY3VtZW50IGxvY2F0aW9uIHRvIGdlbmVyYXRlIGNvbXBsZXRpb24gcHJvcG9zYWxzIGZvciB0aGF0IGxvY2F0aW9uIGluIHRoZSB2aWV3ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZQotCSAqIEBwYXJhbSBkb2N1bWVudExvY2F0aW9uCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElDb21wbGV0aW9uUHJvcG9zYWxbXSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKElGaWxlIGZpbGUsIGludCBkb2N1bWVudExvY2F0aW9uKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCXJldHVybiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKHZpZXdlciwgZG9jdW1lbnRMb2NhdGlvbik7Ci0JfQotCQotCS8qKgotCSAqIHVzZSBhIHZpZXdlciBhbmQgZG9jdW1lbnQgbG9jYXRpb24gdG8gZ2VuZXJhdGUgY29tcGxldGlvbiBwcm9wb3NhbHMgZm9yIHRoYXQgbG9jYXRpb24gaW4gdGhlIHZpZXdlcgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiBAcGFyYW0gZG9jdW1lbnRMb2NhdGlvbgotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBJQ29tcGxldGlvblByb3Bvc2FsW10gZ2V0Q29tcGxldGlvblByb3Bvc2FscyhTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIGludCBkb2N1bWVudExvY2F0aW9uKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlKU1BFTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IEpTUEVMQ29udGVudEFzc2lzdFByb2Nlc3NvcigpOwotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMgPSBwcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHModmlld2VyLCBkb2N1bWVudExvY2F0aW9uKTsKLQkJCi0JCXJldHVybiBwcm9wczsKLQl9Ci0JCi0JLyoqCi0JICogR2l2ZW4gYSBmaWxlIHJldHVybnMgYSB2aWV3ZXIgZm9yIHRoYXQgZmlsZQotCSAqIAotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGdldEVkaXRvcihJRmlsZSBmaWxlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpOwotCQlJRWRpdG9yUGFydCBwYXJ0ID0gdGhpcy5wYWdlLm9wZW5FZGl0b3IoaW5wdXQsIFNUUlVDVFVSRURfRURJVE9SX1RZUEUsIHRydWUpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcik7Ci0JCQotCQlyZXR1cm4gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0OwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBnZW5lcmF0ZWQgcHJvcG9zYWxzIGJlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIGVweHRlZCBwcm9wb3NhbHMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgZ2VuZXJhdGVkIG9uZXMKLQkgKiBAcGFyYW0gcHJvcHMKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQcm9wcwotCSAqLwotCXByaXZhdGUgdm9pZCB2ZXJpZnlQcm9wb3NhbHMoSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3BzLCBTdHJpbmdbXSBleHBlY3RlZFByb3BzKSB7Ci0JCWZvcihpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFByb3BzLmxlbmd0aDsgKytpKSB7Ci0JCQlhc3NlcnRUcnVlKCJUaGUgZXhwZWN0ZWQgcHJvcG9zYWwgXCIiICsgZXhwZWN0ZWRQcm9wc1tpXSArICJcIiB3YXMgbm90IGdpdmVuIiwKLQkJCQlmaW5kUHJvcHNvYWwocHJvcHMsIGV4cGVjdGVkUHJvcHNbaV0pKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhbiBleHBlY3RlZCBwcm9wb3NhbCBzdHJpbmcgY2hlY2sgdG8gYmUgc3VyZSBpdCBleGlzdHMgaW4gdGhlIGdpdmVuIHByb3Bvc2FscwotCSAqIAotCSAqIEBwYXJhbSBwcm9wcwotCSAqIEBwYXJhbSBleHBlY3RlZFByb3AKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGZpbmRQcm9wc29hbChJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMsIFN0cmluZyBleHBlY3RlZFByb3ApIHsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQkKLQkJZm9yKGludCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aCAmJiAhZm91bmQ7ICsraSkgewotCQkJZm91bmQgPSBwcm9wc1tpXS5nZXREaXNwbGF5U3RyaW5nKCkuc3RhcnRzV2l0aChleHBlY3RlZFByb3ApOwotCQl9Ci0JCQotCQlyZXR1cm4gZm91bmQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUEphdmFUcmFuc2xhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUEphdmFUcmFuc2xhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODcyYTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BKYXZhVHJhbnNsYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHRlc3RzIHRoZSBzZWQgSlNQSmF2YVRyYW5zbGF0b3IgY2xhc3MKLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEpTUEphdmFUcmFuc2xhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFsbEZpbGVzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gdGhpcyB0ZXN0IGlzIGZvciBQTVI6IDkxOTMwIENNVkM6MjE4NDY5Ci0JCXRlc3RKU1BJbkphdmFzY3JpcHQoInRlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwIik7Ci0JfQotCi0Jdm9pZCB0ZXN0SlNQSW5KYXZhc2NyaXB0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzbSA9IGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZW5hbWUpOwotCQlpZiAoc20gIT0gbnVsbCkgewotCQkJSURPTU5vZGUgeG1sTm9kZSA9IChJRE9NTm9kZSkgc20uZ2V0SW5kZXhlZFJlZ2lvbigwKTsKLQotCQkJaWYgKHhtbE5vZGUgIT0gbnVsbCkgewotCQkJCUpTUFRyYW5zbGF0b3IganNwdCA9IG5ldyBKU1BUcmFuc2xhdG9yKCk7Ci0JCQkJanNwdC5yZXNldCh4bWxOb2RlLCBudWxsKTsKLQkJCQkvLyBpbnQgc291cmNlVGV4dFBvcyA9IHRleHQuaW5kZXhPZigiPCU9IHRlc3RKc3BTdHJpbmciKSArIDE3OwotCQkJCS8vIGpzcHQuc2V0U291cmNlQ3Vyc29yKHNvdXJjZVRleHRQb3MpOyAvLyByaWdodCBhZnRlciB0aGUKLQkJCQkvLyB0ZXh0Ci0JCQkJanNwdC50cmFuc2xhdGUoKTsKLQkJCQlTdHJpbmcgdHJhbnNsYXRpb24gPSBqc3B0LmdldFRyYW5zbGF0aW9uKCkudG9TdHJpbmcoKTsKLQkJCQkvLyBvZmZzZXRzIGFyZSBmb3VuZCB1c2luZyBKU1BUcmFuc2xhdGlvbiBub3cKLQkJCQkvLyBpbnQgdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uID0ganNwdC5nZXRDdXJzb3JQb3NpdGlvbigpOwotCQkJCS8vIGFzc2VydEVxdWFscygiaW5jb3JyZWN0IGN1cnNvciBwb3NpdGlvbiA+IiArCi0JCQkJLy8gdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uLCA1MTksIHRyYW5zbGF0ZWRDdXJzb3JQb3NpdGlvbik7Ci0JCQkJLy8gYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdGlvbiB3YXMgaW5jb3JyZWN0IiwgInRlc3RKc3BTdHJpbmciLAotCQkJCS8vIHRyYW5zbGF0aW9uLnN1YnN0cmluZyg1MTksIDUzMikpOwotCQkJCWludCBjdXJzb3JTdGFydCA9IHRyYW5zbGF0aW9uLmluZGV4T2YoIm91dC5wcmludCggdGVzdEpzcFN0cmluZyApOyIgKSArIDEwOwotCQkJCWFzc2VydEVxdWFscygiaW5jb3JyZWN0IGN1cnNvciBwb3NpdGlvbiA+IiArIGN1cnNvclN0YXJ0LCA5MTQsIGN1cnNvclN0YXJ0KTsKLQkJCX0KLQkJCXNtLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE11bHRpcGxlSlNQU2VjdGlvbnNJbkphdmFzY3JpcHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQyLmpzcCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc20gPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGZpbGVuYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgbG9hZCBKU1AgZm9yIHRlc3QiLCBzbSk7Ci0JCUpTUFRyYW5zbGF0aW9uVXRpbCB0cmFuc2xhdGlvblV0aWwgPSBuZXcgSlNQVHJhbnNsYXRpb25VdGlsKHNtLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQotCQlTdHJpbmcgamF2YVRleHQgPSBTdHJpbmdVdGlscy5yZXBsYWNlKHRyYW5zbGF0aW9uVXRpbC5nZXRUcmFuc2xhdGlvbigpLmdldEphdmFUZXh0KCksICJcclxuIiwgIlxuIik7Ci0JCWphdmFUZXh0ID0gU3RyaW5nVXRpbHMucmVwbGFjZShqYXZhVGV4dCwgIlxyIiwgIlxuIik7Ci0JCXNtLnJlbGVhc2VGcm9tUmVhZCgpOwotCi0JCVN0cmluZyB0cmFuc2xhdGVkVGV4dCA9IGxvYWRDb250ZW50cygidGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdDIuamF2YXNvdXJjZSIpOwotCQlhc3NlcnRFcXVhbHMoInRyYW5zbGF0ZWQgY29udGVudHMgYXJlIG5vdCBhcyBleHBlY3RlZCIsIHRyYW5zbGF0ZWRUZXh0LCBqYXZhVGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGxvYWRDb250ZW50cyhTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKSk7Ci0JCWNoYXJbXSByZWFkQnVmZmVyID0gbmV3IGNoYXJbMjA0OF07Ci0JCWludCBuID0gcmVhZGVyLnJlYWQocmVhZEJ1ZmZlcik7Ci0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl3aGlsZSAobiA+IDApIHsKLQkJCXMuYXBwZW5kKHJlYWRCdWZmZXIsIDAsIG4pOwotCQkJbiA9IHJlYWRlci5yZWFkKHJlYWRCdWZmZXIpOwotCQl9Ci0KLQkJU3RyaW5nIHNvdXJjZSA9IFN0cmluZ1V0aWxzLnJlcGxhY2Uocy50b1N0cmluZygpLCAiXHJcbiIsICJcbiIpOwotCQlzb3VyY2UgPSBTdHJpbmdVdGlscy5yZXBsYWNlKHNvdXJjZSwgIlxyIiwgIlxuIik7Ci0JCXJldHVybiBzb3VyY2U7Ci0JfQotCi0JLyoqCi0JICogSU1QT1JUQU5UIHdob2V2ZXIgY2FsbHMgdGhpcyBtdXN0IHJlbGVhc2VGcm9tUmVhZCBhZnRlciB0aGV5IGFyZSBkb25lCi0JICogdXNpbmcgaXQuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gY3JlYXRlIG1vZGVsCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJcmV0dXJuIHNNb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQVHJhbnNsYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQVHJhbnNsYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjM2IxM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5kb20uQVNUOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmRvbS5BU1ROb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmRvbS5BU1RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuZG9tLkFTVFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuZG9tLlNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuZG9tLlZhcmlhYmxlRGVjbGFyYXRpb25GcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5kb20uVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb21kb2N1bWVudC5ET01Nb2RlbEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5KU1AxMU5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyLlNjYW5uZXJVbml0VGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB1bml0IHRlc3RzIHRoZSBzZWQgSlNQVHJhbnNsYXRpb24gbWVjaGFuaXNtLgotICogVGhhdCBpbmNsdWRlcyBKU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LCBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIsIGFuZCBKU1BUcmFuc2xhdGlvbi4KLSAqIEl0IHVzZXMgdGhlIGpzcF9pbmNsdWRlX3Rlc3QuanNwLCBiZWNhdXNlIG9mIHRoZSBtb3JlIGNvbXBsaWNhdGVkIHRyYW5zbGF0aW9uIGFuZCBvZmZzZXRzLgotICogCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgSlNQVHJhbnNsYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBQcm9qZWN0VW56aXBVdGlsaXR5IGZQcm9qVXRpbCA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLQlwcml2YXRlIEhhc2hNYXAgZlhNTEpTUFBvc2l0aW9uczsKLQotCXB1YmxpYyBKU1BUcmFuc2xhdGlvblRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCXB1YmxpYyBKU1BUcmFuc2xhdGlvblRlc3QoKSB7Ci0JCXN1cGVyKCJKU1BUcmFuc2xhdGlvblRlc3QiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZQcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCAiaW5jbHVkZXNfdGVzdHMuemlwIiwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJZlByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0UGF0aCgpKTsKLQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgiSU5DTFVERVNfVEVTVFMiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFBhZ2VEaXJlY3RpdmVTZXNzaW9uVmFyaWFibGVJbkZpbGUoKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcFRlc3RGaWxlUGF0aFN0cmluZyA9ICJJTkNMVURFU19URVNUUy90ZXN0MTg5OTI0LmpzcCI7Ci0JCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvMTg5OTI0L3Rlc3QxODk5MjQuanNwIiwganNwVGVzdEZpbGVQYXRoU3RyaW5nKTsKLQkJSVBhdGgganNwVGVzdEZpbGVQYXRoID0gbmV3IFBhdGgoanNwVGVzdEZpbGVQYXRoU3RyaW5nKTsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShqc3BUZXN0RmlsZVBhdGgpOwotCi0JCXZlcmlmeVRyYW5zbGF0aW9uSGFzTm9TZXNzaW9uVmFyaWFibGVzKGZpbGUpOwotCX0KLQlwcml2YXRlIHZvaWQgdmVyaWZ5VHJhbnNsYXRpb25IYXNOb1Nlc3Npb25WYXJpYWJsZXMoSUZpbGUgZmlsZSkgdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KG1vZGVsKTsKLQotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUlDb21waWxhdGlvblVuaXQgY3UgPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCkuZ2V0Q29tcGlsYXRpb25Vbml0KCk7Ci0JCQljdS5tYWtlQ29uc2lzdGVudChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCUlUeXBlW10gdHlwZXMgPSBjdS5nZXRBbGxUeXBlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotCQkJCUlKYXZhRWxlbWVudFtdIG1lbWJlcnMgPSB0eXBlc1tpXS5nZXRDaGlsZHJlbigpOwotCQkJCWZvciAoaW50IGsgPSAwOyBrIDwgbWVtYmVycy5sZW5ndGg7IGsrKykgewotCQkJCQkvLyBjaGVjayBmaWVsZHMgZm9yIG5hbWUgInNlc3Npb24iCi0JCQkJCWlmIChtZW1iZXJzW2tdLmdldEVsZW1lbnRUeXBlKCkgPT0gSUphdmFFbGVtZW50LkZJRUxEKSB7Ci0JCQkJCQlhc3NlcnRGYWxzZSgiZmllbGQgbmFtZWQgXCJzZXNzaW9uXCIgZXhpc3RzIiwgbWVtYmVyc1trXS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0VTU0lPTikpOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIGNoZWNrICJwdWJsaWMgdm9pZAotCQkJCQkgKiBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Ci0JCQkJCSAqIHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlCi0JCQkJCSAqIHJlc3BvbnNlKSIgZm9yIGxvY2FsIHZhcmlhYmxlcyBuYW1lZCAic2Vzc2lvbiIKLQkJCQkJICovCi0JCQkJCWVsc2UgaWYgKG1lbWJlcnNba10uZ2V0RWxlbWVudFR5cGUoKSA9PSBJSmF2YUVsZW1lbnQuTUVUSE9EICYmIG1lbWJlcnNba10uZ2V0RWxlbWVudE5hbWUoKS5zdGFydHNXaXRoKCJfanNwU2VydmljZSIpKSB7Ci0JCQkJCQlJQ29tcGlsYXRpb25Vbml0IGNvbXBpbGF0aW9uVW5pdCA9ICgoSU1ldGhvZCkgbWVtYmVyc1trXSkuZ2V0Q29tcGlsYXRpb25Vbml0KCk7Ci0JCQkJCQljb21waWxhdGlvblVuaXQubWFrZUNvbnNpc3RlbnQobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCQlBU1RQYXJzZXIgcGFyc2VyID0gQVNUUGFyc2VyLm5ld1BhcnNlcihBU1QuSkxTMyk7Ci0JCQkJCQlwYXJzZXIuc2V0U291cmNlKGN1KTsKLQkJCQkJCUFTVE5vZGUgbm9kZSA9IHBhcnNlci5jcmVhdGVBU1QobnVsbCk7Ci0JCQkJCQlub2RlLmFjY2VwdChuZXcgQVNUVmlzaXRvcigpIHsKLQkJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50IG5vZGUpIHsKLQkJCQkJCQkJSXRlcmF0b3IgZnJhZ21lbnRzID0gbm9kZS5mcmFnbWVudHMoKS5pdGVyYXRvcigpOwotCQkJCQkJCQl3aGlsZSAoZnJhZ21lbnRzLmhhc05leHQoKSkgewotCQkJCQkJCQkJVmFyaWFibGVEZWNsYXJhdGlvbkZyYWdtZW50IGZyYWdtZW50ID0gKFZhcmlhYmxlRGVjbGFyYXRpb25GcmFnbWVudCkgZnJhZ21lbnRzLm5leHQoKTsKLQkJCQkJCQkJCWlmIChmcmFnbWVudC5nZXROYW1lKCkuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCkuZXF1YWxzKEpTUDExTmFtZXNwYWNlLkFUVFJfTkFNRV9TRVNTSU9OKSkgewotCQkJCQkJCQkJCVN0cmluZyB0eXBlTmFtZSA9ICgoU2ltcGxlVHlwZSkgbm9kZS5nZXRUeXBlKCkpLmdldE5hbWUoKS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKTsKLQkJCQkJCQkJCQlhc3NlcnRGYWxzZSgibG9jYWwgdmFyaWFibGUgb2YgdHlwZSBcImphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvblwiIGFuZCBuYW1lZCBcInNlc3Npb25cIiBleGlzdHMiLCB0eXBlTmFtZS5lcXVhbHMoImphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiIpKTsKLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCQlyZXR1cm4gc3VwZXIudmlzaXQobm9kZSk7Ci0JCQkJCQkJfQotCQkJCQkJfSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UGFnZURpcmVjdGl2ZVNlc3Npb25WYXJpYWJsZUluU2VnbWVudCgpIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlTdHJpbmcganNwVGVzdEZpbGVQYXRoU3RyaW5nID0gIklOQ0xVREVTX1RFU1RTL3Rlc3QxODk5MjQuanNwIjsKLQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8xODk5MjQvdGVzdDE4OTkyNC5qc3AiLCBqc3BUZXN0RmlsZVBhdGhTdHJpbmcpOwotCQlqc3BUZXN0RmlsZVBhdGhTdHJpbmcgPSAiSU5DTFVERVNfVEVTVFMvaW5jbHVkZXIuanNwIjsKLQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8xODk5MjQvaW5jbHVkZXIuanNwIiwganNwVGVzdEZpbGVQYXRoU3RyaW5nKTsKLQkJSVBhdGgganNwVGVzdEZpbGVQYXRoID0gbmV3IFBhdGgoanNwVGVzdEZpbGVQYXRoU3RyaW5nKTsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShqc3BUZXN0RmlsZVBhdGgpOwotCi0JCXZlcmlmeVRyYW5zbGF0aW9uSGFzTm9TZXNzaW9uVmFyaWFibGVzKGZpbGUpOwkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNsYXRlUG9zaXRpb25zKCkgewotCi0JCUlET01Nb2RlbCBtb2RlbCA9IGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQl0cnkgewotCQkJSGFzaE1hcCBqYXZhMmpzcCA9IHRyYW5zbGF0aW9uLmdldEphdmEySnNwTWFwKCk7Ci0JCQlhc3NlcnRFcXVhbHMoImphdmEyanNwIG1hcCBzaXplOiIsIDExLCBqYXZhMmpzcC5zaXplKCkpOwotCi0JCQlIYXNoTWFwIGpzcDJqYXZhID0gdHJhbnNsYXRpb24uZ2V0SnNwMkphdmFNYXAoKTsKLQkJCWFzc2VydEVxdWFscygianNwMmphdmEgbWFwIHNpemU6IiwgMywganNwMmphdmEuc2l6ZSgpKTsKLQotCQkJLy8gc29tZSB0ZXN0IHBvc2l0aW9ucyAob3V0LnByaW50KCIiICsgfCApOykKLQkJCQotCQkJLy8gd2UgbmVlZCB0byBpZ25vcmUgdGhlIGNsYXNzbmFtZSBsZW5ndGggaW4gb3VyIGNvbXBhcmlzb25zCi0JCQkvLyB3aXRoIGphdmEgb2Zmc2V0cyB0aGF0IHdlIGdldCBmcm9tIHRoZSB0cmFuc2xhdGlvbgotCQkJLy8gc2luY2UgaXQgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHdvcmtzcGFjZSBsb2NhdGlvbgotCQkJaW50IGNsYXNzbmFtZUxlbmd0aCA9IHRyYW5zbGF0aW9uLmdldENsYXNzbmFtZSgpLmxlbmd0aCgpOwotCQkJCi0JCQlpbnQganNwVGVzdFBvc2l0aW9uID0gdHJhbnNsYXRpb24uZ2V0SnNwVGV4dCgpLmluZGV4T2YoIjwlPSAiKSArIDQ7Ci0JCQlpbnQgamF2YU9mZnNldCA9IHRyYW5zbGF0aW9uLmdldEphdmFPZmZzZXQoanNwVGVzdFBvc2l0aW9uKSAtIGNsYXNzbmFtZUxlbmd0aDsKLQkJCWFzc2VydEVxdWFscygiSlNQVHJhbnNsYXRpb24gamF2YSBvZmZzZXQ6IiwgMTI3NywgamF2YU9mZnNldCk7Ci0JCQkKLQkJCS8vICg8JT0gfCAlPikKLQkJCWludCBqYXZhVGVzdFBvc3RpdGlvbiA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigib3V0LnByaW50KCAgICk7IikgKyAxMDsKLQkJCS8vIGRvbnQnIG5lZWQgdG8gd29ycnkgYWJvdXQgY2xhc3NuYW1lIGxlbmd0aCBoZXJlIGJlY2F1c2Ugd2UgYXJlIGNvbXBhcmluZwotCQkJLy8gd2l0aCBhIHBvc2l0aW9uIGluIHRoZSBKU1AgZG9jdW1lbnQgKHdoaWNoIGRvZXNuJ3QgY29udGFpbiBjbGFzc25hbWUpCi0JCQlpbnQganNwT2Zmc2V0ID0gdHJhbnNsYXRpb24uZ2V0SnNwT2Zmc2V0KGphdmFUZXN0UG9zdGl0aW9uKTsKLQkJCWFzc2VydEVxdWFscygiSlNQVHJhbnNsYXRpb24ganNwIG9mZnNldDoiLCA1NjQsIGpzcE9mZnNldCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEpTUFRyYW5zbGF0aW9uVGV4dCgpIHsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBnZXRJbmNsdWRlVGVzdE1vZGVsRm9yUmVhZCgpOwotCQlTY2FubmVyVW5pdFRlc3RzLnZlcmlmeUxlbmd0aHMobW9kZWwsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCS8vIG5hbWVkIGFzIC5iaW4gc28gbm8gbGluZSBjb252ZXJzaW9uIG9jY3VycyAoXG4gaXMgaW4gdXNlKQotCQlJbnB1dFN0cmVhbSBpbiA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgidHJhbnNsYXRlZF90ZXh0LmJpbiIpOwotCQlTdHJpbmcga25vd25UcmFuc2xhdGlvblRleHQgPSBsb2FkQ2hhcnMoaW4pOwotCQl0cnkgewotCQkJLy8gaW1wcm92ZW1lbnRzOiBtYXkgbmVlZCBmaW5lciB0dW5lZCB0ZXh0IGNvbXBhcmVzIGxhdGVyCi0JCQkvLyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIHRyYW5zbGF0aW9ucyAoaW5jbHVkZXMsIHhtbC1qc3AgaW4gc2NyaXB0LCBhdHRyaWJ1dGVzLCBldGMuLi4pCi0JCQlTdHJpbmcgdGV4dCA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCk7Ci0JCQkKLQkJCWFzc2VydE5vdE51bGwoIkpTUCB0cmFuc2xhdGlvbiB0ZXh0OiIsIHRleHQpOwotCQkJYXNzZXJ0RXF1YWxzKCJKU1AgdHJhbnNsYXRpb24gdGV4dCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCIsIGtub3duVHJhbnNsYXRpb25UZXh0LCB0ZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUFRyYW5zbGF0aW9uQWRhcHRlcigpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKTsKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0KLQkJdHJ5IHsKLQkJCUlKYXZhUHJvamVjdCBwcm9qID0gYWRhcHRlci5nZXRKYXZhUHJvamVjdCgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IGphdmEgcHJvamVjdDoiICsgcHJvaik7Ci0KLQkJCXRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHRyYW5zbGF0aW9uOiIsIHRyYW5zbGF0aW9uKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTWFrZXMgc3VyZSBib3RoIGJlYW5zIGFyZSB0cmFuc2xhdGVkIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCi0JICogcmlnaHQgbmV4dCB0byBlYWNoIG90aGVyIHdpdGggbm8gc3BhY2UuCi0JICogCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEwMzAwNAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVc2VCZWFuTm9TcGFjZSgpIHsKLQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiSU5DTFVERVNfVEVTVFMvdXNlQmVhbl90ZXN0ZXIuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQlTdHJpbmcgamF2YVRleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJYm9vbGVhbiBiZWFuMSA9IGphdmFUZXh0LmluZGV4T2YoImphdmF4LnN3aW5nLkpCdXR0b24geCA9IG51bGw7IikgIT0gLTE7Ci0JCQlib29sZWFuIGJlYW4yID0gamF2YVRleHQuaW5kZXhPZigiamF2YXguc3dpbmcuSkJ1dHRvbiB5ID0gbnVsbDsiKSAhPSAtMTsKLQkJCWFzc2VydFRydWUoYmVhbjEpOwotCQkJYXNzZXJ0VHJ1ZShiZWFuMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTg2MzgyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFhNTEpTUFRyYW5zbGF0aW9uVGV4dCgpIHsKLQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiSU5DTFVERVNfVEVTVFMveG1sLWpzcC9tb3N0LXRhZ3MteG1sLWpzcC5qc3AiKSk7Ci0JCURPTU1vZGVsRm9ySlNQIHNNb2RlbCA9IChET01Nb2RlbEZvckpTUClnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGYpOwotCQl0cnkgewotCQkJc2V0dXBBZGFwdGVyRmFjdG9yeShzTW9kZWwpOwotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBzTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCQotCQkJU3RyaW5nIGphdmFUZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCQotCQkJLy8gbmFtZWQgYXMgLmJpbiBzbyBubyBsaW5lIGNvbnZlcnNpb24gb2NjdXJzIChcbiBpcyBpbiB1c2UpCi0JCQlJbnB1dFN0cmVhbSBpbiA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgidHJhbnNsYXRlZF94bWxfanNwLmJpbiIpOwotCQkJU3RyaW5nIGtub3duVHJhbnNsYXRpb25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKGtub3duVHJhbnNsYXRpb25UZXh0LCBqYXZhVGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTEpTUE1hcHBpbmcoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3htbC1qc3AvbW9zdC10YWdzLXhtbC1qc3AuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCUhhc2hNYXAganNwMmphdmEgPSB0cmFuc2xhdGlvbi5nZXRKc3AySmF2YU1hcCgpOwotCQkJT2JqZWN0W10ganNwUmFuZ2VzID0ganNwMmphdmEua2V5U2V0KCkudG9BcnJheSgpOwotCQkJUG9zaXRpb24ganNwUG9zID0gbnVsbDsKLQkJCVBvc2l0aW9uIGphdmFQb3MgPSBudWxsOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBqc3BSYW5nZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlqc3BQb3MgPSAoUG9zaXRpb24panNwUmFuZ2VzW2ldOwotCQkJCWphdmFQb3MgPSAoUG9zaXRpb24panNwMmphdmEuZ2V0KGpzcFBvcyk7Ci0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImpzcDoiICsgcHJpbnRQb3MoanNwUG9zKSArICIgPj4gamF2YToiICsgcHJpbnRQb3MoamF2YVBvcykpOwotCQkJCWNoZWNrUG9zaXRpb24oanNwUG9zLCBqYXZhUG9zKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSlNQQ0RBVEFUZXh0KCkgewotCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy9jZGF0YS9jZGF0YS5qc3AiKSk7Ci0JCURPTU1vZGVsRm9ySlNQIHNNb2RlbCA9IChET01Nb2RlbEZvckpTUClnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGYpOwotCQl0cnkgewotCQkJc2V0dXBBZGFwdGVyRmFjdG9yeShzTW9kZWwpOwotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBzTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCQotCQkJU3RyaW5nIHRyYW5zVGV4dCA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCk7Ci0JCQkKLS8vCQkJIG5hbWVkIGFzIC5iaW4gc28gbm8gbGluZSBjb252ZXJzaW9uIG9jY3VycyAoXG4gaXMgaW4gdXNlKQotCQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfeG1sX2pzcF9jZGF0YS5iaW4iKTsKLQkJCVN0cmluZyBrbm93blRleHQgPSBsb2FkQ2hhcnMoaW4pOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoa25vd25UZXh0LCB0cmFuc1RleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBjaGVja1Bvc2l0aW9uKFBvc2l0aW9uIGpzcFBvcywgUG9zaXRpb24gamF2YVBvcykgewotCQkKLQkJSGFzaE1hcCBleHBlY3RlZCA9IGdldFhNTEpTUFBvc2l0aW9ucygpOwotCQlPYmplY3RbXSBrZXlzID1leHBlY3RlZC5rZXlTZXQoKS50b0FycmF5KCk7Ci0JCVBvc2l0aW9uIGV4cGVjdGVkSnNwUG9zPSBudWxsOwotCQlQb3NpdGlvbiBleHBlY3RlZEphdmFQb3MgPSBudWxsOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHsKLQkJCWV4cGVjdGVkSnNwUG9zID0gKFBvc2l0aW9uKWtleXNbaV07Ci0JCQlpZihqc3BQb3MuZXF1YWxzKGV4cGVjdGVkSnNwUG9zKSkgewotCQkJCWV4cGVjdGVkSmF2YVBvcyA9IChQb3NpdGlvbilleHBlY3RlZC5nZXQoZXhwZWN0ZWRKc3BQb3MpOwotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBKU1AgcG9zaXRpb24gbWlzc2luZzogIiArIGpzcFBvcywgZm91bmQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBleHBlY3RlZCBqYXZhIHBvc2l0aW9uIGZvciBqc3BQb3M6ICIgKyBwcmludFBvcyhqc3BQb3MpLCBleHBlY3RlZEphdmFQb3MpOwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgamF2YSBwb3NpdGlvbiBmb3IganNwIHBvc2l0aW9uICIrcHJpbnRQb3MoanNwUG9zKSsiIHdhczoiICsgcHJpbnRQb3MoamF2YVBvcykgKyAiIGJ1dCBleHBlY3RlZDoiICsgcHJpbnRQb3MoZXhwZWN0ZWRKYXZhUG9zKSwgZXhwZWN0ZWRKYXZhUG9zLCBqYXZhUG9zKTsKLQl9Ci0JcHJpdmF0ZSBTdHJpbmcgcHJpbnRQb3MoUG9zaXRpb24gcG9zKSB7Ci0JCXJldHVybiBwb3MgIT0gbnVsbCA/ICJbIiArIHBvcy5vZmZzZXQgKyI6IisgcG9zLmxlbmd0aCArICJdIiA6ICJudWxsIjsKLQl9Ci0JcHJpdmF0ZSBIYXNoTWFwIGdldFhNTEpTUFBvc2l0aW9ucygpIHsKLQkJaWYoZlhNTEpTUFBvc2l0aW9ucyA9PSBudWxsKSB7Ci0JCQlmWE1MSlNQUG9zaXRpb25zID0gbmV3IEhhc2hNYXAoKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig4ODIsNTIpLCBuZXcgUG9zaXRpb24oMTI0MiwzMSkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDk2MSw3KSwgbmV3IFBvc2l0aW9uKDEzMDAsNykpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDEwMTgsMTQpLCBuZXcgUG9zaXRpb24oODksMTQpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig2NDAsMiksIG5ldyBQb3NpdGlvbigxMTg0LDIpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig0MDYsMjQpLCBuZXcgUG9zaXRpb24oMTAxMywyNCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDY4NSwxOSksIG5ldyBQb3NpdGlvbigxMTkzLDE5KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNjUwLDI2KSwgbmV3IFBvc2l0aW9uKDExNTcsMjYpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig1NjMsOSksIG5ldyBQb3NpdGlvbigxMTE5LDkpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig0NjEsMjMpLCBuZXcgUG9zaXRpb24oMTAzOCwyMykpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDUyMiw4KSwgbmV3IFBvc2l0aW9uKDEwOTgsOCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDMyMyw0NCksIG5ldyBQb3NpdGlvbigyNzcsNDUpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbigyNDUsNDMpLCBuZXcgUG9zaXRpb24oMjMyLDQ0KSk7Ci0JCX0KLQkJcmV0dXJuIGZYTUxKU1BQb3NpdGlvbnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBsb2FkQ2hhcnMoSW5wdXRTdHJlYW0gaW5wdXQpIHsKLQotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJdHJ5IHsKLQkJCWludCBjID0gLTE7Ci0JCQl3aGlsZSAoKGMgPSBpbnB1dC5yZWFkKCkpID49IDApIHsKLQkJCQlpZiAoYyA+IDI1NSkKLQkJCQkJYnJlYWs7Ci0JCQkJcy5hcHBlbmQoKGNoYXIpIGMpOwotCQkJfQotCQkJaW5wdXQuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBsb2FkaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCQlyZXR1cm4gcy50b1N0cmluZygpOwotCX0KLQkKLQkvKioKLQkgKiBhZGQgdGhlIGZhY3RvcnkgZm9yIEpTUFRyYW5zbGF0aW9uQWRhcHRlciBoZXJlCi0JICogQHBhcmFtIHNtCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwQWRhcHRlckZhY3RvcnkoSVN0cnVjdHVyZWRNb2RlbCBzbSkgewotCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShzbSk7Ci0JfQotCi0JLyoqCi0JICogSU1QT1JUQU5UIC0gcmVsZWFzZSBtb2RlbCAobW9kZWwucmVsZWFzZUZyb21SZWFkKCkpIGFmdGVyIHVzZQotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCXJldHVybiBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2V4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oImNvdWxkbid0IG9wZW4gZmlsZSA+ICIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgSURPTU1vZGVsIGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCkgewotCi0JCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy9qc3BfaW5jbHVkZV90ZXN0LmpzcCIpOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGpzcFRlc3RGaWxlUGF0aCk7Ci0JCUlET01Nb2RlbCB4bWxNb2RlbCA9IChJRE9NTW9kZWwpIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCXNldHVwQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCQlyZXR1cm4geG1sTW9kZWw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RKU1BDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI2ZTRlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmpzcAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotCi1wdWJsaWMgY2xhc3MgVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0SlNQQ29udGVudEFzc2lzdENvbXB1dGVycyI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfRElSID0gIldlYkNvbnRlbnQiOwotCQotCS8qKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqCi0JICogPHA+RGVmYXVsdCBjb25zdHJ1Y3RvcjxwPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnMoKSB7Ci0JCXN1cGVyKCJUZXN0IEpTUCBDb250ZW50IEFzc2lzdCBDb21wdXRlcnMiKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+Q29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS48L3A+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdGhpcyB0ZXN0IHJ1biBzaG91bGQgaGF2ZS4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RKU1BDb250ZW50QXNzaXN0Q29tcHV0ZXJzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKFRlc3RKU1BDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmNsYXNzLCAiVGVzdCBKU1AgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JCXJldHVybiBuZXcgVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCh0cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eURvY3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vZGVmYXVsdCwganNwIHRlbXBsYXRlcywgaHRtbCB0ZW1wbGF0ZXMsIGh0bWwgdGFncywganNwLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezE0LCA3LCA2LCAxLCAwLCAxNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDAuanNwIiwgMCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZnRlclhNTERlY2xhcmF0aW9uQmVmb3JlSFRNTFRhZ1Byb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCB0ZW1wbGF0ZXMsIGh0bWwgdGVtcGxhdGVzLCBodG1sIHRhZ3MsIGpzcCwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxOCwgMTAsIDgsIDAsIDAsIDE4fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5qc3AiLCAxLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFmdGVyWE1MRGVjbGFyYXRpb25CZWZvcmVFbXB0eURvY1Byb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCB0ZW1wbGF0ZXMsIGh0bWwgdGVtcGxhdGVzLCBodG1sIHRhZ3MsIGpzcCwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxOSwgMTAsIDgsIDEsIDAsIDE5fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0Mi5qc3AiLCAxLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFmdGVySlNQVGFnbGlic0JlZm9yZURvY1R5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9kZWZhdWx0LCBqc3AgdGVtcGxhdGVzLCBodG1sIHRlbXBsYXRlcywgaHRtbCB0YWdzLCBqc3AsIGRlZmF1bHQKLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTgsIDEwLCA4LCAwLCAwLCAxOH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuanNwIiwgNiwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCb2R5VGFnQ2hpbGRFbGVtZW50UHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vZGVmYXVsdCwganNwIHRlbXBsYXRlcywgaHRtbCB0ZW1wbGF0ZXMsIGh0bWwgdGFncywganNwLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezk1LCAxMCwgOCwgNjQsIDEzLCA5NX07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuanNwIiwgMTQsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UFRhZ0NoaWxkRWxlbWVudFByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCB0ZW1wbGF0ZXMsIGh0bWwgdGVtcGxhdGVzLCBodG1sIHRhZ3MsIGpzcCwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs3MiwgMTAsIDgsIDQxLCAxMywgNzJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmpzcCIsIDE2LCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERJVlRhZ0NoaWxkRWxlbWVudFByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCB0ZW1wbGF0ZXMsIGh0bWwgdGVtcGxhdGVzLCBodG1sIHRhZ3MsIGpzcCwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs5NSwgMTAsIDgsIDY0LCAxMywgOTV9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmpzcCIsIDIwLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRUYWdDaGlsZEVsZW1lbnRQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9kZWZhdWx0LCBIVE1MIHRlbXBsYXRlcywgSFRNTCB0YWdzLCBKU1AgcHJvcG9zYWxzLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEsIDAsIDAsIDEsIDF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmpzcCIsIDI1LCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUFJlZ2lvblByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCwganNwIGphdmEsIGRlZmF1bHQKLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NjAsIDAsIDYwLCA2MH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuanNwIiwgMjgsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RElWVGFnQXR0cmlidXRlTmFtZVByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCB0ZW1wbGF0ZXMsIGh0bWwgdGVtcGxhdGVzLCBodG1sIHRhZ3MsIGpzcCwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxOSwgMSwgMCwgMTgsIDAsIDE5fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5qc3AiLCAxOSwgNSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFTFByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCwganNwIGphdmEsIGRlZmF1bHQKLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIsIDAsIDEyLCAxMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuanNwIiwgMzMsIDE1LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEVMSW5BdHRyaWJ1dGVQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9kZWZhdWx0LCBqc3AsIGpzcCBqYXZhLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEyLCAwLCAxMiwgMTJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmpzcCIsIDMxLCAyNCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUYWdBdHRyaWJ1dGVOYW1lUHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vZGVmYXVsdCwganNwLCBqc3AgamF2YSwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs2LCA0LCAyLCAwLCAwLCA2fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5qc3AiLCA0MSwgMTUsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTFRhZ0F0dHJpYnV0ZVZhbHVlUHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vZGVmYXVsdCwganNwLCBqc3AgamF2YSwgZGVmYXVsdAotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxNSwgMiwgMCwgMCwgMTMsIDE1fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5qc3AiLCA4LCAxMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUYWdQcm9wb3NhbHNBdERvY3VtZW50Um9vdExldmVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vZGVmYXVsdCwganNwIHRlbXBsYXRlcywgaHRtbCB0ZW1wbGF0ZXMsIGh0bWwgdGFncywganNwLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezM2LCAxMCwgOCwgMSwgMTcsIDM2fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0Ni5qc3AiLCAyLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdIVE1MVGFnTmFtZVByb3Bzb2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvL2RlZmF1bHQsIGpzcCB0ZW1wbGF0ZSwgaHRtbCB0ZW1wbGF0ZSwgaHRtbCwganNwLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezIsIDEsIDAsIDEsIDAsIDJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3Q0LmpzcCIsIDExLCA5LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdIVE1MVGFnUHJvcHNvYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vZGVmYXVsdCwganNwIHRlbXBsYXRlLCBodG1sIHRlbXBsYXRlLCBodG1sLCBqc3AsIGRlZmF1bHQKLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MywgMSwgMCwgMiwgMCwgM307Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDQuanNwIiwgMTIsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluaXNoQ2xvc2luZ0pTUFRhZ05hbWVQcm9wc29hbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9kZWZhdWx0LCB4bWwgdGVtcGxhdGUsIGh0bWwgdGFnLCBqc3AsIGpzcCBqYXZhLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEsIDAsIDAsIDEsIDAsIDF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3Q1LmpzcCIsIDExLCA5LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaENsb3NpbmdKU1BUYWdQcm9wc29hbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9kZWZhdWx0LCB4bWwgdGVtcGxhdGUsIGh0bWwgdGFnLCBqc3AsIGpzcCBqYXZhLCBkZWZhdWx0Ci0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezUsIDQsIDIsIDAsIDAsIDV9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3Q1LmpzcCIsIDEyLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+UnVuIGEgcHJvcG9zYWwgdGVzdCBieSBvcGVuaW5nIHRoZSBnaXZlbiBmaWxlIGFuZCBpbnZva2luZyBjb250ZW50IGFzc2lzdCBmb3IKLQkgKiBlYWNoIGV4cGVjdGVkIHByb3Bvc2FsIGNvdW50IGF0IHRoZSBnaXZlbiBsaW5lIG51bWJlciBhbmQgbGluZSBjaGFyYWN0ZXIKLQkgKiBvZmZzZXQgYW5kIHRoZW4gY29tcGFyZSB0aGUgbnVtYmVyIG9mIHByb3Bvc2FscyBmb3IgZWFjaCBpbnZvY2F0aW9uIChwYWdlcykgdG8gdGhlCi0JICogZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fscy48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGVOYW1lCi0JICogQHBhcmFtIGxpbmVOdW0KLQkgKiBAcGFyYW0gbGluZVJlbGF0aXZlQ2hhck9mZnNldAotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHJ1blByb3Bvc2FsVGVzdChTdHJpbmcgZmlsZU5hbWUsCi0JCQlpbnQgbGluZU51bSwgaW50IGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQsCi0JCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB0aHJvd3MgRXhjZXB0aW9uewotCQkKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlpbnQgb2Zmc2V0ID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldChsaW5lTnVtKSArIGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQ7Ci0KLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBnZXRQcm9wb3NhbHModmlld2VyLCBvZmZzZXQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoKTsKLQkJCi0JCXZlcmlmeVByb3Bvc2FsQ291bnRzKHBhZ2VzLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+SW52b2tlIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBnaXZlbiB2aWV3ZXIgYXQgdGhlIGdpdmVuIG9mZnNldCwgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgcGFnZXMKLQkgKiBhbmQgcmV0dXJuIHRoZSByZXN1bHRzIG9mIGVhY2ggcGFnZTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEBwYXJhbSBwYWdlQ291bnQKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJQ29tcGxldGlvblByb3Bvc2FsW11bXSBnZXRQcm9wb3NhbHMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBpbnQgb2Zmc2V0LCBpbnQgcGFnZUNvdW50KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9zZXR1cCB0aGUgdmlld2VyCi0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBjb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpOwotCQlDb250ZW50QXNzaXN0YW50IGNvbnRlbnRBc3Npc3RhbnQgPSAoQ29udGVudEFzc2lzdGFudCljb25maWd1cmF0aW9uLmdldENvbnRlbnRBc3Npc3RhbnQodmlld2VyKTsKLQkJdmlld2VyLmNvbmZpZ3VyZShjb25maWd1cmF0aW9uKTsKLQkJdmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uob2Zmc2V0LCAwKTsKLQkJCi0JCS8vZ2V0IHRoZSBwcm9jZXNzb3IKLQkJU3RyaW5nIHBhcnRpdGlvblR5cGVJRCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldFBhcnRpdGlvbihvZmZzZXQpLmdldFR5cGUoKTsKLQkJSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IgcHJvY2Vzc29yID0gY29udGVudEFzc2lzdGFudC5nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29yKHBhcnRpdGlvblR5cGVJRCk7Ci0KLQkJLy9maXJlIGNvbnRlbnQgYXNzaXN0IHNlc3Npb24gYWJvdXQgdG8gc3RhcnQKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotCQkgICAgICAgIGdldERlY2xhcmVkTWV0aG9kKCJmaXJlU2Vzc2lvbkJlZ2luRXZlbnQiLCBuZXcgQ2xhc3NbXSB7Ym9vbGVhbi5jbGFzc30pOwotCQlwcml2YXRlRmlyZVNlc3Npb25CZWdpbkV2ZW50TWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG5ldyBPYmplY3RbXSB7Qm9vbGVhbi5UUlVFfSk7Ci0KLQkJLy9nZXQgY29udGVudCBhc3Npc3Qgc3VnZ2VzdGlvbnMKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwYWdlQ291bnRdW107Ci0JCWZvcihpbnQgcCA9IDA7IHAgPCBwYWdlQ291bnQ7ICsrcCkgewotCQkJcGFnZXNbcF0gPSBwcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHModmlld2VyLCBvZmZzZXQpOwotCQl9Ci0JCQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBlbmRpbmcKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkVuZEV2ZW50TWV0aG9kID0gQ29udGVudEFzc2lzdGFudC5jbGFzcy4KLSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uRW5kRXZlbnQiLCBudWxsKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG51bGwpOwotCQkKLQkJcmV0dXJuIHBhZ2VzOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db21wYXJlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzIHBlciBwYWdlIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHByb3Bvc2FscwotCSAqIHBlciBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSBwYWdlcwotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlQcm9wb3NhbENvdW50cyhJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcywgaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cykgewotCQlTdHJpbmdCdWZmZXIgZXJyb3IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvcihpbnQgcGFnZSA9IDA7IHBhZ2UgPCBleHBlY3RlZFByb3Bvc2FsQ291bnRzLmxlbmd0aDsgKytwYWdlKSB7Ci0JCQlpZihleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdID4gcGFnZXNbcGFnZV0ubGVuZ3RoKSB7Ci0JCQkJZXJyb3IuYXBwZW5kKCJcblByb3Bvc2FsIHBhZ2UgIiArIHBhZ2UgKyAiIGRpZCBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fsczogd2FzICIgKwotCQkJCQkJcGFnZXNbcGFnZV0ubGVuZ3RoICsgIiBleHBlY3RlZCAiICsgZXhwZWN0ZWRQcm9wb3NhbENvdW50c1twYWdlXSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8vaWYgZXJyb3JzIHJlcG9ydCB0aGVtCi0JCWlmKGVycm9yLmxlbmd0aCgpID4gMCkgewotCQkJQXNzZXJ0LmZhaWwoZXJyb3IudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+R2l2ZW4gYSBmaWxlIG5hbWUgaW4gPGNvZGU+ZlByb2plY3Q8L2NvZGU+IGF0dGVtcHRzIHRvIGdldCBhbiA8Y29kZT5JRmlsZTwvY29kZT4KLQkgKiBmb3IgaXQsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgdGhlIHRlc3QgZmFpbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldAotCSAqIEByZXR1cm4gdGhlIDxjb2RlPklGaWxlPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIDxjb2RlPm5hbWU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZ2V0RmlsZShTdHJpbmcgbmFtZSkgewotCQlJRmlsZSBmaWxlID0gZlByb2plY3QuZ2V0RmlsZShDT05URU5UX0RJUiArIElQYXRoLlNFUEFSQVRPUiArIG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIDxjb2RlPmZpbGU8L2NvZGU+IGdldCBhbiBlZGl0b3IgZm9yIGl0LiBJZiBhbiBlZGl0b3IgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHJldHJpZXZlZCBmb3IgdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+IHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFscmVhZHkKLQkgKiBvcGVuIGVkaXRvci48L3A+Ci0JICogCi0JICogPHA+V2hlbiBvcGVuaW5nIHRoZSBlZGl0b3IgaXQgd2lsbCBhbHNvIHN0YW5kYXJkaXplZCB0aGUgbGluZQotCSAqIGVuZGluZ3MgdG8gPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIG9wZW4gYW5kIHJldHVybiBhbiBlZGl0b3IgZm9yIHRoaXMKLQkgKiBAcmV0dXJuIDxjb2RlPlN0cnVjdHVyZWRUZXh0RWRpdG9yPC9jb2RlPiBvcGVuZWQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotCQkKLQkJaWYoZWRpdG9yID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlLCB0cnVlKTsKLQkJCQlpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgewotCQkJCQlYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0IHhtbEVkaXRvclBhcnQgPSAoWE1MTXVsdGlQYWdlRWRpdG9yUGFydCllZGl0b3JQYXJ0OwotCQkJCQllZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpeG1sRWRpdG9yUGFydC5nZXRBZGFwdGVyKFN0cnVjdHVyZWRUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCQl9IGVsc2UgaWYoZWRpdG9yUGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCWVkaXRvciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpZWRpdG9yUGFydCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIpOwotCQkJCX0KLQkJCQkKLQkJCQlpZihlZGl0b3IgIT0gbnVsbCkgewotCQkJCQlzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKGVkaXRvcik7Ci0JCQkJCWZGaWxlVG9FZGl0b3JNYXAucHV0KGZpbGUsIGVkaXRvcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gZWRpdG9yIGZvciAiICsgZmlsZSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlICsgIiBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBlZGl0b3I7Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHN0YW5kYXJkaXplTGluZUVuZGluZ3MoU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpLmdldERvY3VtZW50KCk7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvYy5nZXQoKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcciIsICJcbiIpOwotCQlkb2Muc2V0KGNvbnRlbnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyBpbm5lciBjbGFzcyBpcyB1c2VkIHRvIGRvIHNldCB1cCBhbmQgdGVhciBkb3duIGJlZm9yZSBhbmQKLQkgKiBhZnRlciAocmVzcGVjdGl2ZWx5KSBhbGwgdGVzdHMgaW4gdGhlIGluY2xvc2luZyBjbGFzcyBoYXZlIHJ1bi48L3A+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgVGVzdEpTUENvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL3NldHVwIHByb3BlcnRpZXMKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBub25pbnRlcmFjdGl2ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gImZhbHNlIjsKLQkJCX0KLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JCQkKLQkJCS8vc2V0dXAgcHJvamVjdAotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQkJCS8vIHBsYXRmb3JtIGxvY2F0aW9uIG1heSBiZSBudWxsIC0tIGRlcGVuZHMgb24gIm1vZGUiIG9mIHBsYXRmb3JtCi0JCQlpZiAocGxhdGZvcm1Mb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoCi0JCQkJCVByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwKLQkJCQkJUFJPSkVDVF9OQU1FICsgUHJvamVjdFVuemlwVXRpbGl0eS5aSVBfRVhURU5TSU9OLAotCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQkJCWZQcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldFBhdGgoKSk7Ci0JCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCWZQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQl9Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW48L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3RlYXJEb3duKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL2Nsb3NlIG91dCB0aGUgZWRpdG9ycwotCQkJSXRlcmF0b3IgaXRlciA9IGZGaWxlVG9FZGl0b3JNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWl0ZXIubmV4dCgpOwotCQkJCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JCQkJZWRpdG9yLmNsb3NlKGZhbHNlKTsKLQkJCX0KLQkJCQotCQkJLy9yZW1vdmUgcHJvamVjdAotCQkJZlByb2plY3QuZGVsZXRlKHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCi0JCQkvL3Jlc3RvcmUgcHJvcGVydGllcwotCQkJaWYgKHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhjN2MwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPnBtci5qc3A8L1RJVExFPg0KLQ0KLTwlIVN0cmluZyB0ZXN0SnNwU3RyaW5nID0gInRlc3RKc3BTdHJpbmciOyAlPg0KLTxzY3JpcHQ+IA0KLQ0KLXZhciB0ZXN0ID0gPCU9IHRlc3RKc3BTdHJpbmcgJT47DQotDQotPC9zY3JpcHQ+DQotDQotDQotDQotPC9IRUFEPg0KLTxCT0RZPg0KLTwlICAlPg0KLTxQPlBsYWNlIGpzcEluSmF2YXNjcmlwdC5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQyLmphdmFzb3VyY2UgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdDIuamF2YXNvdXJjZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwMjEwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdDIuamF2YXNvdXJjZQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lio7DQotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOw0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOw0KLQ0KLXB1YmxpYyBjbGFzcyBfdGVzdGZpbGVzXzJGX2pzcEluSmF2YXNjcmlwdDJfMkVfanNwIGV4dGVuZHMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0ew0KLVN0cmluZyB0ZXN0SnNwU3RyaW5nID0gInRlc3RKc3BTdHJpbmciOyANCi0NCi1wdWJsaWMgdm9pZCBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQ0KLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7DQotamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGFnZUNvbnRleHQgPSBKc3BGYWN0b3J5LmdldERlZmF1bHRGYWN0b3J5KCkuZ2V0UGFnZUNvbnRleHQodGhpcywgcmVxdWVzdCwgcmVzcG9uc2UsIG51bGwsIHRydWUsIEpzcFdyaXRlci5ERUZBVUxUX0JVRkZFUiwgdHJ1ZSk7DQotamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbiA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb250ZXh0KCk7DQotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb25maWcoKTsNCi1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gcGFnZUNvbnRleHQuZ2V0T3V0KCk7DQotT2JqZWN0IHBhZ2UgPSB0aGlzOw0KLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gcGFnZUNvbnRleHQuZ2V0U2Vzc2lvbigpOw0KLQ0KLXRyeSB7DQote291dC5wcmludCgiIik7fSAvL21hcmt1cA0KLXtvdXQucHJpbnQoIiIpO30gLy9tYXJrdXANCi1vdXQucHJpbnQoIHRlc3RKc3BTdHJpbmcgKTsNCi17b3V0LnByaW50KCIiKTt9IC8vbWFya3VwDQotICANCi17b3V0LnByaW50KCIiKTt9IC8vbWFya3VwDQotDQotICAgICAgICBpZiggcmVxdWVzdC5nZXRBdHRyaWJ1dGUoIlNvYXBVUkwiKSAhPSBudWxsICkNCi0gICAgICAgIHsNCi0gICAgICAgIA0KLW91dC5wcmludCggKFN0cmluZylyZXF1ZXN0LmdldEF0dHJpYnV0ZSgiU29hcFVSTCIpKTsNCi0NCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsgDQotICAgICAgICANCi17b3V0LnByaW50KCIiKTt9IC8vbWFya3VwDQotIH0gDQote291dC5wcmludCgiIik7fSAvL21hcmt1cA0KLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IA0KLX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0Mi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2Mzg0M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD4KLTwlQCBwYWdlIAotbGFuZ3VhZ2U9ImphdmEiCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiCi0lPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5wbXIuanNwPC9USVRMRT4KLQotPCUhU3RyaW5nIHRlc3RKc3BTdHJpbmcgPSAidGVzdEpzcFN0cmluZyI7ICU+Ci08c2NyaXB0PiAKLQotdmFyIHRlc3QgPSA8JT0gdGVzdEpzcFN0cmluZyAlPjsKLQotPC9zY3JpcHQ+Ci0KLQotCi08L0hFQUQ+Ci08Qk9EWT4KLTwlICAlPgotPFA+UGxhY2UganNwSW5KYXZhc2NyaXB0Mi5qc3AncyBjb250ZW50IGhlcmUuPC9QPgotICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgPCUKLSAgICAgICAgaWYoIHJlcXVlc3QuZ2V0QXR0cmlidXRlKCJTb2FwVVJMIikgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgJT4KLSAgICAgICAgdmFyIHNvYXBVUkwgPSAiPCU9IChTdHJpbmcpcmVxdWVzdC5nZXRBdHRyaWJ1dGUoIlNvYXBVUkwiKSU+IjsKLSAgICAgICAgPCUKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgCi0gICAgICAgICU+Ci0gICAgICAgIHZhciBzb2FwVVJMID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjsKLSAgIDwvc2NyaXB0PgotPCUgfSAlPgotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfdGV4dC5iaW4gYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF90ZXh0LmJpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjZGVkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF90ZXh0LmJpbgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLio7Ci1pbXBvcnQgamF2YXguc2VydmxldC5qc3AuKjsKLQotcHVibGljIGNsYXNzIF9fMkZfSU5DTFVERVNfNUZfVEVTVFNfMkZfanNwXzVGX2luY2x1ZGVfNUZfdGVzdF8yRV9qc3AgZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXR7Ci0gU3RyaW5nIGFyZ2ggPSAiYXJnaCI7IAotCi0gcHVibGljIFN0cmluZyBnbG9iYWxJbmNsdWRlZFN0cmluZyA9ICJpbmNsdWRlZCI7Ci0KLSBwcm90ZWN0ZWQgU3RyaW5nIHdpdGhfc3BhY2UgPSAid2l0aHNwYWNlIjsKLQotcHVibGljIHZvaWQgX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IEpzcEZhY3RvcnkuZ2V0RGVmYXVsdEZhY3RvcnkoKS5nZXRQYWdlQ29udGV4dCh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSwgbnVsbCwgdHJ1ZSwgSnNwV3JpdGVyLkRFRkFVTFRfQlVGRkVSLCB0cnVlKTsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBwYWdlQ29udGV4dC5nZXRTZXJ2bGV0Q29udGV4dCgpOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb25maWcoKTsKLWphdmF4LnNlcnZsZXQuanNwLkpzcFdyaXRlciBvdXQgPSBwYWdlQ29udGV4dC5nZXRPdXQoKTsKLU9iamVjdCBwYWdlID0gdGhpczsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gcGFnZUNvbnRleHQuZ2V0U2Vzc2lvbigpOwotCi10cnkgewote291dC5wcmludCgiIik7fSAvL21hcmt1cAote291dC5wcmludCgiIik7fSAvL21hcmt1cAotIFN0cmluZyBsb2NhbEluY2x1ZGVkU3RyaW5nID0gZ2xvYmFsSW5jbHVkZWRTdHJpbmc7Ci1mb3IoaW50IGk9MDsgaTw1OyBpKyspIHsKLW91dC5wcmludChpKTsKLX0KLWphdmF4LnN3aW5nLkpCdXR0b24gQkVBTl9pbmNsdWRlZEJlYW4gPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwotIGludCBpbmNsdWRlX2luY2x1ZGVfaW50ID0gNTsgCi1qYXZheC5zd2luZy5KQnV0dG9uIGluY2x1ZGVzVXNlQmVhbiA9IG5ldyBqYXZheC5zd2luZy5KQnV0dG9uKCk7Ci17IC8vIDxnaWZ0czpnaWZ0PgotfSAvLyA8L2dpZnRzOmdpZnQ+Ci17b3V0LnByaW50KCIiKTt9IC8vbWFya3VwCi1vdXQucHJpbnQoICAgKTsKLXtvdXQucHJpbnQoIiIpO30gLy9tYXJrdXAKLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IAotfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwLmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDMwNzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU181Rl9URVNUU18yRl94bWxfMkRfanNwXzJGX21vc3RfMkRfdGFnc18yRF94bWxfMkRfanNwXzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLXB1YmxpYyBTdHJpbmcgbXlGdW5jKCkgeyByZXR1cm4gIm15ZnVuYyI7IH0KLQotcHVibGljIFN0cmluZyBteUZ1bmMyKCkgeyByZXR1cm4gIm15ZnVuYyI7IH0KLQotcHVibGljIHZvaWQgX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IEpzcEZhY3RvcnkuZ2V0RGVmYXVsdEZhY3RvcnkoKS5nZXRQYWdlQ29udGV4dCh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSwgbnVsbCwgdHJ1ZSwgSnNwV3JpdGVyLkRFRkFVTFRfQlVGRkVSLCB0cnVlKTsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBwYWdlQ29udGV4dC5nZXRTZXJ2bGV0Q29udGV4dCgpOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb25maWcoKTsKLWphdmF4LnNlcnZsZXQuanNwLkpzcFdyaXRlciBvdXQgPSBwYWdlQ29udGV4dC5nZXRPdXQoKTsKLU9iamVjdCBwYWdlID0gdGhpczsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gcGFnZUNvbnRleHQuZ2V0U2Vzc2lvbigpOwotCi10cnkgewote291dC5wcmludCgiIik7fSAvL21hcmt1cAote291dC5wcmludCgiIik7fSAvL21hcmt1cAotU3RyaW5nIGNvbnNlYzEgPSAidGVzdCI7Ci1TdHJpbmcgY29uc2VjMiA9ICJ0d28iOwote291dC5wcmludCgiIik7fSAvL21hcmt1cAotb3V0LnByaW50KG15RnVuYygpKTsKLW91dC5wcmludChteUZ1bmMyKCkpOwote291dC5wcmludCgiIik7fSAvL21hcmt1cAotamF2YXguc3dpbmcuQWJzdHJhY3RCdXR0b24gamIgPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwote291dC5wcmludCgiIik7fSAvL21hcmt1cAotU3RyaW5nIGluY2x1ZGVkU3RyaW5nID0gImluY2QiOwote291dC5wcmludCgiIik7fSAvL21hcmt1cAotICAgamIuIAote291dC5wcmludCgiIik7fSAvL21hcmt1cAoteyAvLyA8bG9naWM6aXRlcmF0ZT4KLX0gLy8gPC9sb2dpYzppdGVyYXRlPgote291dC5wcmludCgiIik7fSAvL21hcmt1cAotIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge30gCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcF9jZGF0YS5iaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMTllODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcF9jZGF0YS5iaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1pbXBvcnQgamF2YXguc2VydmxldC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7Ci0KLXB1YmxpYyBjbGFzcyBfXzJGX0lOQ0xVREVTXzVGX1RFU1RTXzJGX2NkYXRhXzJGX2NkYXRhXzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLXB1YmxpYyB2b2lkIF9qc3BTZXJ2aWNlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0JCXRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGFnZUNvbnRleHQgPSBKc3BGYWN0b3J5LmdldERlZmF1bHRGYWN0b3J5KCkuZ2V0UGFnZUNvbnRleHQodGhpcywgcmVxdWVzdCwgcmVzcG9uc2UsIG51bGwsIHRydWUsIEpzcFdyaXRlci5ERUZBVUxUX0JVRkZFUiwgdHJ1ZSk7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uID0gcGFnZUNvbnRleHQuZ2V0U2VydmxldENvbnRleHQoKTsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyBjb25maWcgPSBwYWdlQ29udGV4dC5nZXRTZXJ2bGV0Q29uZmlnKCk7Ci1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gcGFnZUNvbnRleHQuZ2V0T3V0KCk7Ci1PYmplY3QgcGFnZSA9IHRoaXM7Ci1qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHBhZ2VDb250ZXh0LmdldFNlc3Npb24oKTsKLQotdHJ5IHsKLXtvdXQucHJpbnQoIiIpO30gLy9tYXJrdXAKLQotaW50IGEgPSAxOwotaWYgKGEgCi08Ci0gMikgewotIG91dC5wcmludGxuKCJ4Iik7Ci19IAote291dC5wcmludCgiIik7fSAvL21hcmt1cAotICAgCi1TdHJpbmcgdGVzdCA9ICIiOwotCi0KLSAgIAotaW50IGEgPSAxOwotaWYgKGEgPCAyKSB7ICAgCi0gb3V0LnByaW50bG4oIngiKTsKLX0KLQotCi0gCi0gdGVzdC50b1VwcGVyQ2FzZSgpOwote291dC5wcmludCgiIik7fSAvL21hcmt1cAotIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge30gCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmMzU0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRkZXNjcmlwdGlvbi9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGRlc2NyaXB0aW9uOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLklDb250ZW50RGVzY3JpcHRpb25Gb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudC5VbnppcHBlZFByb2plY3RUZXN0ZXI7Ci0KLS8qKgotICogVGVzdHMgdGhhdCBvdXIgQ29udGVudERlc2NyaWJlckZvckpTUCBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLAotICogV2UgY2hlY2sgdGhhdCB0aGUgY29udGVudCBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBpbnB1dCBzdHJlYW0gaGFzIGFsbAotICogb2YgdGhlIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMuCi0gKiAodGhyb3VnaCB0aGUgUGxhdGZvcm0gY29udGVudCB0eXBlIGZyYW1ld29yaykKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDb250ZW50RGVzY3JpcHRpb24gZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MUElXaXRoSlNQU3ludGF4KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uLkNIQVJTRVQsICJVVEYtOCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL1B1cmNoYXNlT3JkZXItbm8tWE1MUEktanNwLXN5bnRheC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V2l0aFhNTFBJV2l0aEpTUFN5bnRheCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveG1sIik7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbi5DSEFSU0VULCAiVVRGLTgiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi9QdXJjaGFzZU9yZGVyLXdpdGgtWE1MUEktanNwLXN5bnRheC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0V2l0aFhNTFBJV2l0aFhNTFN5bnRheCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveG1sIik7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbi5DSEFSU0VULCAiVVRGLTgiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi9QdXJjaGFzZU9yZGVyLXdpdGgtWE1MUEkteG1sLXN5bnRheC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aEhUTUxPdXRwdXQoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L2h0bWwiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi9odG1sLmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BXaXRoWEhUTUxPdXRwdXQoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3hodG1sIik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24veGh0bWwuanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhYTUxPdXRwdXQoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL3htbC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKFN0cmluZyBmaWxlUGF0aCwgSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMpIHsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBkZXNjID0gZ2V0Q29udGVudERlc2NyaXB0aW9uKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IElDb250ZW50RGVzY3JpcHRpb24gZm9yIGZpbGU6WyIgKyBmaWxlUGF0aCArICJdIiwgZGVzYyk7Ci0JCU9iamVjdFtdIGtleXMgPSBleHBlY3RlZFByb3BlcnRpZXMua2V5U2V0KCkudG9BcnJheSgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKLQkJCQotCQkJT2JqZWN0IGV4cGVjdGVkID0gZXhwZWN0ZWRQcm9wZXJ0aWVzLmdldChrZXlzW2ldKTsKLQkJCU9iamVjdCBkZXRlY3RlZCA9IGRlc2MuZ2V0UHJvcGVydHkoIChRdWFsaWZpZWROYW1lKWtleXNbaV0gKTsKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSB2YWx1ZSIsIGV4cGVjdGVkLCBkZXRlY3RlZCk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSBJQ29udGVudERlc2NyaXB0aW9uIGdldENvbnRlbnREZXNjcmlwdGlvbihTdHJpbmcgZmlsZVBhdGgpIHsKLQkJaWYoZmlsZVBhdGggPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQotCQlJbnB1dFN0cmVhbSBpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQkvLyB3b3Jrc3BhY2UgZmlsZQotCQkJSUZpbGUgd3NGaWxlID0gRmlsZUJ1ZmZlcnMuZ2V0V29ya3NwYWNlRmlsZUF0TG9jYXRpb24obmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJCWlmKHdzRmlsZSAhPSBudWxsICYmIHdzRmlsZS5leGlzdHMoKSkgewotCQkJCWluID0gd3NGaWxlLmdldENvbnRlbnRzKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBleHRlcm5hbCBmaWxlCi0JCQkJRmlsZSBzRmlsZSA9IEZpbGVCdWZmZXJzLmdldFN5c3RlbUZpbGVBdExvY2F0aW9uKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCQkJaWYoc0ZpbGUgIT1udWxsICYmIHNGaWxlLmV4aXN0cygpKQotCQkJCQlpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc0ZpbGUpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCQotCQlhc3NlcnROb3ROdWxsKGluKTsKLQkJCi0JCXJldHVybiBnZXRDb250ZW50RGVzY3JpcHRpb24oaW4pOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGNvbnRlbnQgZGVzY3JpcHRpb24gZm9yIGFuIGlucHV0IHN0cmVhbQotCSAqIEFzc3VtZXMgaXQncyBKU1AgY29udGVudC4KLQkgKiBDbG9zZXMgdGhlIGlucHV0IHN0cmVhbSB3aGVuIGZpbmlzaGVkLgotCSAqIAotCSAqIEBwYXJhbSBpbgotCSAqIEByZXR1cm4gdGhlIElDb250ZW50RGVzY3JpcHRpb24gZm9yIGluCi0JICovCi0JcHJpdmF0ZSBJQ29udGVudERlc2NyaXB0aW9uIGdldENvbnRlbnREZXNjcmlwdGlvbihJbnB1dFN0cmVhbSBpbikgewotCQkKLQkJaWYoaW4gPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBkZXNjID0gbnVsbDsKLQkJdHJ5IHsKLQkJCQotCQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlSlNQID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0Q29udGVudFR5cGUoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCQlkZXNjID0gY29udGVudFR5cGVKU1AuZ2V0RGVzY3JpcHRpb25Gb3IoaW4sIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKGluICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlpbi5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZGVzYzsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxMzY2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudGV4dC5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlV0aWxpdGllczsKLQotCi1wdWJsaWMgY2xhc3MgRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGUoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIlRlc3QgQ2FzZSBpbiBlcnJvci4gQ291bGQgbm90IGZpbmQgZmlsZSAiICsgZmlsZVBhdGgsIGZpbGUpOwotCQlJUGF0aCBsb2NhdGlvblBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmZlciA9IGJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobG9jYXRpb25QYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJfQotCQllbHNlIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCWJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCi0vLwkJZG9UZXN0Q3JlYXRlV2l0aEZhY2FkZShmaWxlLCBleHBlY3RlZERvY3VtZW50Q2xhc3MsIGV4cGVjdGVkUGFydGlvbmVyKTsKLQkJIAotCX0KLQotCi0KLS8qCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVDcmVhdGVFbXB0eSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yQ1NTLmNsYXNzKTsKLQl9Ci0KLSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGYxZmRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFVuemlwcGVkUHJvamVjdFRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZlRlc3RQcm9qZWN0OwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcubmV3dGVzdHMiOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvL1Rlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy50ZXN0cyIpOwotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IGdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy9jcmVhdGVQcm9qZWN0KHRlc3RQcm9qZWN0LCBuZXcgUGF0aChmaWxlUm9vdCksIG51bGwpOwotCQljcmVhdGVQcm9qZWN0KGZUZXN0UHJvamVjdCwgbnVsbCwgbnVsbCk7Ci0JCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShmVGVzdFByb2plY3QuZXhpc3RzKCkpOwotCQkvLwkJSUNvbnRhaW5lciBkb3Rlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigiZG90ZXN0RmlsZXMiKTsKLQkJLy8JCWFzc2VydFRydWUoZG90ZXN0RmlsZXMuZXhpc3RzKCkpOwotCQkvLwkJSVJlc291cmNlW10gYWxsRm9sZGVycyA9IGRvdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotIAotCXByaXZhdGUgc3RhdGljIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2V4YW1wbGVzL0NyZWF0aW5nSlNQRXhwcmVzc2lvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9leGFtcGxlcy9DcmVhdGluZ0pTUEV4cHJlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViMjE4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2V4YW1wbGVzL0NyZWF0aW5nSlNQRXhwcmVzc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZXhhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Ob2RlRm9ybWF0dGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIENyZWF0aW5nSlNQRXhwcmVzc2lvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBDcmVhdGluZ0pTUEV4cHJlc3Npb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ3JlYXRpbmdKU1BFeHByZXNzaW9uKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVKU1BFeHByZXNzaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBqc3BleHByZXNzaW9uID0gZG9jLmNyZWF0ZUVsZW1lbnQoImpzcDpleHByZXNzaW9uIik7Ci0JCSgoSURPTUVsZW1lbnQpIGpzcGV4cHJlc3Npb24pLnNldEpTUFRhZyh0cnVlKTsKLQkJZG9jLmFwcGVuZENoaWxkKGpzcGV4cHJlc3Npb24pOwotCQlUZXh0IGphdmFjb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKCIgLy8gc29tZSBqYXZhIGNvZGUgaGVyZTsgaWYgKHggPDApIHJldHVybiBuZXcgU3RyaW5nKFwiMFwiKSBlbHNlIHJldHVybiBuZXcgU3RyaW5nIChcIjFcIik7ICIpOwotCQlqc3BleHByZXNzaW9uLmFwcGVuZENoaWxkKGphdmFjb2RlKTsKLQotCi0JCVRleHQgY2RhdGFzZWN0aW9uID0gZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbigiIC8vIHNvbWUgY2RhdGEgamF2YSBjb2RlIGhlcmU7IGlmICh4IDwwKSByZXR1cm4gbmV3IFN0cmluZyhcIjBcIikgZWxzZSByZXR1cm4gbmV3IFN0cmluZyAoXCIxXCIpOyAiKTsKLQkJZG9jLmFwcGVuZENoaWxkKGNkYXRhc2VjdGlvbik7Ci0KLQkJLy8gZm9ybWF0J3Mgbm90IG5lZWRlZCwganVzdCBwcmV0dGllciAuLi4gbm90IHN1cmUgd2h5IAotCQkvLyBpdCB3b24ndCB3b3JrIHJpZ2h0IG9uIHdob2xlIGRvY3VtZW50LgotCQluZXcgTm9kZUZvcm1hdHRlcigpLmZvcm1hdChqc3BleHByZXNzaW9uKTsKLQkJbmV3IE5vZGVGb3JtYXR0ZXIoKS5mb3JtYXQoY2RhdGFzZWN0aW9uKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJkb2N1bWVudCB0ZXh0OiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZm9ybWF0L1Rlc3RDb250ZW50Rm9ybWF0dGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2Zvcm1hdC9UZXN0Q29udGVudEZvcm1hdHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODgwYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZm9ybWF0L1Rlc3RDb250ZW50Rm9ybWF0dGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5Gb3JtYXR0aW5nQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5Gb3JtYXR0aW5nQ29udGV4dFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXJFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUZvcm1hdHRpbmdDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5TdHJpbmdDb21wYXJlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLkhUTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudEZvcm1hdHRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gImpzcGZvcm1hdHRpbmciOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0KLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQlwcml2YXRlIElGb3JtYXR0aW5nQ29udGV4dCBmQ29udGV4dDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0KLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiKTsKLQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQl3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBub25pbnRlcmFjdGl2ZTsKLQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCAidHJ1ZSIpOwotCi0JCWlmICghUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSkuZXhpc3RzKCkpIHsKLQkJCVByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIFBST0pFQ1RfTkFNRSwgIi8iICsgUFJPSkVDVF9OQU1FKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSkuZXhpc3RzKCkpOwotCi0JCWZDb250ZXh0ID0gbmV3IEZvcm1hdHRpbmdDb250ZXh0KCk7Ci0JCWZDb250ZXh0LnNldFByb3BlcnR5KEZvcm1hdHRpbmdDb250ZXh0UHJvcGVydGllcy5DT05URVhUX0RPQ1VNRU5ULCBCb29sZWFuLnZhbHVlT2YodHJ1ZSkpOwotCi0JCWZTdHJpbmdDb21wYXJlVXRpbCA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgsIGJvb2xlYW4gcmVzZXRQcmVmZXJlbmNlcykgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBiZWZvcmVNb2RlbCA9IG51bGwsIGFmdGVyTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJYmVmb3JlTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYmVmb3JlUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYmVmb3JlUGF0aCwgYmVmb3JlTW9kZWwpOwotCi0JCQlhZnRlck1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGFmdGVyUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYWZ0ZXJQYXRoLCBhZnRlck1vZGVsKTsKLQotCQkJaWYgKHJlc2V0UHJlZmVyZW5jZXMpIHsKLQkJCQlyZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCk7Ci0JCQl9Ci0KLQkJCVNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKTsKLQkJCUlDb250ZW50Rm9ybWF0dGVyRXh0ZW5zaW9uIGZvcm1hdHRlciA9IChJQ29udGVudEZvcm1hdHRlckV4dGVuc2lvbikgY29uZmlndXJhdGlvbi5nZXRDb250ZW50Rm9ybWF0dGVyKG51bGwpOwotCi0JCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBiZWZvcmVNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVJlZ2lvbiByZWdpb24gPSBuZXcgUmVnaW9uKDAsIGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJCWZDb250ZXh0LnNldFByb3BlcnR5KEZvcm1hdHRpbmdDb250ZXh0UHJvcGVydGllcy5DT05URVhUX1JFR0lPTiwgcmVnaW9uKTsKLQkJCWZvcm1hdHRlci5mb3JtYXQoZG9jdW1lbnQsIGZDb250ZXh0KTsKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZvcm1hdHRlZEJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYmVmb3JlTW9kZWwuc2F2ZShmb3JtYXR0ZWRCeXRlcyk7IC8vICJiZWZvcmVNb2RlbCIgc2hvdWxkIG5vdyBiZQotCQkJLy8gYWZ0ZXIgdGhlIGZvcm1hdHRlcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGFmdGVyQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJU3RyaW5nIGFjdHVhbENvbnRlbnRzID0gbmV3IFN0cmluZyhmb3JtYXR0ZWRCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJGb3JtYXR0ZWQgZG9jdW1lbnQgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZC5cbkV4cGVjdGVkIENvbnRlbnRzOlxuIiArIGV4cGVjdGVkQ29udGVudHMgKyAiXG5BY3R1YWwgQ29udGVudHM6XG4iICsgYWN0dWFsQ29udGVudHMsIGZTdHJpbmdDb21wYXJlVXRpbC5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkQ29udGVudHMsIGFjdHVhbENvbnRlbnRzKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkKLQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChhZnRlck1vZGVsICE9IG51bGwpCi0JCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdEZvcm1hdFByb2Nlc3NvckNTUykKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KGZpbmFsIFN0cmluZyBmaWxlbmFtZSkgewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVuYW1lKSk7Ci0JCWFzc2VydFRydWUoInVuYWJsZSB0byBmaW5kIGZpbGU6ICIgKyBmaWxlbmFtZSwgZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCWNlLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpbykgewotCQkJaW8ucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCkgewotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEhUTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmZXJlbmNlcy5zZXRUb0RlZmF1bHQoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMpOwotCQlwcmVmZXJlbmNlcy5zZXRUb0RlZmF1bHQoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JCXByZWZlcmVuY2VzLnNldFRvRGVmYXVsdChIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQkJcHJlZmVyZW5jZXMuc2V0VG9EZWZhdWx0KEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUpOwotCQlwcmVmZXJlbmNlcy5zZXRUb0RlZmF1bHQoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0QnVnMTAyNDk1KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGJlZm9yZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1LmpzcCI7Ci0JCVN0cmluZyBhZnRlclBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1LWZtdC5qc3AiOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0QnVnMTAyNDk1XzEoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgYmVmb3JlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMS5qc3AiOwotCQlTdHJpbmcgYWZ0ZXJQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8xLWZtdC5qc3AiOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0QnVnMTAyNDk1XzIoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgYmVmb3JlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMi5qc3AiOwotCQlTdHJpbmcgYWZ0ZXJQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLWZtdC5qc3AiOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0QnVnMTAyNDk1XzMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgYmVmb3JlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMy5qc3AiOwotCQlTdHJpbmcgYWZ0ZXJQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLWZtdC5qc3AiOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0QnVnMTAyNDk1XzQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgYmVmb3JlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfNC5qc3AiOwotCQlTdHJpbmcgYWZ0ZXJQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LWZtdC5qc3AiOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ4OTk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbHNGcm9tRmlsZXMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MRG9jdW1lbnQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vbkV4aXN0ZW50RG9jdW1lbnQoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUxNb2RlbCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlTW9kZWxXaXRoTm9uRXhpc3RJRmlsZSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEpTUCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3Rub25leGlzdGVudC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50SlNQRG9jdW1lbnQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vbkV4aXN0ZW50RG9jdW1lbnQoInRlc3RmaWxlcy9qc3AvdGVzdG5vbmV4aXN0ZW50LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRKU1BNb2RlbCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlTW9kZWxXaXRoTm9uRXhpc3RJRmlsZSgidGVzdGZpbGVzL2pzcC90ZXN0bm9uZXhpc3RlbnQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZURvY3VtZW50Q2FzZVhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHlEb2N1bWVudCgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZURvY3VtZW50Q2FzZUpTUCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHlEb2N1bWVudCgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcGxleENhc2UoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWxvYWQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdFJlbG9hZCgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aFhNTE91dHB1dCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0UmVsb2FkKCJ0ZXN0ZmlsZXMvanNwL2pzcC14bWwtb3V0cHV0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUxUcmFuc2l0aW9uYWwxKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94aHRtbC90ZXN0eC5odG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUxUcmFuc2l0aW9uYWwyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94aHRtbC90ZXN0eC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MVHJhbnNpdGlvbmFsMygpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveGh0bWwvdGVzdHgueGh0bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MVHJhbnNpdGlvbmFsMSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvaHRtbC90ZXN0aC5odG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTFRyYW5zaXRpb25hbDIoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2h0bWwvdGVzdGguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCS8qCi0JICogVE9ETzogdGhlc2UgdGVzdCBmaWxlcyBhcmUgbWlzc2luZywgZm9yIHNvbWUgcmVhc29uIHdoZW4gcnVubmluZyBvbgotCSAqIGJ1aWxkIG1hY2hpbmUgLi4uIG5lZWQgdG8gcmUtY29uc3RydWN0IHB1YmxpYyB2b2lkIHRlc3ROZWFyRW1wdHlKU1AoKQotCSAqIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgKiBkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL2pzcC9uZWFyRW1wdHkuanNwIiwKLQkgKiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7IH0KLQkgKiAKLQkgKiBwdWJsaWMgdm9pZCB0ZXN0TmVhckVtcHR5WE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywKLQkgKiBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JICogZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy94bWwvbmVhckVtcHR5LnhtbCIsCi0JICogQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOyB9Ci0JICogCi0JICogcHVibGljIHZvaWQgdGVzdE5lYXJFbXB0eUhUTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLAotCSAqIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgKiBkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL2h0bWwvbmVhckVtcHR5Lmh0bWwiLAotCSAqIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7IH0KLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Tm90RW1wdHkoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvVGVzdENyZWF0ZShmaWxlUGF0aCwgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBleHBlY3RlZFBhcnRpb25lcik7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnRzIHdlcmUgbnVsbCIsIGNvbnRlbnRzKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgd2VyZSBlbXB0eSIsIGNvbnRlbnRzLmxlbmd0aCgpID4gMCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Tm90RW1wdHlEb2N1bWVudChTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJfQotCQllbHNlIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnRzIHdlcmUgbnVsbCIsIGNvbnRlbnRzKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgd2VyZSBlbXB0eSIsIGNvbnRlbnRzLmxlbmd0aCgpID4gMCk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Tm9uRXhpc3RlbnREb2N1bWVudChTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJYm9vbGVhbiBleHBlY3RlZEV4Y2VwdGlvbkNhdWdodCA9IGZhbHNlOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWV4cGVjdGVkRXhjZXB0aW9uQ2F1Z2h0ID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChleHBlY3RlZEV4Y2VwdGlvbkNhdWdodCkgewotCQkJZG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQkJCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb250ZW50cyB3ZXJlIG51bGwiLCBjb250ZW50cyk7Ci0JCQlhc3NlcnRUcnVlKCJjb250ZW50cyB3ZXJlICpub3QqIGVtcHR5IGFzIGV4cGVjdGVkIiwgY29udGVudHMubGVuZ3RoKCkgPT0gMCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJGaWxlTm90Rm91bmQgZXhjZXB0aW9uIHdhcyAqbm90KiB0aHJvd24gYXMgZXhwZWN0ZWQiLCBmYWxzZSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKiBAcGFyYW0gY2xhc3MxCi0JICogQHBhcmFtIGNsYXNzMgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFJlc291cmNlSW5Vc2UKLQkgKiBAdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cwotCSAqLwotCXByaXZhdGUgdm9pZCBkb1Rlc3RSZWxvYWQoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCQl0cnkgewotCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCi0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWluU3RyZWFtID0gZmlsZS5nZXRDb250ZW50cygpOwotCQkJCW1vZGVsLnJlbG9hZChpblN0cmVhbSk7Ci0JCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudFJlbG9hZGVkID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJLy8gbm90ZTogTk9UIHNhbWUgaW5zdGFuY2Ugb2YgZG9jdW1lbnQKLQkJCQkvLyBGSVhNRTogdGhpcyB0ZXN0IGhhcyB0byBiZSBjaGFuZ2VkIGJhY2ssIG9uY2UgdGhlIHJlbG9hZAotCQkJCS8vIEFQSSBpcwotCQkJCS8vIGZpeGVkIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQgZG9jdW1lbnQuCi0JCQkJLy8gYXNzZXJ0RmFsc2UoZG9jdW1lbnQgPT0gZG9jdW1lbnRSZWxvYWRlZCk7Ci0JCQkJYXNzZXJ0VHJ1ZShkb2N1bWVudCA9PSBkb2N1bWVudFJlbG9hZGVkKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmIChpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBkb1Rlc3RDcmVhdGUoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQkvLyBmaWxlIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdChmaWxlLCB0cnVlKTsKLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0KLQkJCXRlc3RDbG9uZShtb2RlbCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JCXJldHVybiBjb250ZW50czsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdENsb25lKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gZG9jdW1lbnQ7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBub3RpZmllci5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaW5pdGlhbCBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCBtb2RlbFF1ZXJ5QWRhcHRlcik7Ci0JCQotCQlJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsID0gc3RydWN0dXJlZE1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCUlET01Eb2N1bWVudCBuZXdEb2N1bWVudCA9ICgoSURPTU1vZGVsKSBuZXdNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJSU5vZGVOb3RpZmllciBuZXdOb3RpZmllciA9IG5ld0RvY3VtZW50OwotCQlNb2RlbFF1ZXJ5QWRhcHRlciByZXN1bHQgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIG5ld05vdGlmaWVyLmdldEFkYXB0ZXJGb3IoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJuZXdJbnN0YW5jZSBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCByZXN1bHQpOwotCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBkb1Rlc3RDcmVhdGVNb2RlbFdpdGhOb25FeGlzdElGaWxlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJLy8gZmlsZSB3aWxsIGJlIG51bGwgaWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGV4aXN0Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgZmFsc2UpOwotCQl0cnkgewotCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JCXJldHVybiBjb250ZW50czsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWxxdWVyeS9Nb2RlbFF1ZXJ5VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL21vZGVscXVlcnkvTW9kZWxRdWVyeVRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2Y4YWEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWxxdWVyeS9Nb2RlbFF1ZXJ5VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWxxdWVyeTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwuSlNQVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5DTURvY3VtZW50TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBNb2RlbFF1ZXJ5VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIHRlc3RTaGlwcGVkRFRETG9va3VwID0gZmFsc2U7Ci0KLQkvLyBPdXIgU3RydWN0dXJlZCBNb2RlbCwgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBhbiBYTUxNb2RlbCAob3Igc3ViY2xhc3MpCi0JcHJvdGVjdGVkIElET01Nb2RlbCBmTW9kZWwgPSBudWxsOwotCi0JcHJvdGVjdGVkIE1vZGVsUXVlcnkgZk1vZGVsUXVlcnkgPSBudWxsOwotCi0JcHVibGljIE1vZGVsUXVlcnlUZXN0ZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShNb2RlbFF1ZXJ5VGVzdGVyLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQlpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09IDApIHsKLQkJCXJ1bkFsbCgpOwotCQl9Ci0JCWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkJCVN0cmluZyBtZXRob2RUb1J1biA9IGFyZ3NbMF0udHJpbSgpOwotCQkJcnVuT25lKG1ldGhvZFRvUnVuKTsKLQkJfQotCi0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJ1bkFsbCgpIHsKLQkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuT25lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCVRlc3RDYXNlIHRlc3QgPSBuZXcgTW9kZWxRdWVyeVRlc3RlcihtZXRob2ROYW1lKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3QodGVzdCk7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bih0ZXN0U3VpdGUpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhbiBlbXB0eSBIVE1MIG1vZGVsCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXBIVE1MKCkgewotCQlmTW9kZWwgPSAoSURPTU1vZGVsKSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlpbml0VmFycygpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhbiBlbXB0eSBYTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcFhNTCgpIHsKLQkJZk1vZGVsID0gKElET01Nb2RlbCkgY3JlYXRlTW9kZWwoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWluaXRWYXJzKCk7Ci0JfQotCi0KLQkvKioKLQkgKiBJbml0aWFsaXplIGxvY2FsIGZpZWxkcyBmb3IgdGhpcyB0ZXN0Ci0JICovCi0JcHJvdGVjdGVkIHZvaWQgaW5pdFZhcnMoKSB7Ci0JCWZNb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShmTW9kZWwuZ2V0RG9jdW1lbnQoKSk7Ci0KLQotCX0KLQotCS8qKgotCSAqIFRlc3QgdGhlIEhUTUwgQk9EWSBFbGVtZW50IGZvciB0aGUgImJnY29sb3IiIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCb2R5RWxlbWVudCgpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjxib2R5IGJnY29sb3I9XCIjZmZmZmZmXCI+PGZvcm0gbWV0aG9kPVwicG9zdFwiPjwvZm9ybT48L2JvZHk+PC9odG1sPiIpOyAvLyBzZXQKLQkJLy8gdGV4dAotCi0JCS8vIFRFU1QgZ2V0dGluZyBhIENNRWxlbWVudERlY2xhcmF0aW9uCi0JCUVsZW1lbnQgYm9keUVsZW1lbnQgPSAoRWxlbWVudCkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oNyk7IC8vIG5vZGUgYXQKLQkJLy8gb2Zmc2V0Ny0tc2hvdWxkCi0JCS8vIGJlCi0JCS8vIDxib2R5PgotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBib2R5RGVjbCA9IGZNb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGJvZHlFbGVtZW50KTsKLQotCQlpbnQgY29udGVudFR5cGUgPSBib2R5RGVjbC5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJDTUVsZW1lbnREZWNsYXJhdGlvbiBDT05URU5UIFRZUEUgSU5DT1JSRUNUIEZPUiBCT0RZIiwgKGNvbnRlbnRUeXBlID09IENNRWxlbWVudERlY2xhcmF0aW9uLk1JWEVEKSk7Ci0KLQkJLy8gZ2V0IHBlcm1pc3NpYmxlIGF0dHJzCi0JCUNNTmFtZWROb2RlTWFwIG1hcCA9IGJvZHlEZWNsLmdldEF0dHJpYnV0ZXMoKTsKLQkJYXNzZXJ0VHJ1ZSgiQVRUUklCVVRFUyBGUk9NIEVMRU1FTlQgREVDTEFSQVRJT04gPT0gTlVMTCIsIChtYXAgIT0gbnVsbCkpOwotCQlWZWN0b3IgYWxsb3dlZCA9IG5ldyBWZWN0b3IoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXAuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBub2RlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIG1hcC5pdGVtKGkpOwotCQkJU3RyaW5nIG5hbWUgPSBub2RlLmdldE5vZGVOYW1lKCk7Ci0JCQlhbGxvd2VkLmFkZChuYW1lKTsKLQkJCWlmIChuYW1lLmVxdWFsc0lnbm9yZUNhc2UoImJnY29sb3IiKSkgewotCQkJCWFzc2VydFRydWUoIkdPVCBJTkNPUlJFQ1QgQVRUUklCVVRFIE5PREUgVFlQRSIsIChub2RlLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkFUVFJJQlVURV9ERUNMQVJBVElPTikpOwotCi0JCQkJQ01EYXRhVHlwZSBhdHRyVHlwZSA9IG5vZGUuZ2V0QXR0clR5cGUoKTsKLQkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImF0dHJpYnV0ZSB0eXBlID4gIiArIGF0dHJUeXBlKTsKLQkJCQlhc3NlcnRUcnVlKCJDT1VMRCBOT1QgR0VUIEFUVFJJQlVURSBUWVBFIiwgKGF0dHJUeXBlICE9IG51bGwpKTsKLQkJCQlhc3NlcnRUcnVlKCJDT1VMRE4nVCBHRVQgSU1QTElFRCBWQUxVRSBLSU5EIiwgKGF0dHJUeXBlLmdldEltcGxpZWRWYWx1ZUtpbmQoKSA9PSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfTk9ORSkpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0aGUgSFRNTCBIVE1MIEVsZW1lbnQgZm9yIGl0cyBkZWNsYXJlZCBjaGlsZHJlbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RIdG1sQ2hpbGRyZW4oKSB7Ci0JCXNldFVwSFRNTCgpOwotCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8aHRtbD48L2h0bWw+Iik7IC8vIHNldCB0ZXh0Ci0JCUVsZW1lbnQgaHRtbEVsZW1lbnQgPSBmTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gaHRtbERlY2wgPSBmTW9kZWxRdWVyeS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbihodG1sRWxlbWVudCk7Ci0KLQkJLy8gSFRNTCdzIGNoaWxkcmVuIGFyZSB3aXRoaW4gYSBncm91cAotCQlDTUNvbnRlbnQgY29udGVudHMgPSBodG1sRGVjbC5nZXRDb250ZW50KCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlzIG5vdCBhIGdyb3VwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCi0JCUNNR3JvdXAgZ3JvdXAgPSAoQ01Hcm91cCkgY29udGVudHM7Ci0JCWludCBvcGVyYXRvciA9IGdyb3VwLmdldE9wZXJhdG9yKCk7Ci0JCUNNTm9kZUxpc3QgY2hpbGRMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotCQlpbnQgbWF4ID0gY29udGVudHMuZ2V0TWF4T2NjdXIoKTsKLQkJaW50IG1pbiA9IGNvbnRlbnRzLmdldE1pbk9jY3VyKCk7Ci0KLQkJLy8gdGhlIGdyb3VwIHNob3VsZCBiZSBhbGxvd2VkIG9uY2UsIHdpdGggYSBzZXF1ZW5jZSB3aG9zZSBmaXJzdCBlbnRyeQotCQkvLyBpcyB0aGUgZGVjbGFyYXRpb24gZm9yIEhFQUQKLQkJYXNzZXJ0VHJ1ZSgib2NjdXJyYW5jZSBvZiBncm91cCIsIG1pbiA9PSAxICYmIG1heCA9PSAxKTsKLQkJYXNzZXJ0VHJ1ZSgicmVsYXRpb25zaGlwIGluIGdyb3VwIiwgb3BlcmF0b3IgPT0gQ01Hcm91cC5TRVFVRU5DRSk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQlhc3NlcnRUcnVlKCJjaGlsZCBvcmRlciAoSEVBRCBmaXJzdCkiLCBjaGlsZExpc3QuaXRlbSgwKS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkhFQUQpKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMSIsIGNoaWxkTGlzdC5pdGVtKDEpLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQKTsKLQkJLy8gVGhlIHNlY29uZCBjaGlsZCBzaG91bGQgYmUgYSBncm91cCBhcyB3ZWxsLCBjb250YWluaW5nIEJPRFkgYW5kCi0JCS8vIEZSQU1FU0VUIHdpdGggYW4KLQkJLy8gb3BlcmF0b3Igb2YgQ01Hcm91cC5DSE9JQ0UKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBkZXNjcmlwdG9yIHR5cGUsIHBvc2l0aW9uIDEgLSByZWxhdGlvbnNoaXAgb2YgZ3JvdXAiLCAoKENNR3JvdXApIGNoaWxkTGlzdC5pdGVtKDEpKS5nZXRPcGVyYXRvcigpID09IENNR3JvdXAuQ0hPSUNFKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybU1ldGhvZEF0dHIoKSB7Ci0JCXNldFVwSFRNTCgpOwotCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8aHRtbD48Ym9keSBiZ2NvbG9yPVwiI2ZmZmZmZlwiPjxmb3JtIG1ldGhvZD1cInBvc3RcIj48L2Zvcm0+PC9ib2R5PjwvaHRtbD4iKTsgLy8gc2V0Ci0JCS8vIHRleHQKLQotCQkvLyBURVNUIEdFVFRJTkcgQSBDTUF0dHJpYnV0ZURlY2xhcmF0b2luCi0JCUVsZW1lbnQgZm9ybUVsZW1lbnQgPSAoRWxlbWVudCkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oMzEpOyAvLyA8Zm9ybT4KLQkJQXR0ciBhdHRyTm9kZSA9IGZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9NRVRIT0QpOwotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG1ldGhvZEF0dHJEZWNsID0gZk1vZGVsUXVlcnkuZ2V0Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbihhdHRyTm9kZSk7Ci0JCWFzc2VydFRydWUoIkNvbnRlbnQgTW9kZWwgbWlzc2luZyB0aGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGZvciBcIm1ldGhvZFwiIiwgbWV0aG9kQXR0ckRlY2wgIT0gbnVsbCk7Ci0KLQkJTGlzdCB2YWx1ZXMgPSBnZXRWYWxpZFN0cmluZ3MoZm9ybUVsZW1lbnQsIG1ldGhvZEF0dHJEZWNsKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHZhbHVlcyBmb3IgYXR0cmlidXRlIFwibWV0aG9kXCIiLCAodmFsdWVzLnNpemUoKSA9PSAyKSk7Ci0JCWFzc2VydFRydWUoImRlZmF1bHQgdmFsdWUgZm9yIGF0dHJpYnV0ZSBcIm1ldGhvZFwiIGlzIHdyb25nIiwgKG1ldGhvZEF0dHJEZWNsLmdldEF0dHJUeXBlKCkuZ2V0SW1wbGllZFZhbHVlKCkuZXF1YWxzSWdub3JlQ2FzZSgiZ2V0IikpKTsKLQl9Ci0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgYSBEVEQgY2FuIGJlIGxvYWRlZCBmcm9tIGEgc3lzdGVtCi0JICogcmVmZXJlbmNlLgotCSAqIAotCSAqIE5vdGU6IE1heSByZXF1aXJlIGEgZnVuY3Rpb25pbmcgbmV0d29yayBjb25uZWN0aW9uIGZvciB0aGUgcmVmZXJlbmNlcwotCSAqIHRvIGJlIHJlc29sdmVkIHByb3Blcmx5LgotCSAqIAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RFRETG9hZEZyb21TeXN0ZW1JRF8xKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHRlc3RTaGlwcGVkRFRETG9va3VwKSB7Ci0JCQlzZXRVcFhNTCgpOwotCQkJVVJMIGluc3RhbGxhdGlvblBhdGggPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQVUlUZXN0c1BsdWdpbi5JRCkuZ2V0RW50cnkoIi8iKTsKLQkJCVN0cmluZyBkaXNrTG9jYXRpb24gPSBudWxsOwotCQkJZGlza0xvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsYXRpb25QYXRoKS50b0V4dGVybmFsRm9ybSgpOwotCi0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gcmVzb2x2ZSBwbHVnaW4gaW5zdGFsbCBwYXRoIiwgZGlza0xvY2F0aW9uICE9IG51bGwpOwotCQkJU3RyaW5nIGNvbnRlbnQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48IURPQ1RZUEUgaHRtbCBTWVNURU0gIiArIGRpc2tMb2NhdGlvbiArICJUZXN0RmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkXCIiICsgIj48aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiB4bWxuczp3bWw9XCJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbFwiPjwvaHRtbD4iOwotCQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50KTsKLQkJCUNNRG9jdW1lbnRNYW5hZ2VyIGRvY3VtZW50TWFuYWdhZXIgPSBmTW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwgZmFsc2UpOwotCQkJZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELCB0cnVlKTsKLQotCQkJTm9kZSBkb21Ob2RlID0gKE5vZGUpIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnQubGVuZ3RoKCkgLSAyKTsKLQkJCUNNTm9kZSBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKGRvbU5vZGUpOwotCQkJYXNzZXJ0VHJ1ZSgid21sMjAuZHRkIGZhaWxlZCB0byBsb2FkIiwgbm9kZSAhPSBudWxsICYmIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJodG1sIikpOwotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgYSBEVEQsIHRoZSBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsIG9uZSwgY2FuCi0JICogYmUgbG9hZGVkIGZyb20gYSBzeXN0ZW0gcmVmZXJlbmNlLgotCSAqIAotCSAqIE5vdGU6IE1heSByZXF1aXJlIGEgZnVuY3Rpb25pbmcgbmV0d29yayBjb25uZWN0aW9uIGZvciB0aGUgcmVmZXJlbmNlcwotCSAqIHRvIGJlIHJlc29sdmVkIHByb3Blcmx5LgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERURExvYWRGcm9tU3lzdGVtSURfMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmICh0ZXN0U2hpcHBlZERURExvb2t1cCkgewotCQkJVVJMIGluc3RhbGxhdGlvblBhdGggPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQVUlUZXN0c1BsdWdpbi5JRCkuZ2V0RW50cnkoIi8iKTsKLQkJCVN0cmluZyBkaXNrTG9jYXRpb24gPSBudWxsOwotCi0JCQlkaXNrTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxhdGlvblBhdGgpLnRvRXh0ZXJuYWxGb3JtKCk7Ci0KLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byByZXNvbHZlIHBsdWdpbiBpbnN0YWxsIHBhdGgiLCBkaXNrTG9jYXRpb24gIT0gbnVsbCk7Ci0JCQlzZXRVcFhNTCgpOwotCQkJU3RyaW5nIGNvbnRlbnQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz48IURPQ1RZUEUgaHRtbCBTWVNURU0gIiArIGRpc2tMb2NhdGlvbiArICJ0ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGRcIiIgKyAiPjxodG1sPjwvaHRtbD4iOwotCQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50KTsKLQotCQkJQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2FlciA9IGZNb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBmYWxzZSk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQsIHRydWUpOwotCi0JCQkvLyBzZWUgZGVmZWN0IDI4MjQyOQotCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gaHRtbERlY2wgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pIGZNb2RlbFF1ZXJ5LmdldENNTm9kZSgoTm9kZSkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oY29udGVudC5sZW5ndGgoKSAtIDIpKTsKLQkJCWFzc2VydFRydWUoInhodG1sMS10cmFuc2l0aW9uYWwuZHRkIG5vdCBsb2FkZWQiLCBodG1sRGVjbCAhPSBudWxsKTsKLQotCQkJLy8gSFRNTCdzIGNoaWxkcmVuIGFyZSB3aXRoaW4gYSBncm91cAotCQkJQ01Db250ZW50IGNvbnRlbnRzID0gaHRtbERlY2wuZ2V0Q29udGVudCgpOwotCi0JCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaXMgbm90IGEgZ3JvdXAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0KLQkJCUNNR3JvdXAgZ3JvdXAgPSAoQ01Hcm91cCkgY29udGVudHM7Ci0JCQlpbnQgb3BlcmF0b3IgPSBncm91cC5nZXRPcGVyYXRvcigpOwotCQkJQ01Ob2RlTGlzdCBjaGlsZExpc3QgPSBncm91cC5nZXRDaGlsZE5vZGVzKCk7Ci0JCQlpbnQgbWF4ID0gY29udGVudHMuZ2V0TWF4T2NjdXIoKTsKLQkJCWludCBtaW4gPSBjb250ZW50cy5nZXRNaW5PY2N1cigpOwotCi0JCQkvLyB0aGUgZ3JvdXAgc2hvdWxkIGJlIGFsbG93ZWQgb25jZSwgd2l0aCBhIHNlcXVlbmNlIHdob3NlIGZpcnN0Ci0JCQkvLyBlbnRyeQotCQkJLy8gaXMgdGhlIGRlY2xhcmF0aW9uIGZvciBIRUFECi0JCQlhc3NlcnRUcnVlKCJvY2N1cnJhbmNlIG9mIGdyb3VwIiwgbWluID09IDEgJiYgbWF4ID09IDEpOwotCQkJYXNzZXJ0VHJ1ZSgicmVsYXRpb25zaGlwIGluIGdyb3VwIiwgb3BlcmF0b3IgPT0gQ01Hcm91cC5TRVFVRU5DRSk7Ci0JCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMCIsIGNvbnRlbnRzLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQKTsKLQkJCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChIRUFEIGZpcnN0KSIsIGNoaWxkTGlzdC5pdGVtKDApLmdldE5vZGVOYW1lKCkuZXF1YWxzKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IRUFELnRvTG93ZXJDYXNlKCkpKTsKLQkJCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChCT0RZIHNlY29uZCkiLCBjaGlsZExpc3QuaXRlbSgxKS5nZXROb2RlTmFtZSgpLmVxdWFscyhIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuQk9EWS50b0xvd2VyQ2FzZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBIHNob3J0IHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhlIERURCBmb3IgSlNQIDEuMiB0YWcgbGlicmFyaWVzIGNhbiBiZQotCSAqIGxvYWRlZCBmcm9tIGEgcHVibGljIHJlZmVyZW5jZSByZWdpc3RlcmVkIGluIHRoZSBYTUwgY2F0YWxvZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REVERMb2FkRnJvbVB1YmxpY0lEKCkgewotCQkvLyBObyBsb25nZXIgcHJvdmlkZWQgaW4gV1RQCi0JCS8vIFRPRE86IHByb3ZpZGUgRFREPwotCQkvLyBpZiAodGVzdFNoaXBwZWREVERMb29rdXApIHsKLQkJLy8gc2V0VXBYTUwoKTsKLQkJLy8gU3RyaW5nIGNvbnRlbnRzID0gIjwhRE9DVFlQRSB0YWdsaWIgUFVCTElDIFwiLS8vU3VuIE1pY3Jvc3lzdGVtcywKLQkJLy8gSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjIvL0VOXCI+Ci0JCS8vIDx0YWdsaWI+PHRhZz5mb288L3RhZz48L3RhZ2xpYj4iOwotCQkvLyBmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQkJLy8KLQkJLy8gQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2FlciA9Ci0JCS8vIGZNb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCS8vIGRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FTWU5DX0xPQUQsCi0JCS8vIGZhbHNlKTsKLQkJLy8gZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELAotCQkvLyB0cnVlKTsKLQkJLy8KLQkJLy8KLQkJLy8gLy8gdGFnbGliCi0JCS8vIENNTm9kZSBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKQotCQkvLyBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50cy5sZW5ndGgoKSAtIDIpKTsKLQkJLy8gYXNzZXJ0VHJ1ZSgid2ViLWpzcHRhZ2xpYnJhcnlfMV8yLmR0ZCBmYWlsZWQgdG8gbG9hZCB0aHJvdWdoCi0JCS8vIGNhdGFsb2ciLCBub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09Ci0JCS8vIENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OICYmCi0JCS8vIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0YWdsaWIiKSk7Ci0JCS8vCi0JCS8vIC8vIHRhZwotCQkvLyBub2RlID0gZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKQotCQkvLyBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50cy5sZW5ndGgoKSAtIDEyKSk7Ci0JCS8vIGFzc2VydFRydWUoIkNNRWxlbWVudERlY2xhcmF0aW9uIGZvciBcInRhZ1wiIGZyb20KLQkJLy8gd2ViLWpzcHRhZ2xpYnJhcnlfMV8yLmR0ZCBpcyBtaXNzaW5nIiwgbm9kZSAhPSBudWxsICYmCi0JCS8vIG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuRUxFTUVOVF9ERUNMQVJBVElPTiAmJgotCQkvLyBub2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgidGFnIikpOwotCQkvLyBDTUNvbnRlbnQgY29udGVudCA9ICgoQ01FbGVtZW50RGVjbGFyYXRpb24pIG5vZGUpLmdldENvbnRlbnQoKTsKLQkJLy8gYXNzZXJ0VHJ1ZSgib25seSBvbmUgb2NjdXJyZW5jZSBvZiBjaGlsZCBncm91cCBhbGxvd2VkIiwKLQkJLy8gY29udGVudC5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCAmJiBjb250ZW50LmdldE1heE9jY3VyKCkgPT0KLQkJLy8gMSk7Ci0JCS8vIH0KLQl9Ci0KLQotCi0JcHVibGljIHN0YXRpYyBJU3RydWN0dXJlZE1vZGVsIGNyZWF0ZU1vZGVsKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCS8vIGNyZWF0ZSBhbiBlbXB0eSBtb2RlbCB3aXRoIGl0cyBkZWZhdWx0IGZhY3RvcmllcwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGVJRCk7Ci0KLQkJLy8gYWRkIGVkaXRvciBhZGFwdGVyIGZhY3RvcmllcwotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGFkYXB0ZXJSZWdpc3RyeSA9IEpTUFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5KCk7Ci0JCUl0ZXJhdG9yIGFkYXB0ZXJMaXN0ID0gYWRhcHRlclJlZ2lzdHJ5LmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJLy8gQW5kIGFsbCB0aG9zZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHR5cGUgb2YgY29udGVudAotCQl3aGlsZSAoYWRhcHRlckxpc3QuaGFzTmV4dCgpKSB7Ci0JCQl0cnkgewotCQkJCUFkYXB0ZXJGYWN0b3J5UHJvdmlkZXIgcHJvdmlkZXIgPSAoQWRhcHRlckZhY3RvcnlQcm92aWRlcikgYWRhcHRlckxpc3QubmV4dCgpOwotCQkJCWlmIChwcm92aWRlci5pc0Zvcihtb2RlbC5nZXRNb2RlbEhhbmRsZXIoKSkpIHsKLQkJCQkJcHJvdmlkZXIuYWRkQWRhcHRlckZhY3Rvcmllcyhtb2RlbCk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBkZWNsYXJhdGlvbiBvbgotCSAqIHRoZSBnaXZlbiBlbGVtZW50LiBEZXJpdmVkIGZyb20gWE1MUHJvcGVydHlTb3VyY2UKLQkgKi8KLQlwcml2YXRlIExpc3QgZ2V0VmFsaWRTdHJpbmdzKEVsZW1lbnQgZWxlbWVudCwgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCkgewotCQlDTURhdGFUeXBlIHZhbHVlc0hlbHBlciA9IGF0dHJEZWNsLmdldEF0dHJUeXBlKCk7Ci0JCVZlY3RvciB2YWx1ZXMgPSBuZXcgVmVjdG9yKCk7Ci0KLQkJaWYgKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWVLaW5kKCkgPT0gQ01EYXRhVHlwZS5JTVBMSUVEX1ZBTFVFX0ZJWEVEICYmIHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSAhPSBudWxsKSB7Ci0JCQkvLyBGSVhFRCB2YWx1ZQotCQkJdmFsdWVzLmFkZCh2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gRU5VTUVSQVRFRCB2YWx1ZXMKLQkJCVN0cmluZ1tdIHZhbHVlU3RyaW5ncyA9IG51bGw7Ci0JCQkvLyBuZXcgd2F5Ci0JCQl2YWx1ZVN0cmluZ3MgPSBmTW9kZWxRdWVyeS5nZXRQb3NzaWJsZURhdGFUeXBlVmFsdWVzKGVsZW1lbnQsIGF0dHJEZWNsKTsKLQkJCWlmICh2YWx1ZVN0cmluZ3MgPT0gbnVsbCkKLQkJCQkvLyBvbGRlciB3YXkKLQkJCQl2YWx1ZVN0cmluZ3MgPSBhdHRyRGVjbC5nZXRBdHRyVHlwZSgpLmdldEVudW1lcmF0ZWRWYWx1ZXMoKTsKLQkJCWlmICh2YWx1ZVN0cmluZ3MgIT0gbnVsbCkgewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVTdHJpbmdzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXZhbHVlcy5hZGQodmFsdWVTdHJpbmdzW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWVLaW5kKCkgIT0gQ01EYXRhVHlwZS5JTVBMSUVEX1ZBTFVFX05PTkUgJiYgdmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCWlmICghdmFsdWVzLmNvbnRhaW5zKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSkpCi0JCQkJdmFsdWVzLmFkZCh2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkpOwotCQl9Ci0KLQkJcmV0dXJuIHZhbHVlczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0NvbG9yUmVnaW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmVjY2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4KLSAqIENyZWF0aW9uIGRhdGU6ICg3LzIxLzAwIDQ6MTQ6NDAgUE0pCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQ29sb3JSZWdpb25zIGV4dGVuZHMgamF2YS51dGlsLlZlY3RvciB7Ci0JLyoqCi0JICogRGVmYXVsdCA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0JLyoqCi0JICogQ29sb3JSZWdpb25zIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIENvbG9yUmVnaW9ucygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb2xvclJlZ2lvbnMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5IGludAotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoaW50IGluaXRpYWxDYXBhY2l0eSkgewotCQlzdXBlcihpbml0aWFsQ2FwYWNpdHkpOwotCX0KLQotCS8qKgotCSAqIENvbG9yUmVnaW9ucyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgaW50Ci0JICogQHBhcmFtIGNhcGFjaXR5SW5jcmVtZW50IGludAotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoaW50IGluaXRpYWxDYXBhY2l0eSwgaW50IGNhcGFjaXR5SW5jcmVtZW50KSB7Ci0JCXN1cGVyKGluaXRpYWxDYXBhY2l0eSwgY2FwYWNpdHlJbmNyZW1lbnQpOwotCX0KLQotCXB1YmxpYyBpbnRbXSBhc0ludEFycmF5KCkgewotCQl0cmltVG9TaXplKCk7Ci0JCWludCBhcnJheVNpemUgPSBlbGVtZW50RGF0YS5sZW5ndGg7Ci0JCWludFtdIHJlc3VsdHMgPSBuZXcgaW50W2FycmF5U2l6ZV07Ci0JCS8vCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspIHsKLQkJCXJlc3VsdHNbaV0gPSAoKEludGVnZXIpIGVsZW1lbnREYXRhW2ldKS5pbnRWYWx1ZSgpOwotCQl9Ci0JCS8vCi0JCXJldHVybiByZXN1bHRzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0RlYnVnRG9jdW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmZmZWVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotcHVibGljIGNsYXNzIERlYnVnRG9jdW1lbnQgewotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJaWYgKGRvY3VtZW50ID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRHVtcCBvZiBET00iKTsgLy8kTk9OLU5MUy0xJAotCi0JCWR1bXAoZG9jdW1lbnQsIFN5c3RlbS5vdXQpOwotCi0JCS8vCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIj0gPSA9ID0gPSA9Iik7IC8vJE5PTi1OTFMtMSQKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChEb2N1bWVudCBkb2N1bWVudCwgUHJpbnRTdHJlYW0gb3V0KSB7Ci0JCU5vZGUgbm9kZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJd2hpbGUgKG5vZGUgIT0gbnVsbCkgewotCQkJZHVtcChub2RlLCBvdXQpOwotCQkJbm9kZSA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSB0b3BOb2RlKSB7Ci0JCWR1bXAodG9wTm9kZSwgU3lzdGVtLm91dCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSB0b3BOb2RlLCBQcmludFN0cmVhbSBvdXQpIHsKLQkJaWYgKHRvcE5vZGUgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJLy8gcHJpbnQgb3V0IHRoaXMgbm9kZQotCQkvLwotCQlwcmludE5vZGUodG9wTm9kZSwgb3V0KTsKLQotCQkvLyBub3cgcHJpbnQgb3V0IGl0cyBjaGlsZHJlbgotCQkvL05vZGVMaXN0IG5vZGVzID0gdG9wTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCS8vaW50IGxlbiA9IG5vZGVzLmdldExlbmd0aCgpOwotCQkvL2ZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQotCQkvL05vZGUgbm9kZSA9IG5vZGVzLml0ZW0oaSk7Ci0JCS8vZHVtcChub2RlLCBvdXQpOwotCQkvL30KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnROb2RlKE5vZGUgdG9wTm9kZSkgewotCQlwcmludE5vZGUodG9wTm9kZSwgU3lzdGVtLm91dCk7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnROb2RlKE5vZGUgdG9wTm9kZSwgUHJpbnRTdHJlYW0gb3V0KSB7Ci0JCS8vIHByaW50IG91dCB0aGlzIG5vZGUKLQkJLy8KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA9ICgoSURPTU5vZGUpIHRvcE5vZGUpLmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gbGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA9ICgoSURPTU5vZGUpIHRvcE5vZGUpLmdldExhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJaWYgKChmaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA9PSBudWxsKSB8fCAobGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA9PSBudWxsKSkgewotCQkJLy8gbm8gdGV4dCB0byBvdXRwdXQKLQkJfSBlbHNlIHsKLQkJCWludCBzdGFydCA9IGZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uLmdldFN0YXJ0KCk7Ci0JCQlpbnQgZW5kID0gbGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbi5nZXRFbmQoKTsKLQotCQkJU3RyaW5nIG91dFN0cmluZyA9IHRvcE5vZGUudG9TdHJpbmcoKTsKLQkJCW91dFN0cmluZyA9IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCW91dC5wcmludGxuKCJbIiArIHN0YXJ0ICsgIiwgIiArIGVuZCArICJdIiArIG91dFN0cmluZyk7IC8vJE5PTi1OTFMtMyQvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQl9Ci0JCS8vIG5vdyBkbyBpdHMgY2hpbGRyZW4KLQkJTm9kZUxpc3Qgbm9kZXMgPSB0b3BOb2RlLmdldENoaWxkTm9kZXMoKTsKLQkJaW50IGxlbiA9IG5vZGVzLmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IG5vZGVzLml0ZW0oaSk7Ci0JCQlwcmludE5vZGUoY2hpbGROb2RlLCBvdXQpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgRGVidWdEb2N1bWVudCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5lclVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmVyVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYTBiZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmVyVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NSlNQUmVnaW9uQ29udGV4dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja01hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja1RhZ1BhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5Db3JlTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotLyoqCi0gKiBAYXV0aG9yIE5pdGluIERhaHlhYmhhaSA8bml0aW5kQHVzLmlibS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBTY2FubmVyVW5pdFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKElUZXh0UmVnaW9uTGlzdCByZWdpb25zLCBTdHJpbmdbXSBjb250ZXh0cywgU3RyaW5nW11bXSBlbWJlZGRlZENvbnRleHRzKSB7Ci0KLQkJaW50IGVtYmVkQ291bnQgPSAwOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IHJlZ2lvbnMuaXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKykgewotCQkJaWYgKCFpdGVyYXRvci5oYXNOZXh0KCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJSVRleHRSZWdpb24gcmVnaW9uID0gKElUZXh0UmVnaW9uKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQlhc3NlcnRFcXVhbHMoImNvbnRleHQgIiArIGkgKyAiIGluY29ycmVjdCIsIGNvbnRleHRzW2ldLCByZWdpb24uZ2V0VHlwZSgpKTsKLQkJCWlmIChyZWdpb24gaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikgewotCQkJCUlUZXh0UmVnaW9uQ29udGFpbmVyIGNvbnRhaW5lciA9IChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgcmVnaW9uOwotCQkJCWJvb2xlYW4gZW1iZWRkZWRSZXN1bHQgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KGNvbnRhaW5lciwgZW1iZWRkZWRDb250ZXh0c1tlbWJlZENvdW50XS5sZW5ndGgpICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoY29udGFpbmVyLmdldFJlZ2lvbnMoKSwgZW1iZWRkZWRDb250ZXh0c1tlbWJlZENvdW50XSk7Ci0JCQkJZW1iZWRDb3VudCsrOwotCQkJCWFzc2VydFRydWUoZW1iZWRkZWRSZXN1bHQpOwotCQkJfQotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja01vZGVsTGVuZ3RoKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIGludCBsZW5ndGgpIHsKLQkJcmV0dXJuIGNoZWNrTW9kZWxMZW5ndGgoZG9jdW1lbnQuZ2V0TGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLCBsZW5ndGgpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja01vZGVsTGVuZ3RoKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uLCBpbnQgbGVuZ3RoKSB7Ci0JCXJldHVybiByZWdpb24uZ2V0RW5kT2Zmc2V0KCkgPT0gbGVuZ3RoOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KElUZXh0UmVnaW9uQ29udGFpbmVyIHJlZ2lvbkNvbnRhaW5lciwgaW50IHNpemUpIHsKLQkJLy8geWVzLCB0aGlzIGxvb2tzIHNpbGx5LCBidXQgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIGZpbmQgdGhlIGV4YWN0Ci0JCS8vIGZhaWx1cmUgcG9pbnQKLQkJYXNzZXJ0RXF1YWxzKCJyZWdpb24gY291bnQiLCBzaXplLCByZWdpb25Db250YWluZXIuZ2V0TnVtYmVyT2ZSZWdpb25zKCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgcmVnaW9uQ29udGFpbmVycywgaW50W10gc2l6ZXMpIHsKLQkJaW50IGNvbnRhaW5lcnMgPSByZWdpb25Db250YWluZXJzLmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHMoImRpZmZlcmVudCBudW1iZXIgb2YgY29udGFpbmVycyIsIHNpemVzLmxlbmd0aCwgY29udGFpbmVycyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygiY29udGFpbmVyICIgKyBpICsgIiBpcyBkaWZmZXJlbnQiLCBzaXplc1tpXSwgcmVnaW9uQ29udGFpbmVycy5pdGVtKGkpLmdldE51bWJlck9mUmVnaW9ucygpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKElUZXh0UmVnaW9uTGlzdCByZWdpb25zLCBTdHJpbmdbXSBjb250ZXh0cykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25zLmdldChpKTsKLQkJCWFzc2VydEVxdWFscygicmVnaW9uIHR5cGUgIiArIGksIGNvbnRleHRzW2ldLCByZWdpb24uZ2V0VHlwZSgpKTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBsb2FkQ2hhcnMoSW5wdXRTdHJlYW0gaW5wdXQpIHsKLQotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJdHJ5IHsKLQkJCWludCBjID0gLTE7Ci0JCQl3aGlsZSAoKGMgPSBpbnB1dC5yZWFkKCkpID49IDApIHsKLQkJCQlpZiAoYyA+IDI1NSkKLQkJCQkJYnJlYWs7Ci0JCQkJcy5hcHBlbmQoKGNoYXIpIGMpOwotCQkJfQotCQkJaW5wdXQuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBzY2FubmluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogU3RhcnRzIHRoZSBhcHBsaWNhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgYW4gYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0KLQkJaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCA9PSAwKSB7Ci0JCQlydW5BbGwoKTsKLQkJfQotCQllbHNlIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7Ci0JCQlTdHJpbmcgbWV0aG9kVG9SdW4gPSBhcmdzWzBdLnRyaW0oKTsKLQkJCXJ1bk9uZShtZXRob2RUb1J1bik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCi0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuT25lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0KLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBTY2FubmVyVW5pdFRlc3RzKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCi0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFNjYW5uZXJVbml0VGVzdHMuY2xhc3MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKGludCBzdGFydE9mZnNldCwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmaXJzdERvY3VtZW50UmVnaW9uLCBTdHJpbmcgdGV4dCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGhvbGRSZWdpb24gPSBmaXJzdERvY3VtZW50UmVnaW9uOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBkb2VzIG5vdCBzdGFydCBhdCBleHBlY3RlZCBvZmZzZXQiLCBob2xkUmVnaW9uLmdldFN0YXJ0T2Zmc2V0KCkgPT0gc3RhcnRPZmZzZXQpOwotCQlpbnQgbGFzdEVuZCA9IDA7Ci0JCXdoaWxlIChob2xkUmVnaW9uICE9IG51bGwgJiYgaG9sZFJlZ2lvbi5nZXRFbmRPZmZzZXQoKSA+IDApIHsKLQkJCWFzc2VydFRydWUoInplcm8tbGVuZ3RoIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmb3VuZCIsIGhvbGRSZWdpb24uZ2V0U3RhcnRPZmZzZXQoKSA9PSBsYXN0RW5kKTsKLQkJCWFzc2VydFRydWUoIlRleHRSZWdpb25sZXNzIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmb3VuZCIsIGhvbGRSZWdpb24uZ2V0TnVtYmVyT2ZSZWdpb25zKCkgPiAwKTsKLQkJCUlUZXh0UmVnaW9uTGlzdCBsaXN0ID0gaG9sZFJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCQlpbnQgaW5kZXggPSAwOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbGlzdC5nZXQoaSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgidGV4dCByZWdpb24gc2VhbXMgZG9uJ3QgbWF0Y2giLCByZWdpb24uZ2V0U3RhcnQoKSA9PSBpbmRleCk7Ci0JCQkJaW5kZXggKz0gcmVnaW9uLmdldExlbmd0aCgpOwotCQkJfQotCQkJbGFzdEVuZCA9IGhvbGRSZWdpb24uZ2V0RW5kT2Zmc2V0KCk7Ci0JCQlob2xkUmVnaW9uID0gaG9sZFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQotCQlob2xkUmVnaW9uID0gZmlyc3REb2N1bWVudFJlZ2lvbjsKLQkJd2hpbGUgKGhvbGRSZWdpb24gIT0gbnVsbCAmJiBob2xkUmVnaW9uLmdldE5leHQoKSAhPSBudWxsKSB7Ci0JCQlob2xkUmVnaW9uID0gaG9sZFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQkJY2hlY2tNb2RlbExlbmd0aChob2xkUmVnaW9uLCB0ZXh0Lmxlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhpbnQgc3RhcnRPZmZzZXQsIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IGxpc3QsIFN0cmluZyB0ZXh0KSB7Ci0JCXZlcmlmeUxlbmd0aHMoc3RhcnRPZmZzZXQsIGxpc3QuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUxlbmd0aHMoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIHRleHQpIHsKLQkJdmVyaWZ5TGVuZ3RocygwLCBkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBTdHJpbmcgdGV4dCkgewotCQl2ZXJpZnlMZW5ndGhzKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLCB0ZXh0KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudCBmTW9kZWw7Ci0JcHJvdGVjdGVkIFN0cmluZyBpbnB1dDsKLQlwcml2YXRlIEJsb2NrVGFnUGFyc2VyIHBhcnNlcjsKLQlwcm90ZWN0ZWQgT2JqZWN0IHR5cGU7Ci0KLQlwdWJsaWMgU2Nhbm5lclVuaXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCi0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFwcGVuZFRhZ0Jsb2NrKFN0cmluZ0J1ZmZlciBidWZmZXIsIFN0cmluZyB0YWduYW1lLCBpbnQgbGVuZ3RoKSB7Ci0KLQkJYnVmZmVyLmFwcGVuZCgnPCcpOwotCQlidWZmZXIuYXBwZW5kKHRhZ25hbWUpOwotCQlidWZmZXIuYXBwZW5kKCc+Jyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCQlidWZmZXIuYXBwZW5kKCdfJyk7Ci0JCWJ1ZmZlci5hcHBlbmQoIjwvIik7Ci0JCWJ1ZmZlci5hcHBlbmQodGFnbmFtZSk7Ci0JCWJ1ZmZlci5hcHBlbmQoJz4nKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQotCQlzZXRVcFhNTChudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgc2V0VXBKU1AoU3RyaW5nIHRleHQpIHsKLQotCQlzZXR1cE1vZGVsKG5ldyBNb2RlbEhhbmRsZXJGb3JKU1AoKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic3R5bGUiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImRpc2FsbG93SlNQIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlLCBmYWxzZSkpOwotCi0JCS8qCi0JCSAqIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPHNjcmlwdD4KLQkJICogPCU9IGV4cHJlc3Npb24gJT4gPC9zY3JpcHQ+IDxhPiA8L2E+IDxmb286ZGlzYWxsb3dKU1A+IDwlPSAlPgotCQkgKiA8L2ZvbzpkaXNhbGxvd0pTUD4gPiIpOyBwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3Ci0JCSAqIEJsb2NrTWFya2VyKCJqc3A6ZGVjbGFyYXRpb24iLCBudWxsLAotCQkgKiBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOyBwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3Ci0JCSAqIEJsb2NrTWFya2VyKCJqc3A6ZXhwcmVzc2lvbiIsIG51bGwsCi0JCSAqIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7IHBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcKLQkJICogQmxvY2tNYXJrZXIoImpzcDpzY3JpcHRsZXQiLCBudWxsLAotCQkgKiBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkgKi8KLQkJaW5wdXQgPSB0ZXh0OwotCQlmTW9kZWwuc2V0KGlucHV0KTsKLQkJcmV0dXJuIGZNb2RlbC5nZXRSZWdpb25MaXN0KCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0dXBNb2RlbChJTW9kZWxIYW5kbGVyIGNvbnRlbnRUeXBlKSB7Ci0KLQkJZk1vZGVsID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGNvbnRlbnRUeXBlLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXRoaXMucGFyc2VyID0gKEJsb2NrVGFnUGFyc2VyKSBmTW9kZWwuZ2V0UGFyc2VyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHNldFVwWE1MKFN0cmluZyB0ZXh0KSB7Ci0KLQkJc2V0dXBNb2RlbChuZXcgTW9kZWxIYW5kbGVyRm9yWE1MKCkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzY3JpcHQiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInN0eWxlIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJkaXNhbGxvd0pTUCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgdHJ1ZSwgZmFsc2UpKTsKLQkJaW5wdXQgPSB0ZXh0OwotCQlmTW9kZWwuc2V0KGlucHV0KTsKLQkJcmV0dXJuIGZNb2RlbC5nZXRSZWdpb25MaXN0KCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXMoU3RyaW5nIGNvbnRlbnRUeXBlSUQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCS8vIHRoZSBpbnRlcmVzdGluZyBvZmZzZXRzIGFyZSBhcm91bmQgMTZrICgxNjM4NCkKLQkJLy8gZm9yIChpbnQgaSA9IDE2NTAwOyBpID4gMTYxMDA7IGktLSkgewotCQkvLyBmb3IgKGludCBpID0gMTcwMDA7IGkgPiAxNTAwMDsgaS0tKSB7Ci0JCWZvciAoaW50IGkgPSAxNjM4NCArIDI1OyBpID4gMTYzNjQgLSAyNTsgaS0tKSB7Ci0JCQlTdHJpbmdCdWZmZXIgdGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWRvY3VtZW50ID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoY29udGVudFR5cGVJRCk7Ci0JCQlhcHBlbmRUYWdCbG9jayh0ZXh0LCAic2NyaXB0IiwgaSk7Ci0JCQlTdHJpbmcgc3RyaW5nID0gdGV4dC50b1N0cmluZygpOwotCQkJdHJ5IHsKLQkJCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHN0cmluZyk7Ci0JCQkJdmVyaWZ5TGVuZ3Rocyhkb2N1bWVudCwgc3RyaW5nKTsKLQkJCQlhc3NlcnRUcnVlKCJ0b28gZmV3IGRvY3VtZW50IHJlZ2lvbnMgW3J1biB2YWx1ZSAiICsgaSArICJdICIsIG5ldyBDb3JlTm9kZUxpc3QoZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSkuZ2V0TGVuZ3RoKCkgPT0gMyk7Ci0JCQkJdmVyaWZ5TGVuZ3Rocyhkb2N1bWVudCwgc3RyaW5nKTsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0YXJ0VGFnID0gZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIG1pZGRsZUJsb2NrID0gc3RhcnRUYWcuZ2V0TmV4dCgpOwotCQkJCS8vIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZW5kVGFnID0gbWlkZGxlQmxvY2suZ2V0TmV4dCgpOwotCQkJCWFzc2VydFRydWUoIm5vdCBibG9jayB0ZXh0IGluIG1pZGRsZSIsIG1pZGRsZUJsb2NrLmdldEZpcnN0UmVnaW9uKCkuZ2V0VHlwZSgpID09IERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnROdWxsKCJleGNlcHRpb24gY2F1Z2h0IiArIGUsIGUpOwotCQkJfQotCQkJLy8gU3lzdGVtLmdjKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllc0ZvckhUTUwoKSB7Ci0JCXRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzKCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllc0ZvckpTUCgpIHsKLQkJdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXMoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdEJsb2NrVGFnKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAxLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrVGFnX0pTUCgpIHsKLQkJdGVzdEJsb2NrVGFnKHNldFVwSlNQKCJiZWdpbiA8c2NySVB0IHR5cGU9XCJwbDJcIj4gPC9zY3JpcCB0Pjwvc2NyaXB0cz48L3NjcmlwdHMgPC8vLzwhLSAtLS0+PC9zQ3JJUHQ+IGVuZCIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBibG9jayB0YWcgc2Nhbm5pbmcgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1RhZ19YTUwoKSB7Ci0KLQkJdGVzdEJsb2NrVGFnKHNldFVwWE1MKCJiZWdpbiA8c2NySVB0IHR5cGU9XCJwbDJcIj4gPC9zY3JpcCB0Pjwvc2NyaXB0cz48L3NjcmlwdHMgPC8vLzwhLSAtLS0+PC9zQ3JJUHQ+IGVuZCIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBibG9jayB0YWcgc2Nhbm5pbmcgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1RhZ1dpdGhKU1BFeHByZXNzaW9ucygpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8c2NyaXB0IHR5cGU9XCJwbDJcIj4gPCU9IFwiZXhwcmVzc2lvblwiJT4gPC9zY3JJUHQ+IDxhPjwvYT4gPGRpc2FsbG93SlNQPiA8JT0gXCJleHByZXNzaW9uXCIgJT4gPC9kaXNhbGxvd0pTUD4gZW5kIik7Ci0KLQkJLy8gT0xECi0JCS8vIGJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LAotCQkvLyAzLCAzLCAxLCAzLCAzLCAxLCAzLCAzLCAzLCAxfSk7Ci0JCS8vIE5FVwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwgMywgMywgMSwgMywgMywgMSwgMywgMSwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWludCBpID0gMDsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JCQkJCS8vIENPUlJFQ1QgQkVIQVZJT1IKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSkKLQkJCQkJLy8gT0xELCBCUk9LRU4gQkVIQVZJT1IKLQkJCQkJLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLAotCQkJCQkvLyBuZXcKLQkJCQkJLy8gU3RyaW5nW117Ci0JCQkJCS8vIFhNTFJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwKLQkJCQkJLy8gWE1MUmVnaW9uQ29udGV4dC5CTE9DS19URVhULAotCQkJCQkvLyBYTUxSZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMShJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAyfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMV9KU1AoKSB7Ci0JCXRlc3RCdWZmZXJVbmRlclJ1bl8xKHNldFVwSlNQKCJjb250ZW50IDx0YWcgYT1iLz48IS0tYyIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3IgYnVmZmVyIHVuZGVyLXJ1bnMgb24gYmxvY2sgc2Nhbm5pbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMV9YTUwoKSB7Ci0JCXRlc3RCdWZmZXJVbmRlclJ1bl8xKHNldFVwWE1MKCJjb250ZW50IDx0YWcgYT1iLz48IS0tYyIpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzIoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8yX0pTUCgpIHsKLQotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMihzZXRVcEpTUCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLSIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBmb3IgYnVmZmVyIHVuZGVyLXJ1bnMgb24gYmxvY2sgc2Nhbm5pbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMl9YTUwoKSB7Ci0KLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzIoc2V0VXBYTUwoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS0iKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RDREFUQShJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQV9KU1AoKSB7Ci0KLQkJdGVzdENEQVRBKHNldFVwSlNQKCJhIDwhW0NEQVRBWzw+ISE8ISE+PC8mJiYtLTwhLS1dXT4gYiIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBDREFUQSBzZWN0aW9uIHNjYW5uaW5nIGJldHdlZW4gY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDREFUQV9YTUwoKSB7Ci0KLQkJdGVzdENEQVRBKHNldFVwWE1MKCJhIDwhW0NEQVRBWzw+ISE8ISE+PC8mJiYtLTwhLS1dXT4gYiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMSgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIGNvbnRlbnRzXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDIoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWzwvc2NyaXB0Pl1dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AyYSgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbY29udGVudHM8L3NjcmlwdD5dXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMmIoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWzwvc2NyaXB0PmNvbnRlbnRzXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDMoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBW11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A0KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgXV0+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDUoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyBdXV0+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDYoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyBdXSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A3KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDgoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUwxKCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDIoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWzwvc2NyaXB0Pl1dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUwzKCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVtdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MNCgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw1KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgXV1dPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw2KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgXV0iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MNygpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbICIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw4KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsiKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBjb21tZW50cyBiZXR3ZWVuIFhNTCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX0pTUCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYSA8IS0tIC0tPjwhLS0tLT48JS0tIC0tJT4gYiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAzLCAyLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfVEVYVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBjb21tZW50cyBiZXR3ZWVuIEpTUCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX1hNTCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYSA8IS0tIC0tPjw8IS0tLS0+YiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBYTUwodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAzLCAxLCAyLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTn0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdENvbnRlbnQoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHNpbXBsZSBjb250ZW50IHNjYW5uaW5nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRKU1AoKSB7Ci0KLQkJdGVzdENvbnRlbnQoc2V0VXBKU1AoImhlbGxvIHdvcmxkIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50WE1MKCkgewotCi0JCXRlc3RDb250ZW50KHNldFVwWE1MKCJoZWxsbyB3b3JsZCIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERpcmVjdGl2ZUluVGFnQm9keSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPEJPRFkgPCVAIGluY2x1ZGUgZmlsZT1cImNvbW1vbkV2ZW50SGFuZGxlcnMuanNwZlwiICU+IGRpcj1cImx0clwiPiAiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBkb2N1bWVudFJlZ2lvbkxpc3QgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBkb2N1bWVudFJlZ2lvbkxpc3QsIHRleHQpOwotCi0JCWNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoZG9jdW1lbnRSZWdpb25MaXN0Lml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQlJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gY29sbCA9IChJVGV4dFJlZ2lvbkNvbGxlY3Rpb24pIGRvY3VtZW50UmVnaW9uTGlzdC5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMik7Ci0JCWNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoY29sbC5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ESVJFQ1RJVkVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RJUkVDVElWRV9DTE9TRX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX0xlYWRpbmcoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIkIFwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9sbGFyc2lnbl9TaW5nbGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIkXCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX1NpbmdsZVdpdGhTcGFjZXMoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIgJCBcIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMaW5Db250ZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICIke291dC5mb299IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCgwKSksIDMpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RFTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfRHF1b3RlKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSB0eXBlPVwiJHtvdXQuZm9vfVwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGVXaXRoU3BhY2VzKCkgewotCQkvLyBub3RlOiB3aGl0ZXNwYWNlIG9uIGVpdGhlciBzaWRlIHJldHVybnMgYSBXSElURV9TUEFDRSBjb250ZXh0Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCJfJHtvdXQuZm9vfV9cIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDcpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DTE9TRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfU3F1b3RlKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSB0eXBlPScke291dC5mb299Jy8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUERlY2xhcmF0aW9uKCkgewotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JSEgaW50IGZvbzsgJT5cIiBiYXo9XCJpbFwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgOX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ERUNMQVJBVElPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUERlY2xhcmF0aW9uSW5DREFUQSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPCFbQ0RBVEFbPCUhJT5dXT4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezN9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ERUNMQVJBVElPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUEV4cHJlc3Npb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JT0gXCJIZWxsbywgV29ybGRcIiU+XCIgYmF6PVwiaWxcIj4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDl9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUEV4cHJlc3Npb25JbkNEQVRBKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JT0lPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VYUFJFU1NJT05fT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRKU1BTY3JpcHRsZXQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImNvbnRlbnQgPGZvbyBiYXI9XCI8JSAgJT5cIiBiYXo9XCJpbFwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgOX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9TQ1JJUFRMRVRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFfX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRKU1BTY3JpcHRsZXRJbkNEQVRBKCkgewotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjwhW0NEQVRBWzwlJT5dXT4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezN9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9TQ1JJUFRMRVRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRUYWdJbkF0dHIoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgaHJlZj1cIjxqc3A6Z2V0UHJvcGVydHkvPlwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BfREhUTUxpbXBvcnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhPiA8P2ltcG9ydCB0eXBlPVwiZm9vXCI+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezMsIDEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9QSV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMsIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BfUEkoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImJlZ2luIDw/cGhwIGFzZGE7bHNnamFsZztsYXNqbGFqZ2xhanNsa2FqbGdhanNsamdhbGpnbGFqPz5lbmQiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNCwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0KLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9QSV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ09OVEVOVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQW1wZXJzYW5kSW5UYWdOYW1lSW5BdHRWYWx1ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgaHJlZj1cIjxhJmI+XCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs3LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50ICh0YWcpIiwgc2l6ZUNoZWNrKTsKLQkJLy9zaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDQpOwotCQkvL2Fzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IChicm9rZW4gZW1iZWRkZWQgdGFnKSIsIHNpemVDaGVjayk7Ci0KLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrICh0YWcpIiwgdHlwZUNoZWNrKTsKLQkJLy90eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuVU5ERUZJTkVEfSk7Ci0JCS8vYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChjb250ZW50KSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMsIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50SW5YTUxDb21tZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICJzPCEtLVxuPCUtLWMtLSU+XG4tLT5cbjxodG1sPlxuPGJvZHk+PHNjcmlwdD4gPCUtLWMtLSU+IDwvc2NyaXB0PlxuIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDUsIDEsIDMsIDEsIDMsIDMsIDMsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlpbnQgaXRlbSA9IDA7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfVEVYVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfQ0xPU0V9fSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLAotCQkJCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX19KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQ29tbWVudEF0U3RhcnRPZlhNTENvbW1lbnRBbmRCbG9ja1RhZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiczwhLS08JS0tYy0tJT5cbi0tPlxuPGh0bWw+XG48Ym9keT48c2NyaXB0PjwlLS1jLS0lPiA8L3NjcmlwdD5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxLCAzLCAxLCAzLCAzLCAyLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50aW5YTUxUYWcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gInM8YSA8JS0tYy0tJT4gYj1jLz5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA3LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0sbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpkaXJlY3RpdmUuKGluY2x1ZGV8cGFnZXx0YWdsaWIpIGFyZSByZWNvZ25pemVkIGFuZAotCSAqIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRGlyZWN0aXZlVGFncygpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPGpzcDpkaXJlY3RpdmUudGFnbGliPiA8anNwOmRpcmVjdGl2ZS5wYWdlIGE+IDxqc3A6ZGlyZWN0aXZlLmluY2x1ZGUgYT0+IDxqc3A6ZGlyZWN0aXZlLnBhZ2VzIGE9Yj4gZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDQsIDEsIDUsIDEsIDYsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ESVJFQ1RJVkVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDYpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRG9sbGFyc2lnbl9UcmFpbGluZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiAkXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUERvbGxhcnNpZ25fVHJhaWxpbmdJbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIm5ubiQ8YSB0eXBlPVwiICRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGNvbnRlbnQpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoY29udGVudCkiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgSlNQIGNvZGUgc2VjdGlvbnMgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhwcmVzc2lvbigpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPCU9IFwiSGVsbG8sV29ybGRcIiAlPiBlbmQiKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDEsIDEsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU59KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEdyZWF0ZXJUaGFuSW5BdHRWYWx1ZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIj5uZXh0XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBpcyBub3Qgc29tcGxlIiwgIShub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkgaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikpOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQSW52YWxpZFRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICJTPGEgdHlwZT1cImE8NFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAodGFnKSIsIHNpemVDaGVjayk7Ci0JCS8vc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJLy9hc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAoYXR0IHZhbHVlKSIsIHNpemVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrICh0YWcpIiwgdHlwZUNoZWNrKTsKLQkJLy90eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCS8vYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYXR0IHZhbHVlKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUExlc3NUaGFuSW5BdHRWYWx1ZSgpIHsKLQkJLy8gYmFpbHMgb3V0IG9mIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2l0aCBhbiBVTkRFRklORUQgcmVnaW9uIGZvciB0aGUKLQkJLy8gZW5kIHF1b3RlCi0JCVN0cmluZyB0ZXh0ID0gIjxidXR0b24gbGFiZWw9XCI8cHJldmlvdXNcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQkvL3NpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNCk7Ci0JCS8vYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKGF0dCB2YWx1ZSkiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLS8vCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuVU5ERUZJTkVEfSk7Ci0vLwkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYXR0IHZhbHVlKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgSlNQIGNvZGUgc2VjdGlvbnMsIGFzIGEgdGFnLCBzY2FubmluZyBiZXR3ZWVuIEhUTUwgY29udGVudAotCSAqLwotCS8vIHB1YmxpYyB2b2lkIHRlc3RKU1BTY3JpcHRsZXRUYWcoKSB7Ci0JLy8gSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDpzY3JpcHRsZXQ+Ci0JLy8gaW50IGZvbyA9IGJhcjsgLy88anNwOlNjcmlwdGxldD4vLzwvanNwOnNjcmlwdGxldHM8L2pzcDpzY3JpcHRsZXQ+Ci0JLy8gZW5kIik7Ci0JLy8JCi0JLy8gYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsCi0JLy8gMywKLQkvLyAxfSk7Ci0JLy8gYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLAotCS8vIHNpemVDaGVjayk7Ci0JLy8KLQkvLyBib29sZWFuIHR5cGVDaGVjayA9Ci0JLy8gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pOwotCS8vIGFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCS8vCQkKLQkvLyB2ZXJpZnlNb2RlbExlbmd0aCgpOwotCS8vIH0KLQkvKioKLQkgKiBDaGVjayBKU1AgY29kZSBzZWN0aW9ucywgYXMgYSB0YWcsIHNjYW5uaW5nIGJldHdlZW4gSFRNTCBjb250ZW50Ci0JICovCi0JLy8gcHVibGljIHZvaWQgdGVzdEpTUFRleHRUYWcoKSB7Ci0JLy8gSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDp0ZXh0PiBpbnQKLQkvLyBmb28KLQkvLyA9IGJhcjsgLy88anNwOlRFWFQ+Ly88L2pzcDpUZXh0czwvanNwOnRleHQ+IDxhPiA8L2E+IGVuZCIpOwotCS8vCQotCS8vIGJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAzLCAxLAotCS8vIDMsCi0JLy8gMSwgMywgMSwgMywgMX0pOwotCS8vIGFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IiwKLQkvLyBzaXplQ2hlY2spOwotCS8vCi0JLy8gYm9vbGVhbiB0eXBlQ2hlY2sgPQotCS8vIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfT1BFTiwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX05BTUUsCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DREFUQV9URVhUfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0VORF9UQUdfT1BFTiwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX05BTUUsCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg3KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfRU5EX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KTsKLQkvLyBhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkvLwkJCi0JLy8gdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQkvLyB9Ci0JLyoqCi0JICogQ2hlY2sgdGhhdCBqc3A6cm9vdCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHByb3Blcmx5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUFJvb3RUYWcoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPGpzcDpyb290PiA8anNwOnJvb3RzIGE+IDxqc3A6cm9vIGE9PiA8L2pzcDpyb290IGE9Yj48YT5lbmQiKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDQsIDEsIDUsIDEsIDYsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfUk9PVF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDUpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDYpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfUk9PVF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDgpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUFRhZ0luQXR0VmFsdWUoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCI8YS8+XCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrICh0YWcpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChhdHQgdmFsdWUpIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vdGhpbmdpbkJsb2NrSlNQOSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPHNjcmlwdD4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5naW5CbG9ja1hNTDkoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxzY3JpcHQ+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezN9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdFNpbXBsZVRhZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMTAsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVGFnX0pTUCgpIHsKLQkJdGVzdFNpbXBsZVRhZyhzZXRVcEpTUCgiMCA8dGFnbmFtZSBhdHRyMSBhdHRyMj12YWx1ZTIgYXR0cjM9XCJ2YWx1ZTNcIj4gMSIpKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBzaW1wbGUgdGFnIHNjYW5uaW5nIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlVGFnX1hNTCgpIHsKLQkJdGVzdFNpbXBsZVRhZyhzZXRVcFhNTCgiMCA8dGFnbmFtZSBhdHRyMSBhdHRyMj12YWx1ZTIgYXR0cjM9XCJ2YWx1ZTNcIj4gMSIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VkJMaW5Db250ZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICIje291dC5mb299IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCgwKSksIDMpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VkJMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGUoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCIje291dC5mb299XCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZVdpdGhTcGFjZXMoKSB7Ci0JCS8vIG5vdGU6IHdoaXRlc3BhY2Ugb24gZWl0aGVyIHNpZGUgcmV0dXJucyBhIFdISVRFX1NQQUNFIGNvbnRleHQKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIl8je291dC5mb299X1wiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA3KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ0xPU0UsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VkJMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9TcXVvdGUoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9JyN7b3V0LmZvb30nLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX1NRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX1NRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTF9ESFRNTGltcG9ydCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGE+IDw/aW1wb3J0IHR5cGU9XCJmb29cIj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MywgMSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTF9QSSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPD9waHAgYXNkYTtsc2dqYWxnO2xhc2psYWpnbGFqc2xrYWpsZ2Fqc2xqZ2FsamdsYWo/PmVuZCI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBYTUwodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DT05URU5ULCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxEb2xsYXJzaWduX1RyYWlsaW5nKCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YSB0eXBlPVwiICRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VW5kZWZpbmVkUmVnaW9uQ29udGFpbmVyKCkgewotCQkvLyBzZWUgUkFUTEMgUkFUTEMwMDI4NDc3NgotCQlTdHJpbmcgdGV4dCA9ICI8b3B0aW9uIDxlbG1zOmlucHV0VmFsdWUgdmFsdWU9XCI8JT11b212b3gudW9tSUQlPlwiLz48JT11b212b3gudW9tSUQuZXF1YWxzKHVvbUlEKSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwiJT4+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezV9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgb3ZlcmFsbCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCS8vIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcKLQkJLy8gU3RyaW5nW117WE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCQkvLyBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuVU5ERUZJTkVELCBYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9LCBuZXcKLQkJLy8gU3RyaW5nW11bXSB7e319KTsKLQkJdmVyaWZ5RW1iZWRkZWRDb250YWluZXJQYXJlbnRhZ2Uobm9kZXMpOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBub2RlcwotCSAqLwotCXByaXZhdGUgdm9pZCB2ZXJpZnlFbWJlZGRlZENvbnRhaW5lclBhcmVudGFnZShJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IG5vZGVzLml0ZW0oaSk7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgbGlzdCA9IHIuZ2V0UmVnaW9ucygpOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0LnNpemUoKTsgaisrKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbGlzdC5nZXQoaik7Ci0JCQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJCWFzc2VydE5vdE51bGwoInBhcmVudCBpcyBudWxsIGZvciAiICsgcmVnaW9uLCAoKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb24pLmdldFBhcmVudCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlNb2RlbExlbmd0aCgpIHsKLQkJcmV0dXJuIGNoZWNrTW9kZWxMZW5ndGgoZk1vZGVsLCBpbnB1dC5sZW5ndGgoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uaW5nVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzczZDk1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucGFyc2VyLkpTUFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja01hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5SZWdpb25QYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnBhcnNlci5YTUxTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotLyoqCi0gKiB0ZXN0IGNsYXNzIGZvciBiYXNpYyBwYXJzaW5nIGFuZCBzY2FubmluZwotICovCi0KLXB1YmxpYyBjbGFzcyBTY2FubmluZ1Rlc3RzIHsKLQlwcml2YXRlIHN0YXRpYyBJU3RydWN0dXJlZERvY3VtZW50IHRleHRTdG9yZSA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBzdGFydFRpbWUgPSAwOwotCXByaXZhdGUgc3RhdGljIGxvbmcgc3RvcFRpbWUgPSAwOwotCi0JLyoqCi0JICogU2Nhbm5pbmdUZXN0cyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBTY2FubmluZ1Rlc3RzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja05vZGVTZWFtcyhTdHJpbmcgZmlsZU5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDSEVDS0lORyBOT0RFIEJPVU5EQVJJRVMgQU5EIENPTlRFTlRTIEZPUiAiICsgZmlsZU5hbWUpOwotCQlFbnVtZXJhdGlvbiBlID0gcGFyc2VGaWxlKGZpbGVOYW1lKS5lbGVtZW50cygpOwotCQlpbnQgbGFzdEVuZCA9IDA7Ci0JCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSAoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikgZS5uZXh0RWxlbWVudCgpOwotCQkJaWYgKHIuZ2V0U3RhcnRPZmZzZXQoKSAhPSBsYXN0RW5kKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRVJST1I6IGRyb3BwZWQgaW4gIiArIHIpOwotCQkJaWYgKHIuZ2V0TnVtYmVyT2ZSZWdpb25zKCkgPCAxKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRVJST1I6IGVtcHR5IElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gIiArIHIpOwotCQkJbGFzdEVuZCA9IHIuZ2V0RW5kT2Zmc2V0KCk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJET05FIik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrUGFyc2UoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWNoZWNrVG9rZW5TZWFtcyhmaWxlTmFtZSk7Ci0JCWNoZWNrTm9kZVNlYW1zKGZpbGVOYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tUb2tlblNlYW1zKFN0cmluZyBmaWxlTmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNIRUNLSU5HIFRPS0VOSVpFUiBSRUdJT04gQk9VTkRBUklFUyBGT1IgIiArIGZpbGVOYW1lKTsKLQkJSXRlcmF0b3IgZSA9IHRva2VuaXplRmlsZShmaWxlTmFtZSkuaXRlcmF0b3IoKTsKLQkJaW50IGxhc3RFbmQgPSAwOwotCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKSBlLm5leHQoKTsKLQkJCWlmIChyLmdldFN0YXJ0T2Zmc2V0KCkgIT0gbGFzdEVuZCkKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiBkcm9wcGVkIGluICIgKyByKTsKLQkJCWxhc3RFbmQgPSByLmdldEVuZE9mZnNldCgpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRE9ORSIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgY2hhcltdIGxvYWRDaGFycyhTdHJpbmcgZmlsZU5hbWUpIHsKLQkJY2hhcltdIGNoYXJzID0gbnVsbDsKLQkJaW50IGMgPSAwOwotCQlpbnQgbGVuZ3RoID0gMDsKLQkJaW50IGNvdW50ID0gMDsKLQkJRmlsZSBmaWxlID0gbnVsbDsKLQkJRmlsZUlucHV0U3RyZWFtIGZpcyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOwotCQkJbGVuZ3RoID0gKGludCkgZmlsZS5sZW5ndGgoKTsKLQkJCWNoYXJzID0gbmV3IGNoYXJbbGVuZ3RoXTsKLQkJCWZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCQl3aGlsZSAoKChjID0gZmlzLnJlYWQoKSkgPj0gMCkgJiYgKGNvdW50IDwgbGVuZ3RoKSkgewotCQkJCWNoYXJzW2NvdW50KytdID0gKGNoYXIpIGM7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZpbGUgbm90IGZvdW5kIDogXCIiICsgZmlsZU5hbWUgKyAiXCIiKTsKLQkJCVN5c3RlbS5leGl0KDEpOwotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZSA6IGphdmEgSlNQTGV4ZXIzIDxpbnB1dGZpbGU+Iik7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBzY2FubmluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBjaGFyczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlZ2lvblBhcnNlciBuZXdQYXJzZXIoKSB7Ci0JCUpTUFNvdXJjZVBhcnNlciBwYXJzZXIgPSBuZXcgSlNQU291cmNlUGFyc2VyKCk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImZvbyIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgdHJ1ZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJnbG9iYWxGb28iLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIHRydWUpKTsKLQkJLy8JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImpzcDpleHByZXNzaW9uIiwgbnVsbCwgWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsKLQkJLy8JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImpzcDpzY3JpcHRsZXQiLCBudWxsLCBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOmRlY2xhcmF0aW9uIiwgbnVsbCwgWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsKLQkJLy8JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImpzcDp0ZXh0IiwgbnVsbCwgWE1MUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgdHJ1ZSkpOwotCQlyZXR1cm4gcGFyc2VyOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVnaW9uUGFyc2VyIG5ld1hNTFBhcnNlcigpIHsKLQkJWE1MU291cmNlUGFyc2VyIHBhcnNlciA9IG5ldyBYTUxTb3VyY2VQYXJzZXIoKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiU2NyaXB0IiwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzdHlsRSIsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcmV0dXJuIHBhcnNlcjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBwYXJzZShTdHJpbmcgc3RyaW5nZGF0YSkgewotCQlyZXR1cm4gcGFyc2Uoc3RyaW5nZGF0YSwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIHBhcnNlKFN0cmluZyBzdHJpbmdkYXRhLCBib29sZWFuIHVzZVhNTCkgewotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCVJlZ2lvblBhcnNlciBwYXJzZXIgPSBudWxsOwotCQlpZiAodXNlWE1MKQotCQkJcGFyc2VyID0gbmV3WE1MUGFyc2VyKCk7Ci0JCWVsc2UKLQkJCXBhcnNlciA9IG5ld1BhcnNlcigpOwotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0b3BUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjYW5uaW5nVGVzdHMgc3BlbnQgIiArIChzdG9wVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykgY3JlYXRpbmcgYSAiICsgcGFyc2VyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJfQotCQkvLyBDYXV0aW9uOiBjYXN0Ci0JCXBhcnNlci5yZXNldChuZXcgU3RyaW5nUmVhZGVyKHN0cmluZ2RhdGEpKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhTm9kZSA9IHNldE5vZGVEb2N1bWVudChwYXJzZXIuZ2V0RG9jdW1lbnRSZWdpb25zKCkpOwotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCXRleHRTdG9yZSA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UocGFyc2VyKTsKLQkJdGV4dFN0b3JlLnNldFRleHQobnVsbCwgc3RyaW5nZGF0YSk7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkl0ZXJhdG9yLnNldFBhcmVudERvY3VtZW50KGFOb2RlLCB0ZXh0U3RvcmUpOwotCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKLQkJd2hpbGUgKGFOb2RlICE9IG51bGwpIHsKLQkJCXYuYWRkRWxlbWVudChhTm9kZSk7Ci0JCQlhTm9kZSA9IGFOb2RlLmdldE5leHQoKTsKLQkJfQotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0b3BUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjYW5uaW5nVGVzdHMgc3BlbnQgIiArIChzdG9wVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2Vjcykgc2V0dGluZyB0ZXh0IGFuZCBzdG9yaW5nIG5vZGVzIik7Ci0JCX0KLQkJcmV0dXJuIHY7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgcGFyc2VGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJY2hhcltdIGlucHV0ID0gbG9hZENoYXJzKGZpbGVOYW1lKTsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdG9wVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY2FubmluZ1Rlc3RzIHNwZW50ICIgKyAoc3RvcFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIGxvYWRpbmcgIiArIGZpbGVOYW1lKTsKLQkJfQotCQlyZXR1cm4gcGFyc2UobmV3IFN0cmluZyhpbnB1dCkpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2V0Tm9kZURvY3VtZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RhcnROb2RlKSB7Ci0JCS8vIENhdXRpb246IGNhc3QKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhTm9kZSA9IHN0YXJ0Tm9kZTsKLQkJd2hpbGUgKGFOb2RlICE9IG51bGwpIHsKLQkJCWFOb2RlLnNldFBhcmVudERvY3VtZW50KHRleHRTdG9yZSk7Ci0JCQlhTm9kZSA9IGFOb2RlLmdldE5leHQoKTsKLQkJfQotCQlyZXR1cm4gc3RhcnROb2RlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGlzdCB0b2tlbml6ZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCUxpc3QgdiA9IG51bGw7Ci0JCVN0cmluZ0J1ZmZlciBidWZmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl0cnkgewotCQkJLy9jaGFyW10gaW5wdXQgPSBsb2FkQ2hhcnMoZmlsZU5hbWUpOwotCQkJUmVhZGVyIGlucHV0ID0gbmV3IEZpbGVSZWFkZXIoZmlsZU5hbWUpOwotCQkJUmVnaW9uUGFyc2VyIHBhcnNlciA9IG5ld1BhcnNlcigpOwotCQkJLy8gcGFyc2VyIG11c3QgYmUgZ2l2ZW4gaW5wdXQsIGJlZm9yZSB0b2tlbml6ZXIgaXMgdmFsaWQKLQkJCXBhcnNlci5yZXNldChpbnB1dCk7Ci0JCQlpbnQgYyA9IDA7Ci0JCQlwYXJzZXIuZ2V0RG9jdW1lbnRSZWdpb25zKCk7Ci0JCQl2ID0gcGFyc2VyLmdldFJlZ2lvbnMoKTsKLQkJCWlucHV0LnJlc2V0KCk7Ci0JCQl3aGlsZSAoKGMgPSBpbnB1dC5yZWFkKCkpID49IDApIHsKLQkJCQlidWZmLmFwcGVuZCgoY2hhcikgYyk7Ci0JCQl9Ci0JCQl0ZXh0U3RvcmUgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKHBhcnNlcik7Ci0JCQl0ZXh0U3RvcmUuc2V0VGV4dChudWxsLCBidWZmLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWxlIG5vdCBmb3VuZCA6IFwiIiArIGZpbGVOYW1lICsgIlwiIik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJfQotCQljYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2UgOiBqYXZhIEpTUExleGVyMyA8aW5wdXRmaWxlPiIpOwotCQl9Ci0JCXJldHVybiB2OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHZpZXdhYmxlVG9rZW5pemVXaXRoU2VwYXJhdG9yKFN0cmluZyBkYXRhKSB7Ci0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzLmFwcGVuZCgiXCIiKTsKLQkJcy5hcHBlbmQoZGF0YSk7Ci0JCXMuYXBwZW5kKCJcIlxuIik7Ci0JCXMuYXBwZW5kKHZpZXdhYmxlVG9rZW5pemUoZGF0YSkpOwotCQlzLmFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCQlyZXR1cm4gcy50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHZpZXdhYmxlVG9rZW5pemUoU3RyaW5nIHN0cmluZ2RhdGEpIHsKLQkJcmV0dXJuIHZpZXdhYmxlVG9rZW5pemUoc3RyaW5nZGF0YSwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHZpZXdhYmxlVG9rZW5pemUoU3RyaW5nIHN0cmluZ2RhdGEsIGJvb2xlYW4gdXNlWE1MKSB7Ci0JCWphdmEudXRpbC5MaXN0IGwgPSBwYXJzZShzdHJpbmdkYXRhLCB1c2VYTUwpOwotCQlTdHJpbmcgcyA9ICIiOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGwuc2l6ZSgpOyBpKyspIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gbm9kZSA9IChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKSBsLmdldChpKTsKLQkJCXRyeSB7Ci0JCQkJcyArPSBTdHJpbmdVdGlscy5lc2NhcGUobm9kZS50b1N0cmluZygpKSArICJcbiI7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlzICs9ICJbIiArIG5vZGUuZ2V0U3RhcnQoKSArICIsICIgKyBub2RlLmdldEVuZCgpICsgIl0gKFVOUFJJTlRBQkxFICIgKyBlICsgIikiOwotCQkJfQotCQkJSVRleHRSZWdpb25MaXN0IG0gPSBub2RlLmdldFJlZ2lvbnMoKTsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgbS5zaXplKCk7IGorKykKLQkJCQlpZiAobS5nZXQoaikgaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikgewotCQkJCQlzID0gcyArICJcdCIgKyBTdHJpbmdVdGlscy5lc2NhcGUobS5nZXQoaikudG9TdHJpbmcoKSkgKyAiXG4iOwotCQkJCQlJVGV4dFJlZ2lvbkxpc3QgbiA9ICgoSVRleHRSZWdpb25Db250YWluZXIpIG0uZ2V0KGopKS5nZXRSZWdpb25zKCk7Ci0JCQkJCWZvciAoaW50IGsgPSAwOyBrIDwgbi5zaXplKCk7IGsrKykKLQkJCQkJCXMgPSBzICsgIlx0XHQiICsgU3RyaW5nVXRpbHMuZXNjYXBlKG4uZ2V0KGspLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlzID0gcyArICJcdCIgKyBTdHJpbmdVdGlscy5lc2NhcGUobS5nZXQoaikudG9TdHJpbmcoKSkgKyAiXG4iOwotCQl9Ci0JCXJldHVybiBzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHZpZXdhYmxlVG9rZW5pemVGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJY2hhcltdIGlucHV0ID0gbG9hZENoYXJzKGZpbGVOYW1lKTsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdG9wVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY2FubmluZ1Rlc3RzIHNwZW50ICIgKyAoc3RvcFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIGxvYWRpbmcgIiArIGZpbGVOYW1lKTsKLQkJfQotCQlyZXR1cm4gdmlld2FibGVUb2tlbml6ZShuZXcgU3RyaW5nKGlucHV0KSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmQ1OWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCXB1YmxpYyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzEoKSB7Ci0JCXJldHVybiAiPGE+YTxiIC8+YjwvYT4iOyAvLyAtPiA8YT5hYjwvYT47Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmcyKCkgewotCQlyZXR1cm4gIjxtZW51PlxuPHJuYW1lPlxuTGlhbSdzIENob3dkZXIgSG91c2UgYW5kIEdyaWxsXG48L3JuYW1lPlxuPC9tZW51PiI7Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmczKCkgewotCQkvLyByZXR1cm4gIiA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgPz5cbgotCQkvLyA8dGVzdFRvcFNpYmxpbmc+PHA+dGV4dDwvcD48L3Rlc3RUb3BTaWJsaW5nPiI7Ci0JCXJldHVybiAiPHRlc3QvPlxuXG4gPGh0bWw+XG48L2h0bWw+IjsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzQoKSB7Ci0JCXJldHVybiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiID8+IjsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZ1tdCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cyBpbnN0YW5jZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cygpOwotCQkJaW5zdGFuY2UudGVzdE5vZGVEZWxldGlvbjQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIHQpIHsKLQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UxKElET01Nb2RlbCB0cmVlKSB7Ci0KLQkJLy8JCi0JCS8vIHBpY2sgYSBwYXJlbnQgYW5kIG9uZXMgb2YgaXRzIGNoaWxkcmVuIHRvIGRlbGV0ZQotCQkvLyAobm90ZTogdmFsaWRpdHkgb2YgdGhpcyBjb2RlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gaW5wdXQgc3RyaW5nKQotCQlvcmcudzNjLmRvbS5Eb2N1bWVudCBkb20gPSB0cmVlLmdldERvY3VtZW50KCk7Ci0JCU5vZGVMaXN0IG5vZGVzID0gZG9tLmdldENoaWxkTm9kZXMoKTsKLQkJLy8KLQkJLyoKLQkJICogZm9yICJmaXJzdCIgdGVzdCBjYXNlIE5vZGUgdGVzdFBhcmVudE5vZGUgPSBub2Rlcy5pdGVtKDApOyBOb2RlCi0JCSAqIHRlc3RDaGlsZE5vZGUgPSB0ZXN0UGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCSAqLwotCQkvLyBmb3IgInNlY29uZCIgdGVzdCBjYXNlCi0JCU5vZGUgdGVzdFBhcmVudE5vZGUgPSBub2Rlcy5pdGVtKDApOwotCQlOb2RlIHRlc3RDaGlsZE5vZGUgPSB0ZXN0UGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCXRlc3RDaGlsZE5vZGUgPSB0ZXN0Q2hpbGROb2RlLmdldE5leHRTaWJsaW5nKCk7Ci0KLQkJdGVzdFBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdENoaWxkTm9kZSk7Ci0KLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UyKElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50KSB7Ci0KLQkJLy8gZGVsZXRlIHRoZSBhcG9zdHJvcGUgaW4gdGVzdCBzdHJpbmcgLy8gNCwgND8KLQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDE5LCAxLCBudWxsKTsKLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UzKElET01Nb2RlbCB0cmVlKSB7Ci0KLQkJLy8JCi0JCS8vIHBpY2sgYSBwYXJlbnQgYW5kIG9uZXMgb2YgaXRzIGNoaWxkcmVuIHRvIGRlbGV0ZQotCQkvLyAobm90ZTogdmFsaWRpdHkgb2YgdGhpcyBjb2RlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gaW5wdXQgc3RyaW5nKQotCQlvcmcudzNjLmRvbS5Eb2N1bWVudCBkb20gPSB0cmVlLmdldERvY3VtZW50KCk7Ci0JCS8vIE5vZGVMaXN0IG5vZGVzID0gZG9tLmdldENoaWxkTm9kZXMoKTsKLQkJLy8KLQkJTm9kZSB0ZXN0Q2hpbGROb2RlID0gZG9tLmdldExhc3RDaGlsZCgpOwotCi0JCWRvbS5yZW1vdmVDaGlsZCh0ZXN0Q2hpbGROb2RlKTsKLQotCX0KLQotCS8qKgotCSAqIG5ld01vZGVsIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5ld01vZGVsKE5ld0RvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJuZXdNb2RlbDoiKTsKLQl9Ci0KLQkvKioKLQkgKiBub0NoYW5nZSBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBub0NoYW5nZShOb0NoYW5nZUV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCS8vIGxvZyBmb3Igbm93LCB1bmxlc3Mgd2UgZmluZCByZWFzb24gbm90IHRvCi0JCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0czo6bm9DaGFuZ2UgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQiKTsKLQl9Ci0KLQkvKioKLQkgKiBub2Rlc1JlcGxhY2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5vZGVzUmVwbGFjZWQoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJub2Rlc1JlcGxhY2VkOiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0TmV3RmxhdE5vZGVzOiIpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBmbGF0Tm9kZUxpc3QgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWludCBsZW4gPSBmbGF0Tm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCVN0cmluZyBvdXRTdHJpbmcgPSBmbGF0Tm9kZUxpc3QuaXRlbShpKS50b1N0cmluZygpOwotCQkJb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKG91dFN0cmluZyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHQiICsgb3V0U3RyaW5nKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0T2xkRmxhdE5vZGVzOiIpOwotCQlmbGF0Tm9kZUxpc3QgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWxlbiA9IGZsYXROb2RlTGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJU3RyaW5nIG91dFN0cmluZyA9IGZsYXROb2RlTGlzdC5pdGVtKGkpLnRvU3RyaW5nKCk7Ci0JCQlvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdCIgKyBvdXRTdHJpbmcpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogcmVnaW9uQ2hhbmdlZCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lvbkNoYW5nZWQ6Iik7Ci0JfQotCi0JLyoqCi0JICogcmVnaW9uc1JlcGxhY2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHJlZ2lvbnNSZXBsYWNlZChSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lvbnNSZXBsYWNlZDoiKTsKLQl9Ci0KLQkvKioKLQkgKiBVbml0IHRlc3QgLS0gdGVzdHMgYmFzaWMgcGFyc2luZyByZXN1bHRzIG9mIGluc2VydGluZyBhIHRlc3Qgc3RyaW5nCi0JICogaW50byBhbiBpbml0aWFsIHN0cmluZy4KLQkgKi8KLQl2b2lkIHRlc3ROb2RlRGVsZXRpb24oKSB7Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0KLQkJLy8gIjxwYXI+PHg+XG50ZXh0eFxuPC94PlxuPHk+XG50ZXh0eVxuPC95PjwvcGFyPiI7Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0gIjxwYXI+PHg+dGV4dHg8L3g+PHk+dGV4dHk8L3k+PC9wYXI+IjsKLQkJLy8gdGVzdCBjYXNlcyBmb3IgdHdvIHRleHQgbm9kZXMgbGVmdCB0b2dldGhlciAocmVtb3ZlIDxiLz4pOgotCQkvLyBmaXJzdCBjYXNlIHdvcmtzLCBzZWNvbmQgZG9lc24ndAotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9ICI8YT5hPGIgLz48L2E+IjsgLy8gLT4gPGE+YTwvYT4KLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSAiPGE+YTxiIC8+YjwvYT4iOyAvLyAtPiA8YT5hYjwvYT4KLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMSgpOwotCQlTdHJpbmcgaW5pdGlhbFN0cmluZyA9IGdldFRlc3RTdHJpbmcyKCk7Ci0KLQkJLy8gcHJpbnQgb3V0IHdoYXQgd2UgYWx3YXlzIGNhbgotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBOb2RlIERlbGV0aW9uIik7Ci0JCVN0cmluZyBvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUoaW5pdGlhbFN0cmluZyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbCBTdHJpbmc6ICIgKyBvdXRTdHJpbmcpOwotCQkvLyBhbHdheXMgc3RhcnQgd2l0aCBmcmVzaCBtb2RlbAotCQlJU3RydWN0dXJlZERvY3VtZW50IGYgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZiA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCi0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQkvLyBtYWtlQ2hhbmdlMSh0cmVlKTsKLQkJbWFrZUNoYW5nZTIoZik7Ci0KLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3RzIGJhc2ljIHBhcnNpbmcgcmVzdWx0cyBvZiBpbnNlcnRpbmcgYSB0ZXN0IHN0cmluZwotCSAqIGludG8gYW4gaW5pdGlhbCBzdHJpbmcuCi0JICovCi0Jdm9pZCB0ZXN0Tm9kZURlbGV0aW9uMygpIHsKLQkJU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMygpOwotCi0JCS8vIHByaW50IG91dCB3aGF0IHdlIGFsd2F5cyBjYW4KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgTm9kZSBEZWxldGlvbiIpOwotCQlTdHJpbmcgb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKGluaXRpYWxTdHJpbmcpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluaXRpYWwgU3RyaW5nOiAiICsgb3V0U3RyaW5nKTsKLQkJLy8gYWx3YXlzIHN0YXJ0IHdpdGggZnJlc2ggbW9kZWwKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBmID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWYgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQkvLyBtYWtlQ2hhbmdlMSh0cmVlKTsKLQkJbWFrZUNoYW5nZTModHJlZSk7Ci0KLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3QgaW5zZXJ0IGZvbGxvd2VkIGJ5IGRlbGV0ZSBhdCBiZWdpbm5pbmcgb2Ygc3RyaW5nLgotCSAqLwotCXZvaWQgdGVzdE5vZGVEZWxldGlvbjQoKSB7Ci0JCVN0cmluZyBpbml0aWFsU3RyaW5nID0gZ2V0VGVzdFN0cmluZzQoKTsKLQotCQkvLyBwcmludCBvdXQgd2hhdCB3ZSBhbHdheXMgY2FuCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IE5vZGUgSW5zZXJ0IGFuZCBEZWxldGUiKTsKLQkJU3RyaW5nIG91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShpbml0aWFsU3RyaW5nKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbml0aWFsIFN0cmluZzogIiArIG91dFN0cmluZyk7Ci0JCS8vIGFsd2F5cyBzdGFydCB3aXRoIGZyZXNoIG1vZGVsCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZiA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCS8vCi0JCS8vIHdlJ2xsIGxpc3RlbiB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgZXZlbnRzIHRvIHByaW50IG91dCBkaWFnbm9zdGljcwotCQlmLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkvLwotCi0JCUlET01Nb2RlbCB0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCQlmLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQotCQkvLyBzZXQgdGV4dCB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgKHdoaWNoIHVwZGF0ZXMgdHJlZSkKLQkJZi5zZXRUZXh0KG51bGwsIGluaXRpYWxTdHJpbmcpOwotCi0JCS8vIGR1bXAgaW5pdGlhbCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBpbml0aWFsIGRvbQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQkJLy8KLQkJLy8KLQkJZi5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiYSIpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiID09PT0gUmVzdWx0cyBhZnRlciBpbnNlcnQiKTsKLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JCWYucmVwbGFjZVRleHQobnVsbCwgMCwgMSwgIiIpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiID09PT0gUmVzdWx0cyBhZnRlciBkZWxldGUiKTsKLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0Q29udGVudFNwZWMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dENvbnRlbnRTcGVjLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZWQyMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0Q29udGVudFNwZWMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotLyoqCi0gKiBVc2UgdGhpcyB0ZXN0IGNsYXNzIHRvIHZhbGlkYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHlsZWRUZXh0Q29udGVudAotICogaW50ZXJmYWNlLiBUbyBwZXJmb3JtIHRoZSB2YWxpZGF0aW9uLCBjb3B5IHRoaXMgY2xhc3MgdG8gdGhlIHBhY2thZ2Ugd2hlcmUKLSAqIHlvdXIgU3R5bGVkVGV4dENvbnRlbnQgaW1wbGVtZW50YXRpb24gbGl2ZXMuIFRoZW4gc3BlY2lmeSB0aGUgZnVsbHkKLSAqIHF1YWxpZmllZCBuYW1lIG9mIHlvdXIgU3R5bGVkVGV4dENvbnRlbnQgY2xhc3MgYXMgYW4gYXJndW1lbnQgdG8gdGhlIG1haW4KLSAqIG1ldGhvZCBvZiB0aGlzIGNsYXNzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3QgY2xhc3MgYXNzdW1lcyB0aGF0IHlvdXIgU3R5bGVkVGV4dENvbnRlbnQgaW1wbGVtZW50YXRpb24KLSAqIGhhbmRsZXMgdGhlIGZvbGxvd2luZyBkZWxpbWl0ZXJzOgotICogIC9yIC9uIC9yL24KLSAqICAKLSAqLwotLy8gVGhpcyBjbGFzcyBjb21lcyBjb3VydGVzeSBvZiBMeW5uZSBLdWVzLiBPdXIgU3R5bGVkVGV4dENvbnRlbnQgZmFpbHMgdGVzdAotLy8gY2FzZXMgNnggb2YKLS8vICJTcGVjaWFsIGNhc2VzIiBzaW5jZSB3ZSAobm9yIEpGYWNlKSBoYW5kbGUgaW5zZXJ0aW9uIGJldHdlZW4gQ1IgYW5kIExGLiBBCi0vLyBtaW5vciBtb2RpZmljYXRpb24KLS8vIHdhcyBuZWVkZWQgdG8gZ2V0Q29udGVudEluc3RhbmNlIGZvciBvdXQgdmVyc2lvbiBvZiBTdHlsZVRleHRDb250ZW50Ci0vLyAoU3RydWN0dXJlZERvY3VtZW50VG9UZXh0QWRhcHRlcikuCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHRDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlRleHRDaGFuZ2luZ0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVzc2FnZUJveDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZERvY3VtZW50VG9UZXh0QWRhcHRlcjsKLQotcHVibGljIGNsYXNzIFN0eWxlZFRleHRDb250ZW50U3BlYyBpbXBsZW1lbnRzIFRleHRDaGFuZ2VMaXN0ZW5lciB7Ci0Jc3RhdGljIFN0cmluZyBjb250ZW50Q2xhc3NOYW1lOwotCXN0YXRpYyBpbnQgZmFpbENvdW50ID0gMDsKLQlzdGF0aWMgaW50IGVycm9yQ291bnQgPSAwOwotCUNsYXNzIGNvbnRlbnRDbGFzcyA9IG51bGw7Ci0JU3R5bGVkVGV4dENvbnRlbnQgY29udGVudEluc3RhbmNlID0gbnVsbDsKLQlpbnQgdmVyaWZ5ID0gMDsKLQlNZXRob2QgY3VycmVudE1ldGhvZCA9IG51bGw7Ci0JYm9vbGVhbiBmYWlsZWQgPSBmYWxzZTsKLQlTdHlsZWRUZXh0IHdpZGdldCA9IG51bGw7Ci0JU2hlbGwgc2hlbGwgPSBudWxsOwotCi0JcHVibGljIFN0eWxlZFRleHRDb250ZW50U3BlYygpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhc3NlcnRXaXRoTWVzc2FnZShTdHJpbmcgbWVzc2FnZSwgYm9vbGVhbiBjb25kaXRpb24pIHsKLQkJU3lzdGVtLm91dC5wcmludCgiXHQiICsgY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiICIgKyBtZXNzYWdlKTsKLQkJaWYgKCFjb25kaXRpb24pCi0JCQlmYWlsKG1lc3NhZ2UpOwotCQllbHNlCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBwYXNzZWQiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBmYWlsKFN0cmluZyBtZXNzYWdlKSB7Ci0JCWZhaWxlZCA9IHRydWU7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEZBSUxFRCIpOwotCQlmYWlsQ291bnQrKzsKLQl9Ci0KLQlwdWJsaWMgU3R5bGVkVGV4dENvbnRlbnQgZ2V0Q29udGVudEluc3RhbmNlKCkgewotCQljb250ZW50SW5zdGFuY2Uuc2V0VGV4dCgiIik7Ci0JCXdpZGdldC5zZXRDb250ZW50KGNvbnRlbnRJbnN0YW5jZSk7Ci0JCS8vIGR3LiBIYWQgdG8gYWRkIGZvciBvdXIgc3BlY2lhbCB2ZXJzaW9uIG9mIFN0eWxlZFRleHRDb250ZW50Ci0JCS8vIE5lZWRzIHRvIGJlIHJlbW92ZWQgZm9yIHRlc3RpbmcgamZhY2UncyBEb2N1bWVudEFkYXB0ZXIKLQkJKChTdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyKSBjb250ZW50SW5zdGFuY2UpLnNldFdpZGdldCh3aWRnZXQpOwotCQlyZXR1cm4gY29udGVudEluc3RhbmNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRlc3RUZXh0KCkgewotCQlyZXR1cm4gIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmUuXHJcbiIgKyAiVGhpcyBpcyB0aGUgc2Vjb25kIGxpbmUuXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBmb3VydGggbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBmaWZ0aCBsaW5lLlxyXG4iICsgIlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgc2Vjb25kIGxpbmUgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBmb3VydGggbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBmaWZ0aCBsaW5lIGFnYWluLlxyXG4iICsgIlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb25jZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIHRoaXJkIGxpbmUgb25jZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBmb3VydGggbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUgb25jZSBhZ2Fpbi4iOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnRTcGVjIHNwZWMgPSBuZXcgU3R5bGVkVGV4dENvbnRlbnRTcGVjKCk7Ci0JCWlmIChhcmdzLmxlbmd0aCA+IDApIHsKLQkJCWNvbnRlbnRDbGFzc05hbWUgPSBhcmdzWzBdOwotCQkJLy9TdHJpbmcgcGF0aCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5saWJyYXJ5LnBhdGgiKTsKLQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIExpYnJhcnkgUGF0aDogIiArIHBhdGgpOwotCQl9Ci0JCWVsc2UgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIkNvbnRlbnQgY2xhc3MgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYW4gZXhlY3V0aW9uIGFyZ3VtZW50LiIpOyAvLyROT04tTkxTLTEkCi0JCQlib3gub3BlbigpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXNwZWMucnVuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oZmFpbENvdW50ICsgIiBURVNUIEZBSUxVUkVTLiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oZXJyb3JDb3VudCArICIgVU5FWFBFQ1RFRCBFUlJPUlMuIik7Ci0JfQotCi0Jc3RhdGljIHByaXZhdGUgRGlzcGxheSBnZXREaXNwbGF5KCkgewotCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlpZiAoY29udGVudENsYXNzTmFtZS5lcXVhbHMoIiIpKSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiQ29udGVudCBjbGFzcyBtdXN0IGJlIHNwZWNpZmllZCBhcyBhbiBleGVjdXRpb24gYXJndW1lbnQuIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKGNvbnRlbnRDbGFzcyA9PSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRDbGFzcyA9IENsYXNzLmZvck5hbWUoY29udGVudENsYXNzTmFtZSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJCWJveC5zZXRNZXNzYWdlKCJDb250ZW50IGNsYXNzOlxuIiArIGNvbnRlbnRDbGFzc05hbWUgKyAiXG5ub3QgZm91bmQiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWJveC5vcGVuKCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCXRyeSB7Ci0JCQljb250ZW50SW5zdGFuY2UgPSAoU3R5bGVkVGV4dENvbnRlbnQpIGNvbnRlbnRDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQl9Ci0JCWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCU1lc3NhZ2VCb3ggYm94ID0gbmV3IE1lc3NhZ2VCb3goZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCksIFNXVC5JQ09OX0VSUk9SKTsKLQkJCWJveC5zZXRNZXNzYWdlKCJVbmFibGUgdG8gYWNjZXNzIGNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIlVuYWJsZSB0byBpbnN0YW50aWF0ZSBjb250ZW50IGNsYXNzOlxuIiArIGNvbnRlbnRDbGFzc05hbWUpOyAvLyROT04tTkxTLTEkCi0JCQlib3gub3BlbigpOwotCQkJcmV0dXJuOwotCQl9Ci0JCUNsYXNzIGNsYXp6OwotCQljbGF6eiA9IHRoaXMuZ2V0Q2xhc3MoKTsKLQkJTWV0aG9kW10gbWV0aG9kcyA9IGNsYXp6LmdldERlY2xhcmVkTWV0aG9kcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKLQkJCXNldFVwKCk7Ci0JCQljdXJyZW50TWV0aG9kID0gbWV0aG9kc1tpXTsKLQkJCWZhaWxlZCA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlpZiAoY3VycmVudE1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgidGVzdF8iKSkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIi4uLiIpOwotCQkJCQljdXJyZW50TWV0aG9kLmludm9rZSh0aGlzLCBuZXcgT2JqZWN0WzBdKTsKLQkJCQkJaWYgKCFmYWlsZWQpIHsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUEFTU0VELiIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQiKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4KSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdCIgKyBjdXJyZW50TWV0aG9kLmdldE5hbWUoKSArICIgRVJST1IgPT0+ICIgKyBleC5nZXRUYXJnZXRFeGNlcHRpb24oKS50b1N0cmluZygpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCIpOwotCQkJCWVycm9yQ291bnQrKzsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBFUlJPUiA9PT4gIiArIGV4LnRvU3RyaW5nKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIik7Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJfQotCQkJaWYgKHZlcmlmeSAhPSAwKSB7Ci0JCQkJdmVyaWZ5ID0gMDsKLQkJCQljb250ZW50SW5zdGFuY2UucmVtb3ZlVGV4dENoYW5nZUxpc3RlbmVyKHRoaXMpOwotCQkJfQotCQkJdGVhckRvd24oKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQkvLyBjcmVhdGUgc2hlbGwKLQkJc2hlbGwgPSBuZXcgU2hlbGwoKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCXNoZWxsLnNldFNpemUoNTAwLCAzMDApOwotCQlzaGVsbC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJLy8gY3JlYXRlIHdpZGdldAotCQl3aWRnZXQgPSBuZXcgU3R5bGVkVGV4dChzaGVsbCwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSB8IFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCk7Ci0JCUdyaWREYXRhIHNwZWMgPSBuZXcgR3JpZERhdGEoKTsKLQkJc3BlYy5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJc3BlYy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLQkJc3BlYy52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0JCXNwZWMuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOwotCQl3aWRnZXQuc2V0TGF5b3V0RGF0YShzcGVjKTsKLQkJc2hlbGwub3BlbigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCQlpZiAoc2hlbGwgIT0gbnVsbCAmJiAhc2hlbGwuaXNEaXNwb3NlZCgpKQotCQkJc2hlbGwuZGlzcG9zZSgpOwotCQlzaGVsbCA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9EZWxldGUoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJU3RyaW5nIG5ld1RleHQ7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDYsIDIsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpYSB0ZXN0IikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCA5LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuXHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMjEsIDcsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA1LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBuZXdUZXh0LmVxdWFscygiaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJsaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibGluZSA0IikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMTYsIDcsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIG5ld1RleHQuZXF1YWxzKCJpcyBhIHRlc3RcbmxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygibGluZSAzIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoOSwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGk6IiwgbmV3VGV4dC5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ajoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCA4LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0azoiLCBuZXdUZXh0LmVxdWFscygiaSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJpIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NG06IiwgbmV3VGV4dC5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5cciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMMVxyXG5MMlxyXG5MM1xyXG5MNFxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDQsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJMMVxyXG5MNFxyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MMVxyXG5MMiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2E6IiwgbmV3VGV4dC5lcXVhbHMoIkwxXHJcbkwyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MMVxyXG5MMlxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDcsIDIsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIG5ld1RleHQuZXF1YWxzKCJcbkwxXHJcbkwyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkwyIikpOwotCQljb250ZW50LnNldFRleHQoIlxuTGluZSAxXG5MaW5lIDJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTGluZSAyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjllOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcbkxpbmUgMlxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg2LCA4LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSAxIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgb25lIGlzIHNob3J0XHJcbkxpbmUgMiBpcyBhIGxvbmdlciBsaW5lXHJcbkxpbmUgM1xuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxMiwgMTcsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSBvbmUgaXMgYSBsb25nZXIgbGluZVxyXG5MaW5lIDNcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSBvbmUgaXMgYSBsb25nZXIgbGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9FbXB0eSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoInRlc3QiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDQsICIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0luc2VydCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgInRlc3RcbiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIG5ld1RleHQuZXF1YWxzKCJ0ZXN0XG4gVGhpc1xuaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJ0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiBUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICIqKiogIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuKioqIGlzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIqKiogaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcclxuTGluZSAyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXHIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIG5ld1RleHQuZXF1YWxzKCJcckxpbmUgMVxyXG5MaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDksIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Y6IiwgbmV3VGV4dC5lcXVhbHMoIlxyTGluZSAxXHJcblxyTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNnOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2g6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNpOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozajoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2s6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTGluZSAyIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJcblRoaXNcbmlzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIlxyXG5uZXdMaW5lIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuaXNcclxubmV3TGluZSBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibmV3TGluZSBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlRoaXNcbmlzXHJcbm5ld0xpbmUgYSB0ZXN0XHIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pc1xyXG5uZXdMaW5lIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJuZXdMaW5lIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCS8vIGluc2VydCBhdCBlbmQKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg0LCAwLCAiXG4gIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuICIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiICIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2U6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcblxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdmOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2c6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3aDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2k6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQkvLyBpbnNlcnQgYXQgYmVnaW5uaW5nCi0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBuZXdUZXh0LmVxdWFscygiXG5UaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCS8vIGluc2VydCB0ZXh0Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICIqKiogIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuKioqIGlzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjliOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIqKiogaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjllOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDAsICJsaW5lIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmxpbmUiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImxpbmUiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwZjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg5KSA9PSAxKTsKLQkJLy8gaW5zZXJ0IGF0IGJlZ2lubmluZwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgImxpbmVcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIG5ld1RleHQuZXF1YWxzKCJsaW5lXG5UaGlzXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImxpbmUiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDUpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDJcclxuTGluZSAzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXHIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYToiLCBuZXdUZXh0LmVxdWFscygiXHJMaW5lIDFcclxuTGluZSAyXHJcbkxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDcsIDAsICJMaW5lMWFcbkxpbmUxYlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2E6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZTFhXG5MaW5lMWJcbkxpbmUgMlxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUxYSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZTFiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNnOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIkxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcbkxpbmUgMlxuTGluZSAzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxMSwgMCwgImwxYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRhOiIsIG5ld1RleHQuZXF1YWxzKCJMaW5lIDFcbkxpbmVsMWEgMlxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmVsMWEgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyIGlzIGEgdmVyeSBsb25nIGxpbmUgdGhhdCBzcGFucyBtYW55IHdvcmRzXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDE5LCAwLCAidmVyeSwgdmVyeSwgIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZSAyIGlzIGEgdmVyeSwgdmVyeSwgdmVyeSBsb25nIGxpbmUgdGhhdCBzcGFucyBtYW55IHdvcmRzXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTVjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAyIGlzIGEgdmVyeSwgdmVyeSwgdmVyeSBsb25nIGxpbmUgdGhhdCBzcGFucyBtYW55IHdvcmRzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9MaW5lX0NvbnZlcnNpb24oKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFmOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFnOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoInJlcGVhdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAxNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWk6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiZW5kIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFqOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDIyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxazoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWw6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMjYpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xyXG5pcyBhIHRlc3RcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDE1KSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG5cblxyXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZjoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWc6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMikgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWg6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVpOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVqOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1azoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSA2KTsKLQkJY29udGVudC5zZXRUZXh0KCJ0ZXN0XHJccnRlc3QyXHJcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygidGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmU6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmY6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygidGVzdDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmc6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMikgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmg6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZpOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDEyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ajoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nms6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMTMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfTGluZV9Ub19PZmZzZXQoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAxNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMjIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDI2KTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdCIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDYpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXG5cclxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgzKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSA2KTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxudGVzdFxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSA4KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X09mZnNldF9Ub19MaW5lKCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHJyZXBlYXRcbmVuZFxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMykgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMjUpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDI2KSA9PSA0KTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdCIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDUpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDYpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEwKSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxuXHJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMykgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGc6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNikgPT0gNCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAyKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxyXHJcblxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAzKTsKLQkJY29udGVudC5zZXRUZXh0KCIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfUmVwbGFjZSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgNCwgImEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5hIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMiwgIndhcyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbndhcyBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygid2FzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMiwgIndhcyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXMgd2FzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyB3YXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDE1KSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJMaW5lIDFcbkxpbmUgMlxuTGluZSAzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA3LCAiTGFcbkxiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJMYVxuTGJcbkxpbmUgMlxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dChnZXRUZXN0VGV4dCgpKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlpbnQgc3RhcnQgPSBjb250ZW50LmdldE9mZnNldEF0TGluZSg2KTsKLQkJaW50IGVuZCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDExKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg2KS5lcXVhbHMoIiIpKTsKLQkJc3RhcnQgPSBjb250ZW50LmdldE9mZnNldEF0TGluZSg3KTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKHN0YXJ0LCBjb250ZW50LmdldENoYXJDb3VudCgpIC0gc3RhcnQsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gOCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg2KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNykuZXF1YWxzKCIiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9TcGVjaWFsX0Nhc2VzKCkgewotCQlTdHJpbmcgbmV3VGV4dDsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjBhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MGI6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNCwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWY6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNiwgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWc6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIlxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWg6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Mmc6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Y6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2g6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozajoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2s6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZjoiLCBuZXdUZXh0LmVxdWFscygiXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGc6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgImEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuYVRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJhVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJLy8gZGVsZXRlIG9ubHkgcGFydCBvZiBhIGRlbGltaXRlcgotCQljb250ZW50LnNldFRleHQoIkwxXHJcbkwyXHJcbkwzXHJcbkw0XHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTDJcclxuTDNcclxuTDRcclxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVmOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWc6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkwyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkwzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVqOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkw0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVrOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJLy8gcmVwbGFjZSBwYXJ0IG9mIGEgZGVsaW1pdGVyCi0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuTDJcclxuTDNcclxuTDRcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgzLCAxLCAidGVzdFxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YToiLCBuZXdUZXh0LmVxdWFscygiTDFccnRlc3RcbkwyXHJcbkwzXHJcbkw0XHJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDYpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoInRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmc6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiTDQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmg6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoImFiY1xyXG5kZWYiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIG5ld1RleHQuZXF1YWxzKCJhY1xyXG5kZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJkZWYiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZToiLCBuZXdUZXh0LmVxdWFscygiYVxyXG5kZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Y6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDIsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdpOiIsIG5ld1RleHQuZXF1YWxzKCJhZGVmIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdqOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2s6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiYWRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdsOiIsIG5ld1RleHQuZXF1YWxzKCJhZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N206IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZWYiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bzoiLCBuZXdUZXh0LmVxdWFscygiYWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N3A6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3cToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJhYmMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDEsICIxIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIG5ld1RleHQuZXF1YWxzKCIxYmMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiMWJjIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZDoiLCBuZXdUZXh0LmVxdWFscygiXG4xYmMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGU6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGc6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiMWJjIikpOwotCQljb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiYSIpOwotCQljb250ZW50LnNldFRleHQoInBhY2thZ2UgdGVzdDtcbi8qIExpbmUgMVxuICogTGluZSAyXG4gKi9cbnB1YmxpYyBjbGFzcyBTaW1wbGVDbGFzcyB7XG59Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxNCwgMjMsICJcdC8qTGluZSAxXG5cdCAqIExpbmUgMlxuXHQgKi8iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIG5ld1RleHQuZXF1YWxzKCJwYWNrYWdlIHRlc3Q7XG5cdC8qTGluZSAxXG5cdCAqIExpbmUgMlxuXHQgKi9cbnB1YmxpYyBjbGFzcyBTaW1wbGVDbGFzcyB7XG59IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjliOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygicGFja2FnZSB0ZXN0OyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJcdC8qTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjllOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIlx0ICogTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIlx0ICovIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlnOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoInB1YmxpYyBjbGFzcyBTaW1wbGVDbGFzcyB7IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjloOiIsIGNvbnRlbnQuZ2V0TGluZSg1KS5lcXVhbHMoIn0iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9UZXh0X0NoYW5nZWRfRXZlbnQoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5hZGRUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JCXZlcmlmeSA9IDE7Ci0JCWNvbnRlbnQuc2V0VGV4dCgidGVzdGluZyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCXZlcmlmeSA9IDI7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5cbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMiwgImEiKTsKLQkJdmVyaWZ5ID0gMzsKLQkJY29udGVudC5zZXRUZXh0KCJhIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiXG5cbiIpOwotCQl2ZXJpZnkgPSA1OwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQl2ZXJpZnkgPSA2OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzXG5saW5lIDQiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIxLCA3LCAiIik7Ci0JCXZlcmlmeSA9IDc7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJdmVyaWZ5ID0gODsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMiwgIiIpOwotCQl2ZXJpZnkgPSA5OwotCQljb250ZW50LnNldFRleHQoIkwxXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMiwgInRlc3QiKTsKLQkJdmVyaWZ5ID0gMDsKLQkJY29udGVudC5yZW1vdmVUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dENoYW5nZWQoVGV4dENoYW5nZWRFdmVudCBldmVudCkgewotCX0KLQotCXB1YmxpYyB2b2lkIHRleHRDaGFuZ2luZyhUZXh0Q2hhbmdpbmdFdmVudCBldmVudCkgewotCQlzd2l0Y2ggKHZlcmlmeSkgewotCQkJY2FzZSAxIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA0IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDYgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA4IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgOSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDEwIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTIgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDEzIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTUgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE2IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTZhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTZiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNyA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE3YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE3YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTggOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOGI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE5IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTlhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTliOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSA0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjIwYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjIwYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRleHRTZXQoVGV4dENoYW5nZWRFdmVudCBldmVudCkgewotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3NmY0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLgotICogQ3JlYXRpb24gZGF0ZTogKDMvMjAvMjAwMSA2OjE5OjU4IFBNKQotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIFN0eWxlZFRleHRUZXN0IHsKLQkvKioKLQkgKiBTdHlsZWRUZXh0VGVzdCBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBTdHlsZWRUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBEb24ndCBmb3JnZXQsIHRoZSAqc3d0Ki5kbGwgd2lsbCBoYXZlIHRvIGJlIGNvcGllZCB0byBwcm9ncmFtIGRpcmVjdG9yeSBmb3IgdGhpcyB0byB3b3JrLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotCQl0cnkgewotCQkJU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoKTsKLQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJCXNoZWxsLnNldExheW91dChsYXlvdXQpOwotCi0JCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULlBVU0gpOwotCQkJYnV0dG9uLnNldFRleHQoIkFjdGlvbiIpOwotCQkJYnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKLQkJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiYnV0dG9uIHB1c2hlZCIpOwotCQkJCX0KLQkJCX0pOwotCi0JCQlTdHlsZWRUZXh0IHRleHQgPSBuZXcgU3R5bGVkVGV4dChzaGVsbCwgU1dULkJPUkRFUiArIFNXVC5IX1NDUk9MTCArIFNXVC5WX1NDUk9MTCk7Ci0JCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCQl0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJCS8vCi0JCQkvLwkJU3RyaW5nIGZpbGVOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpICsgIlxcIiArICJqYXBhbmVzZV91dGYtMTYudHh0IjsKLQkJCS8vCQlTdHJpbmcgZW5jb2RpbmcgPSAiVW5pY29kZUJpZyI7Ci0KLQkJCVN0cmluZyBmaWxlTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKSArICJcXCIgKyAiamFwYW5lc2VfY3AxMjUyLnR4dCI7Ci0JCQlTdHJpbmcgZW5jb2RpbmcgPSAiQ3AxMjUyIjsKLQkJCS8vc3VuLmlvLkJ5dGVUb0NoYXJDb252ZXJ0ZXIuZ2V0RGVmYXVsdCgpLnRvU3RyaW5nKCk7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBmaWxlOiAiICsgZmlsZU5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICBFbmNvZGluZzogIiArIGVuY29kaW5nKTsKLQotCQkJSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVOYW1lKTsKLQkJCUlucHV0U3RyZWFtUmVhZGVyIGluU3RyZWFtID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluLCBlbmNvZGluZyk7Ci0JCQkvL1JlYWRlciBpblN0cmVhbSA9IG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKTsKLQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCXdoaWxlIChpblN0cmVhbS5yZWFkeSgpKSB7Ci0JCQkJc2IuYXBwZW5kKChjaGFyKSBpblN0cmVhbS5yZWFkKCkpOwotCQkJfQotCQkJU3RyaW5nIGlucHV0U3RyaW5nID0gc2IudG9TdHJpbmcoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTGVuZ3RoIG9mIGlucHV0OiAiICsgaW5wdXRTdHJpbmcubGVuZ3RoKCkpOwotCQkJLy8KLQkJCXRleHQuc2V0VGV4dChpbnB1dFN0cmluZyk7Ci0KLQkJCXNoZWxsLnNldFNpemUoNDAwLCAyMDApOwotCQkJc2hlbGwub3BlbigpOwotCi0JCQlEaXNwbGF5IGRpc3BsYXkgPSBzaGVsbC5nZXREaXNwbGF5KCk7Ci0JCQl3aGlsZSAoc2hlbGwgIT0gbnVsbCAmJiAhc2hlbGwuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKQotCQkJCQlkaXNwbGF5LnNsZWVwKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWYwY2ZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucGFyc2VyLkpTUFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja01hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLklTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkRPTU1vZGVsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhNTFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudCBmTW9kZWw7Ci0JcHJvdGVjdGVkIElET01Nb2RlbCB0cmVlOwotCXByb3RlY3RlZCBpbnQgZXZlbnRDYXNlID0gMTsKLQlwcm90ZWN0ZWQgYm9vbGVhbiBldmVudFJlc3VsdDsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRSA9IDEwMDE7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0UgPSAxMDAyOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfUkVHSU9OX0NIQU5HRURfRVZFTlRfQ0FTRSA9IDEwMDM7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRSA9IDEwMDQ7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19OT19DSEFOR0VfRVZFTlRfQ0FTRSA9IDEwMDU7Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXJQcm94eSBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIG5ld01vZGVsKE5ld0RvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCWhhbmRsZUV2ZW50KHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG5vQ2hhbmdlKE5vQ2hhbmdlRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCWhhbmRsZUV2ZW50KHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIG5vZGVzUmVwbGFjZWQoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCWhhbmRsZUV2ZW50KHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlZ2lvbkNoYW5nZWQoUmVnaW9uQ2hhbmdlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25zUmVwbGFjZWQoUmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCWhhbmRsZUV2ZW50KHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lclByb3h5IHByb3h5ID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyUHJveHkoKTsKLQotCS8qKgotCSAqIE1pbmltaXphdGlvblRlc3QgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgVW5pdFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGhhbmRsZUV2ZW50KFN0cnVjdHVyZWREb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCWV2ZW50UmVzdWx0ID0gZmFsc2U7Ci0JCXN3aXRjaCAoZXZlbnRDYXNlKSB7Ci0JCQljYXNlIDEgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTm9DaGFuZ2VFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOb0NoYW5nZUV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA1IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMyA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgzID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDYgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDIgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJaWYgKCI8Qj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMCkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCWlmICgiPC9CPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgxKS5nZXRUZXh0KCkpKSB7Ci0JCQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMSA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDggOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDIgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJLy9pZiAoIjxCPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgwKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkvL2lmICgiPC9CPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgxKS5nZXRUZXh0KCkpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDkgOgotCQkJY2FzZSAxMCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDIgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlpZiAoIjxURD4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMCkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCWlmICgiPC9URD4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMSA6Ci0JCQljYXNlIDEyIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWlmICgiPFREPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgwKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJaWYgKCI8L1REPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgxKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDEzIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMyA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3UmVnaW9ucygpLnNpemUoKSkKLQkJCQkJCQlpZiAoMyA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgzID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDEgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTUgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlSZWdpb25DaGFuZ2VkRXZlbnQgcmVnaW9uQ2hhbmdlZEV2ZW50ID0gKFJlZ2lvbkNoYW5nZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci0JCQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uID0gKChSZWdpb25DaGFuZ2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCQkJCWlmICgiYiAiLmVxdWFscyhkb2N1bWVudFJlZ2lvbi5nZXRGdWxsVGV4dChyZWdpb25DaGFuZ2VkRXZlbnQuZ2V0UmVnaW9uKCkpKSkgewotCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCWlmICgxID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDEgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlpZiAoMyA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3UmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTggOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgyID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJaWYgKDIgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE5IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjAgOgotCQkJY2FzZSAyMSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIyIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjMgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyNSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjYgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkvLyBKU1A1Ci0JCQljYXNlIDI3IDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI4IDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI5IDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMwIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJLy8gSlNQNgotCQkJY2FzZSAzMSA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzMiA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0IC0tIHRoaXMgaXMgZGVmaW5pdGVseSBhIGNoYW5nZQotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgcmVnaW9uc1JlcGxhY2VkRXZlbnQgPSAoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotCQkJCQkJaWYgKDEgPT0gcmVnaW9uc1JlcGxhY2VkRXZlbnQuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbnNSZXBsYWNlZEV2ZW50LmdldE9sZFJlZ2lvbnMoKS5nZXQoMCk7Ci0JCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiA9IHJlZ2lvbnNSZXBsYWNlZEV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJCQkJCVN0cmluZyB0ZXh0ID0gZG9jdW1lbnRSZWdpb24uZ2V0VGV4dChyZWdpb24pOwotCQkJCQkJCWlmICgiPCUgYWFhICU+Ii5lcXVhbHModGV4dCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCX0KLQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IG5vZGVzUmVwbGFjZWRFdmVudCA9IChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci0JCQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCByZWdpb25zID0gbm9kZXNSZXBsYWNlZEV2ZW50LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKTsKLQotCQkJCQkJaWYgKDEgPT0gcmVnaW9ucy5nZXRMZW5ndGgoKSkgewotCQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gcmVnaW9ucy5pdGVtKDApOwotCQkJCQkJCVN0cmluZyB0ZXh0ID0gcmVnaW9uLmdldFRleHQoKTsKLQkJCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbih0ZXh0KTsKLQkJCQkJCQlpZiAoIjxjPCUgYWFhICIuZXF1YWxzKHRleHQpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMzIDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCS8vCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQljYXNlIDM1IDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5jZWQgdG8gUmVnaW9uc1JlcGxhY2VkIDIwMDIsIDkvMTEgKGF0dHJpYnV0ZSB2YWx1ZSB0byByZWdpb24gY29udGFpbmVyKQotCQkJCQkvLwkJCQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZS5naWZcIj48cD4iOwotCQkJCQkvLwkJCQkJU3RyaW5nIGNoYW5nZXMgPSAiPCI7Ci0JCQkJCS8vCQkJCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPC5naWZcIj48cD4iOwotCi0JCQkJCS8vCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzcgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM4IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzkgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA0MCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2FzZSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBHRU5FUklDX1JFR0lPTl9DSEFOR0VEX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5ld0RvY3VtZW50RXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIEdFTkVSSUNfTk9fQ0hBTkdFX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTm9DaGFuZ2VFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJZGVmYXVsdCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOZXdEb2N1bWVudEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTdGFydHMgdGhlIGFwcGxpY2F0aW9uLgotCSAqIEBwYXJhbSBhcmdzIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgewotCQkJcnVuQWxsKCk7Ci0JCX0KLQkJZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCQkJU3RyaW5nIG1ldGhvZFRvUnVuID0gYXJnc1swXS50cmltKCk7Ci0JCQlydW5PbmUobWV0aG9kVG9SdW4pOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJ1bkFsbCgpIHsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHJ1bk9uZShTdHJpbmcgbWV0aG9kTmFtZSkgewotCQlUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQlUZXN0Q2FzZSB0ZXN0ID0gbmV3IFVuaXRUZXN0cyhtZXRob2ROYW1lKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3QodGVzdCk7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bih0ZXN0U3VpdGUpOwotCi0JfQotCi0JLyoqCi0JICogU2V0IHVwIGFuIFhNTCBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwWE1MKCkgewotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZk1vZGVsID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCWZNb2RlbC5hZGREb2N1bWVudENoYW5nZWRMaXN0ZW5lcihwcm94eSk7Ci0KLQkJdHJlZSA9IG5ldyBET01Nb2RlbEltcGwoKTsKLQotCQlpZiAodHJlZSAhPSBudWxsKSB7Ci0JCQlmTW9kZWwuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCQkJdHJlZS5zZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoZk1vZGVsKTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogU2V0IHVwIGEgSlNQIG1vZGVsCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXBKU1AoKSB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmTW9kZWwgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LmpzcCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJZk1vZGVsID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgSlNQU291cmNlUGFyc2VyKCkpOwotCi0JCWZNb2RlbC5hZGREb2N1bWVudENoYW5nZWRMaXN0ZW5lcihwcm94eSk7Ci0KLQkJdHJlZSA9IG5ldyBET01Nb2RlbEltcGwoKTsKLQotCQlpZiAodHJlZSAhPSBudWxsKSB7Ci0JCQlmTW9kZWwuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCQkJdHJlZS5zZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoZk1vZGVsKTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgc2ltcGxlVGVzdCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gOTk7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICIiOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8YT48L2E+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQkvLwotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJLy8KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgc2ltcGxlVGVzdDIoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiIjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPGE+PC9hPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHNpbXBsZVRlc3QzKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA5OTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxhPjwvYT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6MTY6MDIgUE0pCi0JICogQHJldHVybiBqdW5pdC5mcmFtZXdvcmsuVGVzdAotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVW5pdFRlc3RzLmNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6Mjg6NTkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUJlZ2lubmluZygpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNDsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDEwLCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjI3OjMxIFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVFbmQoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDM7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxERUY+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDEwLCA1LCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlLmdpZlwiPjxwPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPC5naWZcIj48cD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxNzsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWV2ZW50Q2FzZSA9IDM1OwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgMTogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzY7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiJSI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlLmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMTg7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzNzsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICIgIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUgLmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMTk7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMzogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzODsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJhYiAiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JSBhYiAuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyMDsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM5OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIiUiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JSBhYiAlLmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjM7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCA1OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgNTogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSA0MDsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICI+IjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUgYWIgJT4uZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyNDsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDY6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA2OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8YSA+YzwvYT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8JT0gYiAlPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YSA8JT0gYiAlPj5jPC9hPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDM7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVlcEVtYmVkZGVkSlNQKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxzY3JpcHQ+PGEgICA+YzwvYT48L3NjcmlwdD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8JT0gYiAlPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8c2NyaXB0PjxhIDwlPSBiICU+ICA+YzwvYT48L3NjcmlwdD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxMTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHRlc3RSID0gZk1vZGVsLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDExKTsKLQkJU3RyaW5nIHRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlPiAgPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlPiAgPiIpKTsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IHRlc3RSLmdldFJlZ2lvbnMoKTsKLQotCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25MaXN0LmdldCgwKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCJhIikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEgIikpOwotCi0JCXJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDIpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IGIgJT4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IGIgJT4gICIpKTsKLQotCQkvLyA9PT0JCi0KLQkJSVRleHRSZWdpb25Db250YWluZXIgY1JlZ2lvbiA9IChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgcmVnaW9uOwotCi0JCUlUZXh0UmVnaW9uTGlzdCBlUmVnaW9ucyA9IGNSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJVGV4dFJlZ2lvbiBlUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDEpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgIikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDIpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiJT4iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiJT4iKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgzKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgICIpKTsKLQotCQkvLyA9PT09Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMyk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIj4iKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVlcEVtYmVkZGVkSlNQMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8c2NyaXB0PjxhICAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCU9IGIgJSI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8c2NyaXB0PjxhIDwlPSBiICUgID5jPC9hPjwvc2NyaXB0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDExOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gdGVzdFIgPSBmTW9kZWwuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoMTEpOwotCQlTdHJpbmcgdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjxhIDwlPSBiICUgID4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPGEgPCU9IGIgJSAgPiIpKTsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IHRlc3RSLmdldFJlZ2lvbnMoKTsKLQotCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25MaXN0LmdldCgwKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCJhIikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEgIikpOwotCi0JCXJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDIpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IGIgJSAgPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlICA+IikpOwotCi0JCS8vID09PQkKLQotCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBjUmVnaW9uID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb247Ci0KLQkJSVRleHRSZWdpb25MaXN0IGVSZWdpb25zID0gY1JlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCUlUZXh0UmVnaW9uIGVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMCk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IikpOwotCi0JCWVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgYiAlICA+IikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICUgID4iKSk7Ci0KLQotCQkvLyA9PT09CQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWVwRW1iZWRkZWRKU1AzKCkgewotCQkvLyBDTVZDIDI0NTU4NgotCQkvLyB0aGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1cmUgQ29udGV4dFJlZ2lvbkNvbnRhaW5lciByZXR1cm5zIHdoYXQgd2UgZXhwZWN0Ci0JCXNldFVwSlNQKCk7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8aHRtbD48aGVhZD48c2NyaXB0PiA8JSEgU3RyaW5nIHRlc3R2YXIgPSBcInRlc3R2YXJcIjsgJT4gdmFyIHRlc3QgPSA8JT0gdGVzdHZhciAlPiA8L3NjcmlwdD48L2hlYWQ+PC9odG1sPiI7Ci0JCVN0cmluZyBleHBlY3RlZFRleHQgPSAiPCUhIFN0cmluZyB0ZXN0dmFyID0gXCJ0ZXN0dmFyXCI7ICU+IjsKLQkJKChYTUxTb3VyY2VQYXJzZXIpIGZNb2RlbC5nZXRQYXJzZXIoKSkuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzY3JpcHQiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5nZXRSZWdpb25MaXN0KCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzY3JpcHRCbG9ja1JlZ2lvbiA9IGZNb2RlbC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgyMSk7Ci0JCUlUZXh0UmVnaW9uTGlzdCBibG9ja1JlZ2lvbnMgPSBzY3JpcHRCbG9ja1JlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCUlUZXh0UmVnaW9uQ29udGFpbmVyIGpzcERlY2wgPSAoSVRleHRSZWdpb25Db250YWluZXIpIGJsb2NrUmVnaW9ucy5nZXQoMSk7Ci0JCVN0cmluZyBmdWxsVGV4dCA9IGpzcERlY2wuZ2V0RnVsbFRleHQoKTsKLQotCQkvL2Fzc2VydFRydWUoIkNvbnRleHRSZWdpb25Db250YWluZXIuZ2V0RnVsbFRleHQoKSIsIGZ1bGxUZXh0LmVxdWFscyhleHBlY3RlZFRleHQpKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb250ZXh0UmVnaW9uQ29udGFpbmVyLmdldEZ1bGxUZXh0KCkgdmFsdWUgaW5jb3JyZWN0OiAiLCBleHBlY3RlZFRleHQsIGZ1bGxUZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMSgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gMjM7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICJhYmNkPCU9IGFiYyAlPmVmZ2giOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiYWJjZDwgJT0gYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA1OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDIoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDI0OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiYWJjZDwlIGFiYyAlPmVmZ2giOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiYWJjZDwgJSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiICI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDU7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMygpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gMjU7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JT0gYWJjICU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwgJT0gYWJjICU+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiICI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDQoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDI2OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCUgYWJjICU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwgJSBhYmMgJT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgR2l2ZSBhIEpTUCBzY3JpcHRsZXQgOgotCSA8JSBhYWEgJT4KLQkgV2hlbiBhbiB1c2VyIHR5cGVzICI8YmI+IiBqdXN0IGJlZm9yZQotCSB0aGUgSlNQIHNjcmlwdGxldCA6Ci0JICgxKSBXaGVuICc8JyBpcyB0eXBlZCwgcmVnaW9uc1JlcGxhY2VkKCkKLQkgaXMgY2FsbGVkIGZvciAiPCUiLgotCSAoMikgV2hlbiAnYicgaXMgdHlwZWQsIG5vZGVzUmVwbGFjZWQoKQotCSBpcyBjYWxsZWQgZm9yICI8PCUiIGFuZCAiIGFhYSAiLgotCSAoMykgV2hlbiAnYicgaXMgdHlwZWQgYWdhaW4sIGZpbmFsbHksCi0JIG5vZGVzUmVwbGFjZWQoKSBpcyBjYWxsZWQgZm9yCi0JICI8YjwlIGFhYSIgYW5kICIlPiIuCi0JIFRoZSBlbmQgSlNQIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2hvdWxkIGJlCi0JIHJlcGFyc2VkIGF0ICgxKSwgYnV0IG5vdCB3YWl0IHVudGlsICgzKS4KLQkgCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUDUoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JSBhYWEgJT48cD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjw8JSBhYWEgJT48cD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZXZlbnRDYXNlID0gMjc7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoInBhcnQgMTogdGV4dCB1cGRhdGUiLCBleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCS8vIHN0ZXAgMgotCQkvLyA/IGRvZXMgYXNzZXJ0VHJ1ZSBwcmV2ZW50IHJlc3QgZnJvbSBleGVjdXRpbmcgaWYgJ2ZhbHNlJz8KLQkJLy8gYW5zOiB5ZXMKLQkJZXZlbnRDYXNlID0gMjg7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiPCUgYWFhICU+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoInBhcnQgMjogdGV4dCB1cGRhdGUiLCBleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDI5OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImIiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YmI8JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDI7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscygicGFydCAzOiB0ZXh0IHVwZGF0ZSIsIGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzA7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiPiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiYj48JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDM7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscygicGFydCA0OiB0ZXh0IHVwZGF0ZSIsIGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JIEV4YW1wbGUgNCkKLQkgCi0JIEdpdmVuIHR3byBKU1Agc2NyaXB0bGV0cyA6Ci0JIDwlIGFhYSAlPjwlIGJiYiAlPgotCSBXaGVuIGFuIHVzZXIgdHlwZXMgIjxjY2NjPiIganVzdCBiZWZvcmUKLQkgdGhlIEpTUCBzY3JpcHRsZXQsIHdhdGNoIHRoZSBJU3RydWN0dXJlZERvY3VtZW50IGV2ZW50cwotCSBvbiBlYWNoIGNoYXJhY3RlciB0eXBpbmcuCi0JIFlvdSB3aWxsIHNlZSB0aGUgbmV4dCBKU1AgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBpcyByZXBhcnNlZAotCSAodG8gYmUgYnJva2VuIGludG8gb3RoZXIgdHlwZSBvZiBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKQotCSBvbmUgYnkgb25lIG9uIGVhY2ggZXZlbnQuCi0JIEJ1dCBpdCBzaG91bGQgYmUgYXQgb25jZSBhdCB0aGUgZmlyc3QgZXZlbnQuCi0JIE9sZCBDb21wb25lbnQ6IHdzYS53ZWIucGFnZWVkaXRpbmcKLQkgTmV3IENvbXBvbmVudDogd3NhLndlYi54bWxlZGl0b3IKLQkgCi0JIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1A2KCkgIHsKLQkJLy8gY2F1dGlvbiAuLi4gd2UncmUgcmUtdXNpbmcgZXZlbnQgY2hlY2tzIGZyb20gSlNQNQotCi0JCXNldFVwSlNQKCk7Ci0KLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPDwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQkJZXZlbnRDYXNlID0gMzE7Ci0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDMyOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImMiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YzwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzMzsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJjIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGNjPCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM0OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIj4iOwotCQlleHBlY3RlZFN0cmluZyA9ICI8Y2M+PCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAzOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogdGhpcyB0ZXN0IGVhc2lseSByZXR1cm5zICJvayIgZXZlbiB3aXRoIHRoZSBuby1zcGFjZSBidWcuIEl0cyBtb3N0bHkgdG8KLQkgKiAiaGFuZCBleGFtaW5lIiB0aGUgc3RydWN0dXJlZERvY3VtZW50IGNyZWF0ZWQgZnJvbSB0aGUgaW5pdGlhbCBzZXRUZXh0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1BEaXJlY3RpdmUoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlQGluY2x1ZGUlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlQiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCVAaW5jbHVkZSU+VCI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDEyOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8gID8KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjUzOjA4IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTA7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8VEQ+PC9URD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8VEQ+PC9URD48VEQ+PC9URD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgOSwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMDo1NjowNCBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTEoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDExOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFhYWD48VEQ+PC9URD48WFhYPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxYWFg+PFREPjwvVEQ+PFREPjwvVEQ+PFhYWD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNSwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMDo1OTozOSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTIoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDEyOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFhYWD48VEQ+PC9URD48WFhYPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxYWFg+PFREPjwvVEQ+PFREPjwvVEQ+PFhYWD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTQsIDksICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDA6NTkgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDEzKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxMzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PEpLTD48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCA1LCAiPEpLTD4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDI6MTkgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE0KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxNDsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPlxyXHIgIDwvYT4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8YT5ccjxiPlxyICA8L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDQsIDMsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDM6NTMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE1KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxNTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjxiID48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiPjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDUsIDAsICIgIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA1OjI3IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxNigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTY7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YiB6PjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgPjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICJ6Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA2OjMzIEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxNygpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTc7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YiB6PVwidFwiPjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgej48L2I+PC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA2LCAxLCAiej1cInRcIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowOToxNyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTgoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE4OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGMgej48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiIHo+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNCwgMywgImMgeiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMToxMDozMCBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTkoKSAgewotCi0JCWV2ZW50Q2FzZSA9IDE5OwotCQlzZXRVcEpTUCgpOwotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEJPRFk+XHI8SU1HIHNyYz1cIjwlPVxyPC9CT0RZPlxyIik7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8Qk9EWT5ccjxJTUcgc3JjPVwiPCU9UVxyPC9CT0RZPlxyIjsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMjAsIDAsICJRIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MTI6MDUgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDIwKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCi0JCWV2ZW50Q2FzZSA9IDIwOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyQk9EWSB7XHJccn0tLT5ccjwvU1RZTEU+XHIiOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8U1RZTEUgVFlQRT1cInRleHQvY3NzXCI+XHI8IS0tXHItLT5ccjwvU1RZTEU+XHIiKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMjgsIDEsICJcckJPRFkge1xyXHJ9Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjMyOjIzIEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QyMSgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQotCQlldmVudENhc2UgPSAyMTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCIgXCJcIj5ccjxIVE1MPlxyPEhFQUQ+XHIgICAgICA8TUVUQSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTFcIiBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCI+XHI8TUVUQSBuYW1lPVwiR0VORVJBVE9SXCIgY29udGVudD1cIklCTSBXZWJTcGhlcmUgUGFnZSBEZXNpZ25lciBWNC4xLjAgZm9yIFdpbmRvd3NcIj5ccjxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2Nzc1wiIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIj5ccjxUSVRMRT48L1RJVExFPlxyPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyQk9EWSB7XHJccn0tLT5ccjwvU1RZTEU+XHIiOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiIFwiXCI+XHI8SFRNTD5ccjxIRUFEPlxyICAgICAgPE1FVEEgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xXCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiPlxyPE1FVEEgbmFtZT1cIkdFTkVSQVRPUlwiIGNvbnRlbnQ9XCJJQk0gV2ViU3BoZXJlIFBhZ2UgRGVzaWduZXIgVjQuMS4wIGZvciBXaW5kb3dzXCI+XHI8TUVUQSBjb250ZW50PVwidGV4dC9jc3NcIiBodHRwLWVxdWl2PVwiQ29udGVudC1TdHlsZS1UeXBlXCI+XHI8VElUTEU+PC9USVRMRT5ccjxTVFlMRSBUWVBFPVwidGV4dC9jc3NcIj5ccjwhLS1cci0tPlxyPC9TVFlMRT5cciIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAzNDMsIDEsICJcckJPRFkge1xyXHJ9Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDU6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDkoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDk7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8VEQ+PC9URD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8VEQ+PC9URD48VEQ+PC9URD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjQ1OjI5IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2RBdHRyaWJ1dGVOYW1lUmVwbGFjZTEoKSAgewotCi0JCS8vdGVzdEV2ZW50ID0gMjI7Ci0JCS8vdGFncyA9ICI8dGFnTmFtZSBhYmM9XCJic2ZcIj4iOwotCQkvL3Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZXBsYWNlbWVudCh0ZXN0RXZlbnQsIHRhZ3MsICJhYmNkZSIsIjx0YWdOYW1lIGFiY2RlPVwiYnNmXCI+IiwgOSwgMyk7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMjI7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8dGFnTmFtZSBhYmM9XCJic2ZcIj4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHRhZ05hbWUgYWJjZGU9XCJic2ZcIj4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICJhYmNkZSI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDk7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAzOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6MzU6NDEgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1vZGlmeU1pZGRsZSgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PEpLTD48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxNSwgIjxBQkM+PEpLTD48R0hJPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjA2OjMzIFBNKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZTEoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxERUY+PEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDAsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoyNjowNSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9DaGFuZ2UyKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAyOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48REVGPjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDE1LCAiPEFCQz48REVGPjxHSEk+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6Mzg6MjUgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbWlsYXJTdGFydCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjwvQj48Qj48L0I+PC9QPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxQPjxCPjwvQj48L1A+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDMsIDAsICI8Qj48L0I+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDM6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbWlsYXJTdGFydEVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gODsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjxCPjwvQj48L0I+PC9QPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxQPjxCPjwvQj48L1A+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICI8Qj48L0I+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDE6NDYgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbWlsaWFyRW5kKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA3OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFA+PEI+PC9CPjxQPjxQPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxQPjxCPjwvQj48UD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDAsICI8UD4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUYWdSZURldGVjdGlvbigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJLy8gKG5zZCkgMjAwMy4xMi4xMCAtIGNoYW5nZWQgZnJvbSBOb2Rlc1JlcGxhY2VkIHRvIFJlZ2lvbnNSZXBsYWNlZCBzaW5jZSB0aGUgc3RhcnQgY29uZGl0aW9uIHdhcyBjaGFuZ2VkCi0JCS8vIGZyb20gYmVpbmcgMyBkb2N1bWVudCByZWdpb25zIHRvIDQgc2luY2UgInNjcmlwdCIgaXMgbm90ICduZXN0YWJsZScKLQkJLy9ldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJCi0JCS8vIHJldmVydGVkIDIwMDQuMDQuMDUKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotLy8JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+dGVzdDw8U0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+dGVzdDxTPFNDUklQVD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA4OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGFnUmVEZXRlY3Rpb24yKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTl9DSEFOR0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PDxTQ1JJUFQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiUyI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PDxTQ1JJUFRTPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE1OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGFnUmVEZXRlY3Rpb24zKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PHRlc3Q+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiJSI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PCV0ZXN0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDg7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAoZk1vZGVsICE9IG51bGwpCi0JCQlmTW9kZWwucmVtb3ZlRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIocHJveHkpOwotCX0KLQotCS8qKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQYWdlRGlyZWN0aXZlKCkgIHsKLQkJYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7Ci0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OTsgLy9HRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JUBwYWdlIGxhbmc9XCJqYXZhXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICJzIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFzXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxODsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWlmICh2ZXJib3NlKSB7Ci0JCQlEZWJ1Zy5kdW1wKGZNb2RlbCwgdHJ1ZSk7Ci0JCX0KLQotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCA9IGZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCS8vCWFzc2VydFRydWUocmVzdWx0KTsgLy8gJiYgZXZlbnRSZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCS8vYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0cnVjdHVyZWQgZG9jdW1lbnQ6Iik7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEZWJ1Zy5kdW1wKGRvY3VtZW50LCB0cnVlKTsKLQkJfQotCi0JCS8vIG5vdyBkZWxldGUgcXVvdGUKLQkJY2hhbmdlcyA9ICIiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8JUBwYWdlIGxhbmc9XCJqYXZhc1wiIDxTQ1JJUFQ+dmFyIDwlIHRlc3QgJT4gU3RyaW5nPC9TQ1JJUFQ+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMTsKLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJzdHJ1Y3R1cmVkIGRvY3VtZW50OiIpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRGVidWcuZHVtcChkb2N1bWVudCwgdHJ1ZSk7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYWdlZGlyZWN0aXZlL1Rlc3RQYWdlRGlyZWN0aXZlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQxNjY5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYWdlZGlyZWN0aXZlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5QYWdlRGlyZWN0aXZlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5FbWJlZGRlZFhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqLwotcHVibGljIGNsYXNzIFRlc3RQYWdlRGlyZWN0aXZlIGV4dGVuZHMgVGVzdENhc2UgewotCi0JY2xhc3MgTXlFbWJlZGRlZEZhY3RvcnkgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXJGYWN0b3J5IHsKLQotCQlwdWJsaWMgSU5vZGVBZGFwdGVyIGFkYXB0KElOb2RlTm90aWZpZXIgb2JqZWN0KSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXB1YmxpYyBJTm9kZUFkYXB0ZXJGYWN0b3J5IGNvcHkoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCXJldHVybiB0eXBlIGluc3RhbmNlb2YgTXlBZGFwdGVkQ2xhc3M7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCQotCWNsYXNzIE15QWRhcHRlZENsYXNzIHsKLQkJLy8gZHVtbXkgY2xhc3MgaXMga2V5Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXN0UGFnZURpcmVjdGl2ZS4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0UGFnZURpcmVjdGl2ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmFzaWNQRCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiIGxhbmd1YWdlPVwiamF2YVwiICU+Iik7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0KLQkJU3RyaW5nIGNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJU3RyaW5nIGxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YSIsICJqYXZhIi5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCYXNpY0NoYW5nZWRQRCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiIGxhbmd1YWdlPVwiamF2YVwiICU+Iik7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0KLQkJU3RyaW5nIGNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJU3RyaW5nIGxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YSIsICJqYXZhIi5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCQkvLyBjaGFuZ2UgdG8gamF2YXNjcmlwdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA0MywgNCwgImphdmFzY3JpcHQiKTsKLQotCQljb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCWxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Ii5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCYXNpY0NoYW5nZWRQREJhY2soKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCi0JCVN0cmluZyBjb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCVN0cmluZyBsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmEiLCAiamF2YSIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQkJLy8gY2hhbmdlIHRvIGphdmFzY3JpcHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNDMsIDQsICJqYXZhc2NyaXB0Iik7Ci0KLQkJY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQkJLy8gY2hhbmdlIGJhY2sgdG8gamF2YQotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA0MywgMTAsICJqYXZhIik7Ci0KLQkJY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0RXF1YWxzKCJqYXZhIiwgbGFuZ3VhZ2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RW1iZWRkZWRUeXBlKCl7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZFhNTEhhbmRsZXIgPSBuZXcgRW1iZWRkZWRYTUwoKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIuc2V0RW1iZWRkZWRUeXBlKGVtYmVkZGVkWE1MSGFuZGxlcik7Ci0JCQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGhhbmRsZXIgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiaW5jb3JyZWN0IGVtYmVkZGVkIGhhbmRsZXIiLCBoYW5kbGVyID09IGVtYmVkZGVkWE1MSGFuZGxlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGFwdCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlOb2RlIG93bmVyTm9kZSA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQotCQlNb2RlbFF1ZXJ5QWRhcHRlciBlbWJlZGRlZEFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmFkYXB0KChJTm9kZU5vdGlmaWVyKSBvd25lck5vZGUsIE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IGFkYXB0IGVtYmVkZGVkIGFkYXB0ZXIiLCBlbWJlZGRlZEFkYXB0ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRkRW1iZWRkZWRGYWN0b3J5KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLmFkZEVtYmVkZGVkRmFjdG9yeShuZXcgTXlFbWJlZGRlZEZhY3RvcnkoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRMYW5ndWFnZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlwYWdlRGlyZWN0aXZlQWRhcHRlci5zZXRMYW5ndWFnZSgidGV4dC94bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgic2V0IGxhbmd1YWdlIGZhaWxlZCIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCkuZXF1YWxzKCJ0ZXh0L3htbCIpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFRhcmdldCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0VGFyZ2V0KCk7Ci0JCWFzc2VydE5vdE51bGwoInRhcmdldCBpcyBudWxsIiwgbm90aWZpZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVsZWFzZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlwYWdlRGlyZWN0aXZlQWRhcHRlci5yZWxlYXNlKCk7Ci0JCS8vIGNvbnNpZGVyZWQgInN1Y2Nlc3MiIGlmIGRvZXNuJ3QgdGhyb3VnaCBleGNlcHRpb24KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0JCi0JcHJpdmF0ZSBJRE9NTW9kZWwgY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCkgewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCQlyZXR1cm4gKElET01Nb2RlbCltb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZmYwNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGV4dC5JSlNQUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGV4dC5JQ1NTUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EZWNpbWFsRm9ybWF0OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpCi0JCQlmb3JtYXR0ZXIgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24geyAvLyBEVyAwNS8wMS8yMDAzIEkgbW9kaWZpZWQgdGhpcyB0ZXN0LCBhZnRlciBjcmVhdGluZyB0ZXN0NiwgCi0JCS8vIGFuZCBjaGFuZ2luZyBwYXJ0aW9uZXIgdG8gcGljayB1cCBlbmQgKj4gYXMgcGFydCBvZiBwYWdlIGRpcmVjdGl2ZQotCQkvLyBwYXJ0aXRpb24gKGZvciBoaWdobGlnaHRpbmcgdG8gd29yayByaWdodCkuCi0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxMDsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxMzsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0NPTU1FTlQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUNTU1BhcnRpdGlvbnMuU1RZTEUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDg7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTA0LmpzcCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULmxhbmd1YWdlLk1ZTEFOR1VBR0UiLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A1KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxNzsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDUuanNwIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDYuanNwIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMzE0NjMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDEzOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2J1ZzEzMTQ2My5qc3AiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJWE1MUGFydGl0aW9ucy5YTUxfQ0RBVEEsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkV9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGVyZkpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQkvL2ludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA2OwotCQkvL1hYWCBGSVhNRSEgCi0JCS8vbnQgblBhcnRpdGlvbnMgPSAKLQkJCWRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AiKTsKLQkJLy9hc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCS8vY2hlY2tTZWFtcygpOwotCQkvL3ZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5TVF9YTUxfUEksIElYTUxQYXJ0aXRpb25zLlNUX0RFRkFVTFRfWE1MLCBJWE1MUGFydGl0aW9ucy5TVF9YTUxfREVDTEFSQVRJT04sIElYTUxQYXJ0aXRpb25zLlNUX0RFRkFVTFRfWE1MLCBJWE1MUGFydGl0aW9ucy5TVF9YTUxfQ09NTUVOVCwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZW1wdHkueG1sIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUKLQkgKiBhbm90aGVyCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tTZWFtcygpIHsKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJaW50IG9mZnNldCA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb25zIGFyZSBub3QgY29udGlndW91cyEiLCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXQpOwotCQkJb2Zmc2V0ID0gcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSArIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQKLQkgKiBwYXJ0aXRpb25lciBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCQl9Ci0JCQkJaWYgKHVzZUZvcm1hdHRlcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSkgKyAiOiIgKyBmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpICsgIiAtICIgKyBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCQllbHNlCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb25zW2ldICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJfQotCQl9Ci0JCWNoZWNrU2VhbXMoKTsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLQotCS8qKgotCSAqIENvbXB1dGUgdGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSB1c2luZyB0aGUgZGVmYXVsdAotCSAqIHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIGludAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGludCBkb1RpbWVkQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCi0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgdG8gY29tcHV0ZSAiICsgcGFydGl0aW9ucy5sZW5ndGggKyAiOiAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIik7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBzaW5nbGUgcGFydGl0aW9uIGF0IHRoZSBnaXZlbiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBmaWxlLAotCSAqIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4gVGhpcyB0ZXN0IGFsbG93cyBmb3IKLQkgKiB2ZXJpZnlpbmcgdGhlIHplcm8tbGVuZ3RoIHBhcnRpdGlvbmluZyBiZWhhdmlvci4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBJVHlwZWRSZWdpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb24gZ2V0UGFydGl0aW9uVGVzdChTdHJpbmcgZmlsZW5hbWUsIGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCXBhcnRpdGlvbnMgPSBudWxsOwotCQlJVHlwZWRSZWdpb24gcGFydGl0aW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnRpdGlvbihvZmZzZXQpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb24uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbiArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJfQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlyZXR1cm4gcGFydGl0aW9uOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYXJlIG9mIHRoZSBnaXZlbiBwYXJ0aXRpb24gdHlwZXMKLQkgKiAKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uVHlwZXMoSVR5cGVkUmVnaW9uIGFjdHVhbFR5cGVkUmVnaW9uc1tdLCBTdHJpbmcgZXhwZWN0ZWRUeXBlc1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkrKykKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9uIHR5cGUgbWlzbWF0Y2hlZCIsIGV4cGVjdGVkVHlwZXNbaV0sIGFjdHVhbFR5cGVkUmVnaW9uc1tpXS5nZXRUeXBlKCkpOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYmVnaW4gYXQgdGhlIGdpdmVuIG9mZnNldHMKLQkgKiAKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb25zW10sIGludCBvZmZzZXRzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIm9mZnNldCBtaXNtYXRjaGVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXRzW2ldKTsKLQkJCWlmIChpID4gMCkgewotCQkJCWFzc2VydEVxdWFscygibGVuZ3RocyBtaXNhbGlnbmVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldE9mZnNldCgpICsgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2J1ZzEzMTQ2My5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2J1ZzEzMTQ2My5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNzIxOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9idWcxMzE0NjMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08anNwOnRleHQ+DQotCTwhW0NEQVRBWyA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PiBdXT4NCi08L2pzcDp0ZXh0Pg0KLTxqc3A6c2NyaXB0bGV0Pg0KLQk8IVtDREFUQVsNCi0JCVN0cmluZyB0ZXN0ID0gInNvbWV0aGluZyI7DQotCV1dPg0KLTwvanNwOnNjcmlwdGxldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2NvbXBhbnkzMDBrLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRmNWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODA5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+DQotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KLQk8aGVhZD4NCi0JCTx0aXRsZT5UaGUgVWx0aW1hdGUgQSBDb21wYW55PC90aXRsZT4NCi0JPC9oZWFkPg0KLQk8Ym9keT4NCi0JCTxwPg0KLQkJCTxpbWcgc3JjPSIuLi9iYW5uZXIuZ2lmIiBoZWlnaHQ9IjUxIiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4NCi0JCTwvcD4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8cD4NCi0JCQk8aW1nIHNyYz0iLi4vZm9vdGVyLmdpZiIgaGVpZ2h0PSIyNSIgd2lkdGg9IjY1OSIgYWx0PSIiIC8+DQotCQk8L3A+DQotCTwvYm9keT4NCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzdjNTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbCIgJT4NCi08anNwOmRpcmVjdGl2ZS5wYWdlIGNvbnRlbnRUeXBlPXRleHQvaHRtbCIgLz4NCi08SFRNTCBpZD0iPCUgamF2YSBjb2RlICJzdHJpbmciIHNlY3Rpb24gJT4iPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkMGVjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSAgICAgICA8cD4NCi0gICAgICAgPCUgdGVzdGluZyAiMTIzIiB0ZXN0IHRlc3Q7DQotICAgICAgIC8vIHRlc3QNCi0gICAgICAgb25lIHR3byB0aHJlZQ0KLSAgICAgICAlPg0KLSAgICAgICA8IS0tIDc4IC0tPg0KLSAgICAgICA8dGFibGUgaWQgPSAiPCUgdGVzdCAlPiIgYXR0cmliPWp1bms+DQotICAgICAgIDwvQk9EWT4NCi0gICAgICAgPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZmZDMxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxIVE1MPg0KLTxTQ1JJUFQ+DQotamF2YSBzY3JpcHQgc2VjdGlvbg0KLTwvU0NSSVBUPg0KLTxTVFlMRT4NCi0gICBzdHlsZSBzZWN0aW9uDQotICAgPC9TVFlMRT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA4NzA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPHNjcmlwdCBsYW5ndWFnZT0iTXlMYW5ndWFnZSI+PCU9ICJBIiAlPiAgICAgIA0KLSA8L1NDUklQVD4NCi08JS0tIC0tJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MTUxZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPGZvcm1hdHRpbmc+DQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLS8vCUNvcHlyaWdodCAyMDAwLDIwMDEgYnkgd3d3LmV4YW1wbGUuY29tDQotICBkb2N1bWVudC5VUkwgPSJhIjsNCi08L3NjcmlwdD4NCi0NCi08JSBTdHJpbmcgYSA9ICJhIjsgJT4NCi08JS0tIHRlc3QgY29tbWVudCAtLSU+DQotPCU9IA0KLQ0KLSIgICBhYWFhYSAiDQotDQotJT4NCi08JSEgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MTczZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDYuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAcGFnZSBsYW5ndWFnZT0iamF2YXNjcmlwdCIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNTUzNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9yZWdpc3RyeS9BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvckhUTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9EVERfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JEVEQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9KU1BfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JKU1AiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9DU1NfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJDU1MiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIENMQVNTTkFNRV9YTUxfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYTUwiOwotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGluc3RhbmNlID0gQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwuZ2V0SW5zdGFuY2UoKTsKLQkJYXNzZXJ0Tm90TnVsbChpbnN0YW5jZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFsbEZhY3RvcmllcygpIHsKLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeSBpbnN0YW5jZSA9IEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5zdGFuY2UuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlPYmplY3QgcHJvdmlkZXIgPSBudWxsOwotCi0JCS8vIGFsbCBwcm92aWRlcnMgZXhwZWN0ZWQgY2xhc3NuYW1lcyBhZGRlZCBoZXJlCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0NTU19GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0KLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBpdC5uZXh0KCk7Ci0JCQlrbm93bi5yZW1vdmUocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJfQotCi0JCS8vIHNob3VsZCBoYXZlIGVuY291bnRlcmVkIGFsbCBleHBlY3RlZCBhZGFwdGVyIGZhY3Rvcmllcy4KLQkJYXNzZXJ0RXF1YWxzKCJ1bmtub3duIChleHRyYSkgYWRhcHRlciBmYWN0b3JpZXMgZm91bmQiLCAwLCBrbm93bi5zaXplKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNYTUwoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNIVE1MKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBDTEFTU05BTUVfWE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNKU1AoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc0RURCgpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0RURF9GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgIm9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiLCBDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzQ1NTKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfQ1NTX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBDTEFTU05BTUVfSlNQX0ZBQ1RPUlkpOwotCX0KLQotCS8qKgotCSAqIENvbXBhcmUgdG8gYSBleHBlY3RlZCBsaXN0IG9mIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJzIChtYXkgYmUgc21hbGxlcgotCSAqIHRoYW4gdGhlIGFjdHVhbCBsaXN0KSBmb3IgYSBnaXZlbiBjb250ZW50VHlwZUlkLiBBdCBtaW5pbXVtIHRoZXNlCi0JICogZXhwZWN0ZWQgcHJvdmlkZXJzIG11c3QgYmUgZm91bmQgdG8gcGFzcy4KLQkgKiAKLQkgKiBAcGFyYW0gZXhwZWN0ZWQKLQkgKiBAcGFyYW0gY29udGVudFR5cGVJZAotCSAqLwotCXByaXZhdGUgdm9pZCBnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShMaXN0IGV4cGVjdGVkLCBTdHJpbmcgY29udGVudFR5cGVJZCwgU3RyaW5nIG5vdEV4cGVjdGVkQ2xhc3NuYW1lKSB7Ci0KLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwgaW5zdGFuY2UgPSAoQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwpIEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gaW5zdGFuY2UuZ2V0QWRhcHRlckZhY3Rvcmllcyhjb250ZW50VHlwZUlkKTsKLQkJT2JqZWN0IHByb3ZpZGVyID0gbnVsbDsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJcHJvdmlkZXIgPSBpdC5uZXh0KCk7Ci0JCQlleHBlY3RlZC5yZW1vdmUocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImVuY291bnRlcmVkIHByb3ZpZGVyOiAiICsKLQkJCS8vIHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCWFzc2VydFRydWUoIiFwcm92aWRlcjogIiArIG5vdEV4cGVjdGVkQ2xhc3NuYW1lICsgIiBzaG91bGRuJ3QgYmUgaW4gdGhlIGxpc3QhIiwgIW5vdEV4cGVjdGVkQ2xhc3NuYW1lLmVxdWFscyhwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSkpOwotCQl9Ci0JCS8vIHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IGZvdW5kIHRoZSBleHBlY3RlZCBmYWN0b3J5IChvciBmYWN0b3JpZXMpCi0JCWFzc2VydFRydWUoImV4dHJhIHByb3ZpZGVycyAoZXhwZWN0ZWQgbm9uZSk6ICIgKyBleHBlY3RlZCwgZXhwZWN0ZWQuaXNFbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9zZWFyY2gvSlNQU2VhcmNoVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk2OTAxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnNlYXJjaDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLklKYXZhU2VhcmNoQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5TZWFyY2hEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guU2VhcmNoUGF0dGVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLnNlYXJjaC5KU1BTZWFyY2hTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5zZWFyY2guSlNQU2VhcmNoU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmphdmEuc2VhcmNoLkJhc2ljSlNQU2VhcmNoUmVxdWVzdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0KLS8qKgotICogVGVzdHMgZm9yIEpTUFNlYXJjaFN1cHBvcnQKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BTZWFyY2hUZXN0cyBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgSUphdmFTZWFyY2hDb25zdGFudHMgewotCi0JLyoqCi0JICogdG8gYWNjZXB0IHNlYXJjaCBtYXRjaGVzCi0JICogYWRkQ2hlY2tNYXRjaCguLi4pIGZvciBtYXRjaGVzIHlvdSBleHBlY3QsIHJ1biBzZWFyY2ggc3VwcG9ydCwgY2hlY2tWYWxpZCgpIHRvIHNlZSBpZiBhbGwgZXhwZWN0ZWQgZ290IGhpdAotCSAqLwotCWNsYXNzIFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgZXh0ZW5kcyBCYXNpY0pTUFNlYXJjaFJlcXVlc3RvciB7Ci0KLQkJcHJpdmF0ZSBMaXN0IG1hdGNoZXMgPSBudWxsOwotCi0JCXB1YmxpYyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCkgewotCQkJdGhpcy5tYXRjaGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQl9Ci0KLQkJLy8gY2FsbGVkIGJ5IHNlYXJjaCBmcmFtZXdvcmsKLQkJcHJvdGVjdGVkIHZvaWQgYWRkU2VhcmNoTWF0Y2goSVN0cnVjdHVyZWREb2N1bWVudCBqc3BEb2N1bWVudCwgSUZpbGUganNwRmlsZSwgaW50IGpzcFN0YXJ0LCBpbnQganNwRW5kLCBTdHJpbmcganNwVGV4dCkgewotCQkJdGhpcy5tYXRjaGVzLnJlbW92ZShuZXcgVGVzdFNlYXJjaE1hdGNoKGpzcEZpbGUuZ2V0TmFtZSgpLCBqc3BTdGFydCwganNwRW5kKSk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBiZWdpblJlcG9ydGluZygpIHsKLQkJCS8vIGRvIG5vdGhpbmcgc2luY2Ugd2UgaGF2ZSBubyBVSSwgZG9uJ3QgYWNjZXNzIElTZWFyY2hSZXN1bHRWaWV3Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBlbmRSZXBvcnRpbmcoKSB7Ci0JCQkvLyBkbyBub3RoaW5nIHNpbmNlIHdlIGhhdmUgbm8gVUksIGRvbid0IGFjY2VzcyBJU2VhcmNoUmVzdWx0VmlldwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYWRkQ2hlY2tNYXRjaChTdHJpbmcgZmlsZW5hbWUsIGludCBqc3BTdGFydCwgaW50IGpzcEVuZCkgewotCQkJdGhpcy5tYXRjaGVzLmFkZChuZXcgVGVzdFNlYXJjaE1hdGNoKGZpbGVuYW1lLCBqc3BTdGFydCwganNwRW5kKSk7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBjaGVja1ZhbGlkKCkgewotCQkJcmV0dXJuIHRoaXMubWF0Y2hlcy5pc0VtcHR5KCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBjbGVhcigpIHsKLQkJCXRoaXMubWF0Y2hlcy5jbGVhcigpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdG8gdmFsaWRhdGUgc2VhcmNoIG1hdGNoZXMgKGNoZWNrTWF0Y2ggbWF0Y2hlcyBhIHNlYXJjaCBoaXQpCi0JICovCi0JY2xhc3MgVGVzdFNlYXJjaE1hdGNoIHsKLQotCQlwdWJsaWMgU3RyaW5nIGZpbGVuYW1lID0gbnVsbDsKLQkJcHVibGljIGludCBqc3BTdGFydCA9IC0xOwotCQlwdWJsaWMgaW50IGpzcEVuZCA9IC0xOwotCi0JCXB1YmxpYyBUZXN0U2VhcmNoTWF0Y2goU3RyaW5nIGZpbGVuYW1lLCBpbnQganNwU3RhcnQsIGludCBqc3BFbmQpIHsKLQkJCXRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKLQkJCXRoaXMuanNwU3RhcnQgPSBqc3BTdGFydDsKLQkJCXRoaXMuanNwRW5kID0ganNwRW5kOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLQkJCWlmICghKG9iaiBpbnN0YW5jZW9mIFRlc3RTZWFyY2hNYXRjaCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCQlUZXN0U2VhcmNoTWF0Y2ggcG9zc2libGUgPSAoVGVzdFNlYXJjaE1hdGNoKSBvYmo7Ci0JCQlyZXR1cm4gdGhpcy5maWxlbmFtZS5lcXVhbHNJZ25vcmVDYXNlKHBvc3NpYmxlLmZpbGVuYW1lKSAmJiB0aGlzLmpzcFN0YXJ0ID09IHBvc3NpYmxlLmpzcFN0YXJ0ICYmIHRoaXMuanNwRW5kID09IHBvc3NpYmxlLmpzcEVuZDsKLQkJfQotCX0KLQotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBKU1BTZWFyY2hUZXN0cygpIHsKLQkJc3VwZXIoIkpTUCBTZWFyY2ggVGVzdHMiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJdGhpcy5wcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCAianNwc2VhcmNoX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXRoaXMucHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl0aGlzLnByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgianVkbyIpOwotCi0JCS8vSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLmluZGV4V29ya3NwYWNlQW5kV2FpdCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5kZXhXb3Jrc3BhY2UoKSB7Ci0JCUpTUFNlYXJjaFN1cHBvcnQgc3VwcG9ydCA9IEpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKTsKLQkJU2VhcmNoRG9jdW1lbnQgZG9jID0gSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQLmphdmEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgcmV0cmlldmU6Jy9qdWRvL3NlYXJjaFRlc3RKU1AuamF2YSciLCBkb2MpOwotCi0JCWRvYyA9IHN1cHBvcnQuZ2V0U2VhcmNoRG9jdW1lbnQoIi9qdWRvL3NlYXJjaFRlc3RKU1AyLmphdmEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgcmV0cmlldmU6Jy9qdWRvL3NlYXJjaFRlc3RKU1AyLmphdmEnIiwgZG9jKTsKLQotCQlkb2MgPSBzdXBwb3J0LmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQMy5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQMy5qYXZhJyIsIGRvYyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaEZpZWxkKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgOTMsIDEwNik7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaEZvclRoaXMiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgRklFTEQsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX0VYQUNUX01BVENILCB0cnVlLCByZXF1ZXN0b3IsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaEZvclRoaXMiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoTWV0aG9kKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgMTQzLCAxNTgpOwotCQlyZXF1ZXN0b3IuYWRkQ2hlY2tNYXRjaCgic2VhcmNoVGVzdEpTUC5qc3AiLCAyOTgsIDMxNSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaEZvck1ldGhvZCIsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCBNRVRIT0QsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX0VYQUNUX01BVENILCB0cnVlLCByZXF1ZXN0b3IsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaEZvck1ldGhvZCIsIHJlcXVlc3Rvci5jaGVja1ZhbGlkKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hQYXR0ZXJuTWF0Y2goKSB7Ci0KLQkJVGVzdEpzcFNlYXJjaFJlcXVlc3RvciByZXF1ZXN0b3IgPSBuZXcgVGVzdEpzcFNlYXJjaFJlcXVlc3RvcigpOwotCQlyZXF1ZXN0b3IuYWRkQ2hlY2tNYXRjaCgic2VhcmNoVGVzdEpTUC5qc3AiLCA5MywgMTA2KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AyLmpzcCIsIDExNiwgMTI5KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AyLmpzcCIsIDE1MiwgMTY1KTsKLQkJSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLnNlYXJjaCgic2VhcmNoKiIsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCBGSUVMRCwgQUxMX09DQ1VSUkVOQ0VTLCBTZWFyY2hQYXR0ZXJuLlJfUEFUVEVSTl9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaFByb2plY3RDbGFzc2VzKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDE0OCwgMTU3KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDE3MCwgMTc5KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDI2MywgMjczKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDI5OSwgMzA5KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDQwOCwgNDE3KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AzLmpzcCIsIDQzMCwgNDM5KTsKLQkJSlNQU2VhcmNoU3VwcG9ydC5nZXRJbnN0YW5jZSgpLnNlYXJjaCgiSmVsbHliZWFuKiIsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCBUWVBFLCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9QQVRURVJOX01BVENILCB0cnVlLCByZXF1ZXN0b3IsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgYWxsIGV4cGVjdGVkIG1hdGNoZXM6IHNlYXJjaCoiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoTG9jYWxWYXJpYWJsZSgpIHsKLQotCQlJRE9NTW9kZWwgeG1sTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSVBhdGgganNwVGVzdEZpbGVQYXRoID0gbmV3IFBhdGgoImp1ZG8vU0VBUkNIL3NlYXJjaFRlc3RKU1AzLmpzcCIpOwotCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShqc3BUZXN0RmlsZVBhdGgpOwotCQkJeG1sTW9kZWwgPSAoSURPTU1vZGVsKSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJTW9kZWxIYW5kbGVyRm9ySlNQLmVuc3VyZVRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0geG1sTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgZG9jLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJSUphdmFFbGVtZW50IGVsZW1lbnQgPSB0cmFuc2xhdGlvbi5nZXRFbGVtZW50c0Zyb21Kc3BSYW5nZSgzNzcsIDM4NClbMF07Ci0KLQkJCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAzNzcsIDM4NCk7Ci0JCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKGVsZW1lbnQsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCByZXF1ZXN0b3IsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoeG1sTW9kZWwgIT0gbnVsbCkKLQkJCQl4bWxNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJcmV0dXJuIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3Qgb3BlbiBmaWxlOiIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdGhyZWFkZWQvVGhyZWFkZWRNb2RlbFJlYWRFZGl0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy90aHJlYWRlZC9UaHJlYWRlZE1vZGVsUmVhZEVkaXRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjZiMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy90aHJlYWRlZC9UaHJlYWRlZE1vZGVsUmVhZEVkaXRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudGhyZWFkZWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuSW5zZXJ0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQ3JlYXRlZCBmb3I6IGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMTY1MjMKLSAqLwotcHVibGljIGNsYXNzIFRocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiUFJPSkVDVF8xMTY1MjMiOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCXByaXZhdGUgY2xhc3MgVHJhbnNsYXRlSm9iIGV4dGVuZHMgSm9iIHsKLQkJU3RyaW5nIGZGaWxlUGF0aCA9IG51bGw7Ci0JCXB1YmxpYyBUcmFuc2xhdGVKb2IoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgam9ibmFtZSkgewotCQkJc3VwZXIoam9ibmFtZSk7Ci0JCQlmRmlsZVBhdGggPSBmaWxlbmFtZTsKLQkJfQotCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQlJRmlsZSBmID0gZ2V0T3JDcmVhdGVGaWxlKGZGaWxlUGF0aCk7Ci0JCQlKU1BUcmFuc2xhdG9yIHRyYW5zID0gbmV3IEpTUFRyYW5zbGF0b3IoKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZik7Ci0JCQkJaWYoc01vZGVsICE9IG51bGwpIHsKLQkJCQkJdHJhbnMucmVzZXQoKElET01Ob2RlKXNNb2RlbC5nZXRJbmRleGVkUmVnaW9uKDApLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJdHJhbnMudHJhbnNsYXRlKCk7Ci0JCQkJfQotCQkJCQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCFpc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQlpc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHsKLQkJY3JlYXRlUHJvamVjdCgpOwotCX0KLQkvKgotCSAqIGNyZWF0ZSAxMDAgdGVzdCBmaWxlcwotCSAqIHJlcGVhdCBkb1Rlc3QoKSBvbiB0aG9zZSAxMDAgZmlsZXMgNXgKLQkgKi8KLS8vCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzKCkgewotLy8KLS8vCQkvLyB0cnkgYW5kIGRvIHNvbWUgY29uY3VycmVudCBlZGl0aW5nL2luZGV4aW5nCi0vLwkJZm9yKGludCBqPTA7IGo8NTsgaisrKSB7Ci0vLwkJCWZvcihpbnQgaT0wOyBpPDEwMDsgaSsrKSAKLS8vCQkJCWRvVGVzdCgidGVzdF8iICsgaSArICIuanNwIik7Ci0vLwkJfQotLy8JfQotLy8JLyoKLS8vCSAqIGRvVGVzdCgpIG9uIHNhbWUgZmlsZSAxMDB4Ci0vLwkgKi8KLS8vCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzXzIoKSB7Ci0vLwotLy8JCS8vIHRyeSBhbmQgZG8gc29tZSBjb25jdXJyZW50IGVkaXRpbmcvaW5kZXhpbmcKLS8vCQlmb3IoaW50IGk9MDsgaTwxMDA7IGkrKykgCi0vLwkJCWRvVGVzdCgidGVzdF8xLmpzcCIpOwotLy8JfQotCQotCS8qCi0JICogZG9UZXN0KCkgKGluc2VydCB0ZXh0ICYgZWRpdCBkb20pCi0JICogYW5kIGZvcmNlIEpTUFRyYW5zbGF0aW9uIG9uIGFub3RoZXIgdGhyZWFkCi0JICogCi0JICogcmVwZWF0IGxvdHMgb2YgdGltZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0XzExNjUyM18zKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidF90ZXN0XzEuanNwIjsKLQkJCi0JCWdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBmaWxlbmFtZSk7Ci0JCQotCQlmb3IoaW50IGo9MDsgajwxMDA7IGorKykgewotCQkJVHJhbnNsYXRlSm9iIHRyYW5zbGF0ZUpvYiA9IG5ldyBUcmFuc2xhdGVKb2IoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZW5hbWUsICJKU1AgVHJhbnNsYXRlIEpvYiIpOwotCQkJdHJhbnNsYXRlSm9iLnNjaGVkdWxlKCk7Ci0JCQlwZXJmb3JtRWRpdHMoZmlsZW5hbWUpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwZXJmb3JtRWRpdHMoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCQotCQlJRmlsZSBibGFua0pzcEZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZVBhdGgpOwotCQkKLQkJLy8gZG9jdW1lbnQgZWRpdAotCQlpRG9jdW1lbnRJbnNlcnQoYmxhbmtKc3BGaWxlLCAgIjxsb2dpYzppdGVyYXRlIGlkPVwiaXRlcmF0ZUlEXCIgdHlwZT1cImphdmEudXRpbC5MaXN0XCIgaW5kZXhJZD1cImluZGV4SURcIj48L2xvZ2ljOml0ZXJhdGU+XG4iLDApOwotCQkKLQkJLy8gZG9tIGVkaXQKLQkJSGFzaE1hcCBhdHRycyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWF0dHJzLnB1dCgidXJpIiwgInN0cnV0cy1sb2dpYy50bGQiKTsKLQkJYXR0cnMucHV0KCJwcmVmaXgiLCAibG9naWMiKTsKLQkJZG9tSW5zZXJ0RWxlbWVudChibGFua0pzcEZpbGUsICJqc3A6ZGlyZWN0aXZlLnRhZ2xpYiIsIGF0dHJzLCAwKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0pzcEZpbGUgIT0gbnVsbCAmJiAhYmxhbmtKc3BGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rSnNwRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtKc3BGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvbUluc2VydEVsZW1lbnQoSUZpbGUgZmlsZSwgU3RyaW5nIHRhZ05hbWUsIEhhc2hNYXAgYXR0cmlidXRlcywgaW50IGluc2VydGlvblBvaW50KSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXNNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGZpbGUpOwotCQkJaWYoc01vZGVsICE9IG51bGwpIHsKLQkJCQlEb2N1bWVudCBkb21Eb2MgPSAoRG9jdW1lbnQpc01vZGVsLmdldEFkYXB0ZXIoRG9jdW1lbnQuY2xhc3MgKTsKLQkJCQlJbmRleGVkUmVnaW9uIHIgPSBzTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihpbnNlcnRpb25Qb2ludCk7Ci0JCQkJaWYociBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCQkJRWxlbWVudCBlID0gZG9tRG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0JCQkJCUl0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJCS8vIHNldCBhdHRyaWJ1dGVzCi0JCQkJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJCQkJU3RyaW5nIGF0dHIgPSAoU3RyaW5nKSBpdGVyLm5leHQoKTsKLQkJCQkJCVN0cmluZyB2YWwgPSAgKFN0cmluZylhdHRyaWJ1dGVzLmdldChhdHRyKTsKLQkJCQkJCQotCQkJCQkJQXR0ciBhdHRyTm9kZSA9IGRvbURvYy5jcmVhdGVBdHRyaWJ1dGUoYXR0cik7Ci0JCQkJCQlhdHRyTm9kZS5zZXRWYWx1ZSh2YWwpOwotCQkJCQkJZS5zZXRBdHRyaWJ1dGVOb2RlKGF0dHJOb2RlKTsKLQkJCQkJfQotCQkJCQlkb21Eb2MuaW5zZXJ0QmVmb3JlKGUsIChOb2RlKXIpOwotCQkJCQlkb21Eb2MuaW5zZXJ0QmVmb3JlKGRvbURvYy5jcmVhdGVUZXh0Tm9kZSgiXG4iKSwgKE5vZGUpcik7Ci0JCQkJfQotCQkJCXNNb2RlbC5zYXZlKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnRlZCBlbGVtZW50LCBkb20gc3R5bGUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaURvY3VtZW50SW5zZXJ0KElGaWxlIGZpbGUsIFN0cmluZyB0ZXh0LCBpbnQgaW5zZXJ0aW9uUG9pbnQpIHsKLQkJCi0JCS8vIGdldCB0aGUgZmlsZSdzIHRleHQgYnVmZmVyCi0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlJUGF0aCBwYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQl0cnkgewotCQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KHBhdGgsIG51bGwpOwotCi0JCQlJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQotCQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmYgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZpbGUuZ2V0RnVsbFBhdGgoKSk7Ci0JCQlkb2MgPSBidWZmLmdldERvY3VtZW50KCk7Ci0KLQkJCWJvb2xlYW4gc2F2ZVdoZW5Eb25lID0gIWJ1ZmYuaXNEaXJ0eSgpOwotCi0JCQlJbnNlcnRFZGl0IGluc2VydEVkaXQgPSBuZXcgSW5zZXJ0RWRpdChpbnNlcnRpb25Qb2ludCwgdGV4dCk7Ci0JCQlpbnNlcnRFZGl0LmFwcGx5KGRvYyk7Ci0KLQkJCS8vIGlmIHRoZSBkb2N1bWVudCB3YXMgbm90IHByZXZpb3VzbHkgZGlydHksIHNhdmUgaXQKLQkJCWlmIChzYXZlV2hlbkRvbmUpCi0JCQkJYnVmZi5jb21taXQobnVsbCwgZmFsc2UpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CQkKLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KHBhdGgsIG51bGwpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnRlZCB0ZXh0LCBmaWxlIGJ1ZmZlciBzdHlsZSIpOwotCX0KLQotLy8JcHJpdmF0ZSB2b2lkIHN0cnVjdHVyZWREb2NJbnNlcnQoU3RyaW5nIGZpbGVQYXRoKSB7Ci0vLwkJLy8gUFJPSkVDVF9OQU1FICsgIi9ibGFuay5qc3AiCi0vLwkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0vLwkJaWYgKGJsYW5rSnNwRmlsZSAhPSBudWxsKSB7Ci0vLwkJCXRyeSB7Ci0vLwkJCQlibGFua0pzcEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotLy8JCQl9Ci0vLwkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLS8vCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwotLy8JCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLS8vCQl0cnkgewotLy8JCQlzTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChibGFua0pzcEZpbGUpOwotLy8JCQlpZiAoc01vZGVsICE9IG51bGwpIHsKLS8vCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IHNNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLS8vCi0vLwkJCQlTdHJpbmcgaW5zZXJ0VGV4dDEgPSAiPGxvZ2ljOml0ZXJhdGUgaWQ9XCJpdGVyYXRlSURcIiB0eXBlPVwiamF2YS51dGlsLkxpc3RcIiBpbmRleElkPVwiaW5kZXhJRFwiPjwvbG9naWM6aXRlcmF0ZT5cbiI7Ci0vLwkJCQlTdHJpbmcgaW5zZXJ0VGV4dDIgPSAiPCVAdGFnbGliIHVyaT1cInN0cnV0cy1sb2dpYy50bGRcIiBwcmVmaXg9XCJsb2dpY1wiICU+XG4iOwotLy8KLS8vCQkJCXNEb2MucmVwbGFjZSgwLCAwLCBpbnNlcnRUZXh0MSk7Ci0vLwkJCQlzRG9jLnJlcGxhY2UoMCwgMCwgaW5zZXJ0VGV4dDIpOwotLy8KLS8vCQkJCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5hZGRKc3BGaWxlKGJsYW5rSnNwRmlsZSk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQlmaW5hbGx5IHsKLS8vCQkJaWYgKHNNb2RlbCAhPSBudWxsKQotLy8JCQkJc01vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotLy8JCX0KLS8vCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KCkgewotCi0JCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHtQcm9qZWN0VXRpbC5KQVZBX05BVFVSRV9JRH07Ci0JCUlQcm9qZWN0IHByb2ogPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmF0dXJlSWRzKTsKLQotCQkvLyBjb3B5IGZpbGVzIGludG8gd29ya3NwYWNlCi0JCUlGaWxlIGYgPSBQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMuamFyIiwgUFJPSkVDVF9OQU1FICsgIi9zdHJ1dHMuamFyIik7Ci0JCWFzc2VydFRydWUoZi5leGlzdHMoKSk7Ci0JCWYgPSBQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkIiwgUFJPSkVDVF9OQU1FICsgIi9zdHJ1dHMtbG9naWMudGxkIik7Ci0JCWFzc2VydFRydWUoZi5leGlzdHMoKSk7Ci0KLQkJLy8gYWRkIHN0cnV0cyB0byBjbGFzc3BhdGgKLQkJUHJvamVjdFV0aWwuYWRkTGlicmFyeUVudHJ5KHByb2osICJzdHJ1dHMuamFyIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI3MGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqLwotcHVibGljIGNsYXNzIENvbW1vblhNTCB7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKCkgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc3VsdCA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcihib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGluc3RhbmNlID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJaW5zdGFuY2Uuc2V0VmFsaWRhdGluZyh2YWxpZGF0aW5nKTsKLQkJCXJlc3VsdCA9IGluc3RhbmNlLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKERvY3VtZW50IGRvY3VtZW50LCBPdXRwdXRTdHJlYW0gb3N0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOwotCQl0cnkgewotCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCQl0cnkgewotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTE2Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzCi0JCQl9Ci0JCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3N0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIyMzJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGF0ZVV0aWwgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFsbFRlc3RzLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdyA9IG51bGw7Ci0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vdygpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgb25jZSwgc28gd2hvbGUgcnVuIGFzIHNhbWUgdGltZXN0YW1wCi0JCWlmIChEYXRlVXRpbC5ub3cgPT0gbnVsbCkgewotCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCURhdGUgdG9kYXkgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCQlEYXRlVXRpbC5ub3cgPSBmb3JtYXQuZm9ybWF0KHRvZGF5KTsKLQkJfQotCQlyZXR1cm4gRGF0ZVV0aWwubm93OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ4MmM0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkxpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZlBhdGhTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkZpbGVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSlNQX0VESVRPUl9URVNUU19QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyI7Ci0KLQlzdGF0aWMgRmlsZSBwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBudWxsOwotCXN0YXRpYyBwcml2YXRlIFN0cmluZyBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBub3RUcmllZFlldCA9IHRydWU7Ci0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIERpckZpbGVuYW1lRmlsdGVyIGltcGxlbWVudHMgRmlsZW5hbWVGaWx0ZXIgewotCQlTdHJpbmcgc3RhcnRPZkFjY2VwdGFibGVOYW1lczsKLQotCQlwdWJsaWMgRGlyRmlsZW5hbWVGaWx0ZXIoU3RyaW5nIHN0YXJ0T2ZEaXJOYW1lKSB7Ci0JCQlzdGFydE9mQWNjZXB0YWJsZU5hbWVzID0gc3RhcnRPZkRpck5hbWU7Ci0JCX0KLQotCQkvKioKLQkJICogQHNlZSBqYXZhLmlvLkZpbGVGaWx0ZXIjYWNjZXB0KEZpbGUpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCQkvLyB3ZSdsbCBqdXN0IGFzc3VtZSBpZiBpdCBzdGFydHMgd2l0aCByaWdodCBrZXksIGl0IGlzIGEgZGlyZWN0b3J5IC4uLiBmb3Igbm93Ci0JCQlyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChzdGFydE9mQWNjZXB0YWJsZU5hbWVzKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5Um9vdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPT0gbnVsbCAmJiBub3RUcmllZFlldCkgewotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BfRURJVE9SX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKEpTUF9FRElUT1JfVEVTVFNfUExVR0lOX0lEKTsKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJLy8gYSBsaXR0bGUgc2FmZXR5IG5ldCwgYmUgc3VyZSB0aGUgcHJldmlvdXMgbmV3ZXN0IGRpcmVjdG9yeQotCQkJLy8gaXMgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBubyBvbmUgZWxzZSBoYXMgZG9uZSBzbwotCQkJaWYgKHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICE9IG51bGwgJiYgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCX0KLQkJCS8vIG5vdyBpdHMgInNhZmUiIHRvIG1ha2UgdGhlIG5ldyBvbmUKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IGEgZ2VuZXJhbCB1dGlsaXR5IG1ldGhvZAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlbmFtZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJaW50IGRvdFBvc3Rpb24gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOwotCQlpZiAoZG90UG9zdGlvbiA+IC0xKSB7Ci0JCQlleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zdGlvbiArIDEpOwotCQl9Ci0JCWVsc2UgewotCQkJZXh0ZW5zaW9uID0gbmV3IFN0cmluZygpOwotCQl9Ci0JCXJldHVybiBleHRlbnNpb247Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kIHRvIGVuc3VyZSB0aGUgbG9nCi0JICogZGlyZWN0b3J5IGV4aXN0cywgYW5kIHJldHVybnMgdGhlIG5hbWUuIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKLQkJaWYgKGxvZ1N1YkRpcmVjdG9yeVBhdGggPT0gbnVsbCkgewotCQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAiL2xvZ3MiOwotCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShtYWluRGlyZWN0b3J5KTsKLQkJCWVuc3VyZUV4aXN0cyhkaXIpOwotCQkJU3RyaW5nIHN1YkRpcmVjdG9yeSA9IFRpbWVzdGFtcFV0aWwudGltZXN0YW1wKCk7Ci0JCQlsb2dTdWJEaXJlY3RvcnlQYXRoID0gbWFpbkRpcmVjdG9yeSArICIvIiArIHN1YkRpcmVjdG9yeTsKLQkJCUZpbGUgc3ViZGlyID0gbmV3IEZpbGUobG9nU3ViRGlyZWN0b3J5UGF0aCk7Ci0JCQllbnN1cmVFeGlzdHMoc3ViZGlyKTsKLQkJfQotCQlyZXR1cm4gbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRXhpc3RzKEZpbGUgZGlyKSB7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQZXJmb3JtYW5jZU91dHB1dExvZ05hbWUoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IEZpbGVVdGlsLmdldExvZ0RpcmVjdG9yeSgpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gIi5vdXQiOwotCQlTdHJpbmcgYmFzZU5hbWUgPSAic2VkVGVzdHMiOwotCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgbm93U3RyID0gU3RyaW5nLnZhbHVlT2Yobm93KTsKLQkJcmVzdWx0ID0gZGlyZWN0b3J5TmFtZSArIEZpbGVVdGlsLmZGaWxlU2VwYXJhdG9yICsgYmFzZU5hbWUgKyBub3dTdHIgKyBleHRlbnNpb247Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM5M2IwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLklJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JbXBvcnRPcGVyYXRpb247Ci0KLS8qKgotICogSW1wb3J0cyB6aXBwZWQgZmlsZXMgaW50byB0aGUgdGVzdCB3b3Jrc3BhY2UuIERlbGV0ZXMgYWxsIHByb2plY3RzIGluCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VW56aXBVdGlsaXR5IHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBaSVBfRVhURU5TSU9OID0gIi56aXAiOwotCQotCWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0KLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAicHJvamVjdHRlc3RmaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChmaW5hbCBGaWxlIGluRmlsZSwgZmluYWwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgTGlzdCBwcm9qZWN0cyA9IGZDcmVhdGVkUHJvamVjdHM7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBjcmVhdGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJCQl0cnkgewotCQkJCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJCQkvLyAobnNkKSByZWR1bmRhbnQ/Ci0JCQkJCS8vIFN0cmluZyBpbkZpbGVOYW1lID0gaW5GaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJCQkvLyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkJCS8vIEZpbGUgc291cmNlWmlwRmlsZSA9IG5ldyBGaWxlKGluRmlsZU5hbWUpOwotCQkJCQlGaWxlIHNvdXJjZVppcEZpbGUgPSBpbkZpbGU7Ci0KLQkJCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCQkJLy8gU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0KLQkJCQkJLy8gImQ6L2VjbGlwc2VkZXYvTTVfU1NFX1RFU1RTX1dPUktTUEFDRS8iOyAvLyJjOi90ZW1wLyI7Ci0JCQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCQkJLy8gT3BlbiBaaXAgZmlsZSBmb3IgcmVhZGluZwotCQkJCQlaaXBGaWxlIHppcEZpbGUgPSBuZXcgWmlwRmlsZShzb3VyY2VaaXBGaWxlLCBaaXBGaWxlLk9QRU5fUkVBRCk7Ci0JCQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCQkJdHJ5IHsKLQkJCQkJCS8vIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgZW50cmllcyBpbiB0aGUgemlwIGZpbGUKLQkJCQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQkJCQlTdHJpbmcgcHJvamVjdEZvbGRlck5hbWUgPSBudWxsOwotCi0JCQkJCQkvLyBQcm9jZXNzIGVhY2ggZW50cnkKLQkJCQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCQkJCS8vIGdyYWIgYSB6aXAgZmlsZSBlbnRyeQotCQkJCQkJCVppcEVudHJ5IGVudHJ5ID0gKFppcEVudHJ5KSB6aXBGaWxlRW50cmllcy5uZXh0RWxlbWVudCgpOwotCQkJCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJFeHRyYWN0aW5nOiAiICsgZW50cnkpOwotCQkJCQkJCUZpbGUgZGVzdEZpbGUgPSBuZXcgRmlsZSh1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5LCBjdXJyZW50RW50cnkpOwotCQkJCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJCQkJRmlsZSBkZXN0aW5hdGlvblBhcmVudCA9IGRlc3RGaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJCQkJCQkvLyBjcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlmIG5lZWRlZAotCQkJCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCQkJCS8vIGV4dHJhY3QgZmlsZSBpZiBub3QgYSBkaXJlY3RvcnkKLQkJCQkJCQlpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJCQkJaW50IGN1cnJlbnRCeXRlOwotCQkJCQkJCQkvLyBlc3RhYmxpc2ggYnVmZmVyIGZvciB3cml0aW5nIGZpbGUKLQkJCQkJCQkJYnl0ZSBkYXRhW10gPSBuZXcgYnl0ZVtCVUZGRVJdOwotCQkJCQkJCQkvLyB3cml0ZSB0aGUgY3VycmVudCBmaWxlIHRvIGRpc2sKLQkJCQkJCQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0RmlsZSk7Ci0JCQkJCQkJCUJ1ZmZlcmVkT3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oZm9zLCBCVUZGRVIpOwotCQkJCQkJCQl0cnkgewotCQkJCQkJCQkJLy8gcmVhZCBhbmQgd3JpdGUgdW50aWwgbGFzdCBieXRlIGlzIGVuY291bnRlcmVkCi0JCQkJCQkJCQl3aGlsZSAoKGN1cnJlbnRCeXRlID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpKSAhPSAtMSkgewotCQkJCQkJCQkJCWRlc3Qud3JpdGUoZGF0YSwgMCwgY3VycmVudEJ5dGUpOwotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJCWZpbmFsbHkgewotCQkJCQkJCQkJZGVzdC5mbHVzaCgpOwotCQkJCQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJCQkJCWZvcy5jbG9zZSgpOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkJCX0KLQkJCQkJCQllbHNlIHsKLQkJCQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJCQkJCXByb2plY3RGb2xkZXJOYW1lID0gZGVzdEZpbGUuZ2V0TmFtZSgpOwotCQkJCQkJCQkJcHJvamVjdHMuYWRkKHByb2plY3RGb2xkZXJOYW1lKTsKLQotCQkJCQkJCQkJY3VycmVudFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWZpbmFsbHkgewotCQkJCQkJemlwRmlsZS5jbG9zZSgpOwotCQkJCQl9Ci0KLQkJCQkJLy8gZml4ZXMgd29ya3NwYWNlIG1ldGFkYXRhIGZvciB0aGUgcHJvamVjdAotCQkJCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCQkJUGF0aCBwcm9qZWN0TG9jYXRpb24gPSBuZXcgUGF0aChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSk7Ci0JCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG1vbml0b3IpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQkJY3JlYXRlT3AucnVuKG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdzUm9vdC5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJfQotCQl3c1Jvb3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlIHByb2plY3RzIGNyZWF0ZWQgKHVuemlwcGVkIGFuZCBpbXBvcnRlZCkgYnkgdGhpcyB1dGlsaXR5Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0Q3JlYXRlZFByb2plY3RzKCk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJcHJvamVjdHNbaV0uY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5jbG9zZShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHByb2plY3ROYW1lOwotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLyBJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8gSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy8gcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJdHJ5IHsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkJLy8ganVzdCB0cnkgYWdhaW4gKG5vdCBzdXJlIHdoeSB0aGV5IGFyZSBub3QgYmVpbmcKLQkJCQkJCS8vIGRlbGV0ZWQpCi0JCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJLy8gcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIElQcm9qZWN0cyB0aGF0IHdlcmUgdW56aXBwZWQgYW5kIGltcG9ydGVkIGludG8gdGhlIHdvcmtzcGFjZSBieQotCSAqICAgICAgICAgdGhpcyB1dGlsaXR5Ci0JICovCi0JcHVibGljIElQcm9qZWN0W10gZ2V0Q3JlYXRlZFByb2plY3RzKCkgewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSAoU3RyaW5nW10pIGZDcmVhdGVkUHJvamVjdHMudG9BcnJheShuZXcgU3RyaW5nW2ZDcmVhdGVkUHJvamVjdHMuc2l6ZSgpXSk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXSA9IHdzUm9vdC5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRKYXZhUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmJlZ2luUnVsZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJLy8gcmVzeW5jaAotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCS8vIGNoYW5nZSBwcmVyZXFzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmFjayBpbgotCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJCi0JCWlmICghcHJvai5leGlzdHMoKSkgewotCQkJCi0JCQlwcm9qLmNyZWF0ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YQotCQkvLyBlbGVtZW50IHNlbnNlCi0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2ouZ2V0RGVzY3JpcHRpb24oKTsKLQkJTGlzdCBuYXR1cmVzID0gbmV3IEFycmF5TGlzdChBcnJheXMuYXNMaXN0KGRlc2MuZ2V0TmF0dXJlSWRzKCkpKTsKLQkJaWYgKCFuYXR1cmVzLmNvbnRhaW5zKEphdmFDb3JlLk5BVFVSRV9JRCkpCi0JCQluYXR1cmVzLmFkZChKYXZhQ29yZS5OQVRVUkVfSUQpOwotCQlkZXNjLnNldE5hdHVyZUlkcygoU3RyaW5nW10pIG5hdHVyZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKSk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCVBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5lbmRSdWxlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkpOwotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLyBJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8gSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy8gcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCS8vIHByb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCS8vIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzY1NjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW47Ci0KLS8qKgotICogU29tZSB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIHByb2plY3RzLCBhbmQgY29weWluZyBmaWxlcyBpbnRvIHRoZSB3b3Jrc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VXRpbCB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKQVZBX05BVFVSRV9JRCA9ICJvcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlIjsKLQkKLQkvKioKLQkgKiBBZGQgYSBsaWJyYXJ5IGVudHJ5IChsaWtlIGEgamFyKSB0byB0aGUgY2xhc3NwYXRoIG9mIGEgcHJvamVjdC4KLQkgKiBUaGUgamFyIG11c3QgYmUgaW4geW91ciBwb2plY3QuIFlvdSBjYW4gY29weSB0aGUgamFyIGludG8geW91ciB3b3Jrc3BhY2UgdXNpbmcKLQkgKiBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkKLQkgKiAKLQkgKiBAcGFyYW0gcHJvaiBhc3N1bWVkIGl0IGhhcyBqYXZhIG5hdHVyZQotCSAqIEBwYXJhbSBwYXRoVG9KYXIgcHJvamVjdCByZWxhdGl2ZSwgbm8gbGVhZGluZyBzbGFzaAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRMaWJyYXJ5RW50cnkoSVByb2plY3QgcHJvaiwgU3RyaW5nIHBhdGhUb0phcikgewotCQkKLQkJSVBhdGggcHJvakxvY2F0aW9uID0gcHJvai5nZXRMb2NhdGlvbigpOwotCQlJUGF0aCBhYnNKYXJQYXRoID0gcHJvakxvY2F0aW9uLmFwcGVuZChwYXRoVG9KYXIpOwotCQkKLQkJSUphdmFQcm9qZWN0IGpQcm9qID0gSmF2YUNvcmUuY3JlYXRlKHByb2opOwotCQkKLQkJSUNsYXNzcGF0aEVudHJ5IHN0cnV0c0phckVudHJ5ID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KGFic0phclBhdGgsIG51bGwsIG51bGwpOwotCQl0cnkgewotCQkJSUNsYXNzcGF0aEVudHJ5W10gY3VycmVudEVudHJpZXMgPSBqUHJvai5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJCQotCQkJTGlzdCBsID0gbmV3IEFycmF5TGlzdCgpOwotCQkJbC5hZGRBbGwoQXJyYXlzLmFzTGlzdChjdXJyZW50RW50cmllcykpOwotCQkJbC5hZGQoc3RydXRzSmFyRW50cnkpOwotCQkJCi0JCQlJQ2xhc3NwYXRoRW50cnlbXSBuZXdFbnRyaWVzID0gKElDbGFzc3BhdGhFbnRyeVtdKWwudG9BcnJheShuZXcgSUNsYXNzcGF0aEVudHJ5W2wuc2l6ZSgpXSk7Ci0JCQlqUHJvai5zZXRSYXdDbGFzc3BhdGgobmV3RW50cmllcywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CQotCX0KLQotCXN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7Ci0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGVudHJ5UGF0aCA9IGVudHJpZXMubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsKLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIobmV3IFBhdGgodGFyZ2V0UGF0aCkpOwotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZW50cnlQYXRoICsgIiAtPiAiICsgdGFyZ2V0UGF0aCk7Ci0JCX0KLQl9Ci0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShlbnRyeW5hbWUpOwotCQlpZiAoZW50cnkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOwotCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQkJaW50IGkgPSAtMTsKLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7Ci0JCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsKLQkJCQl9Ci0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOwotCQkJCWlmIChmaWxlICE9IG51bGwpIHsKLQkJCQkJaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0JCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUgcGF0aCByZWxhdGl2ZSB0byBURVNUIHBsdWdpbiBzdGFydGluZyB3LyBhICIvIgotCSAqIAkJCQkJCShlZy4gIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aCBwYXRoIHJlbGF0aXZlIHRvIGp1bml0IHRlc3Qgd29ya3BhY2UKLQkgKiAJCQkJCQkoZWcuICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyAgSVByb2plY3QgY3JlYXRlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTA2YWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nQ29tcGFyZVV0aWwgewotCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpIHsKLQotCQlpZiAoc3RyaW5nMSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoc3RyaW5nMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZ1JlYWRlciBzMVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMSk7Ci0JCVN0cmluZ1JlYWRlciBzMlJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMik7Ci0KLQkJLy8gYXNzdW1lIHRydWUgdW5sZXNzIGZpbmQgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaW50IHMxQ2hhciA9IC0xOwotCQlpbnQgczJDaGFyID0gLTE7Ci0JCWRvIHsKLQotCQkJczFDaGFyID0gZ2V0TmV4dENoYXIoczFSZWFkZXIpOwotCi0JCQlzMkNoYXIgPSBnZXROZXh0Q2hhcihzMlJlYWRlcik7Ci0KLQkJCWlmIChzMUNoYXIgIT0gczJDaGFyKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHMxQ2hhciAhPSAtMSAmJiBzMkNoYXIgIT0gLTEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGdldE5leHRDaGFyLgotCSAqIEBwYXJhbSBzMVJlYWRlcgotCSAqIEByZXR1cm4gY2hhcgotCSAqLwotCXByaXZhdGUgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM5Yjk5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZjEwN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmFsaWRhdGlvbi9KU1BIVE1MVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL0pTUEhUTUxWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MzYwNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL0pTUEhUTUxWYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUENvbnRlbnRWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUENvbnRlbnRTb3VyY2VWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuV29ya2JlbmNoQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLQotLyoqCi0gKiBUZXN0cyBIVE1MIHZhbGlkYXRvciBvbiBqc3AgZmlsZQotICovCi1wdWJsaWMgY2xhc3MgSlNQSFRNTFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JU3RyaW5nIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJidWdfMTQzMjA5IjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgInRydWUiKTsKLQotCQlpZiAoIVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKSB7Ci0JCQlQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmV3IFN0cmluZ1tde0phdmFDb3JlLk5BVFVSRV9JRH0pOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMganNwIGV4cHJlc3Npb24gaW4gaHRtbCBhdHRyaWJ1dGVzIGluIGpzcCBmaWxlCi0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQaW5BdHRyaWJ1dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUENvbnRlbnRWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUENvbnRlbnRWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuanNwIjsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQotCQlhc3NlcnRUcnVlKCJqc3AgaW4gYXR0cmlidXRlcyBhcmUgZXJyb3JzIHdoZW4gdGhleSBzaG91bGQgbm90IGJlIChpbiAuanNwKSIsIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBqc3AgZXhwcmVzc2lvbiBpbiBodG1sIGF0dHJpYnV0ZXMgaW4gaHRtbCBmaWxlCi0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQaW5BdHRyaWJ1dGVzSFRNTCgpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BDb250ZW50VmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BDb250ZW50VmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmh0bWwiOwotCQloZWxwZXIuc2V0VVJJKGZpbGVQYXRoKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCi0JCWFzc2VydFRydWUoImpzcCBpbiBhdHRyaWJ1dGVzIGFyZSBub3QgZXJyb3JzIHdoZW4gdGhleSBzaG91bGQgYmUgKGluIC5odG1sKSIsICFyZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgYmFkIGF0dHJpYnV0ZSBuYW1lcyBpbiBqc3AgZmlsZSBmYWxzZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJhZEF0dHJpYnV0ZU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQQ29udGVudFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSlNQQ29udGVudFZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9iYWRhdHRyaWJ1dGVuYW1lcy5qc3AiOwotCQloZWxwZXIuc2V0VVJJKGZpbGVQYXRoKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCi0JCWFzc2VydFRydWUoImJhZCBhdHRyaWJ1dGUgbmFtZSBpcyBub3QgZXJyb3Igd2hlbiBpdCBzaG91bGQgYmUiLCAhcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCX0KLQkKLQkvKioKLQkgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIEJ1ZyAyODUyODUKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCN0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZhbGlkYXRpb24uVGVzdEhUTUxWYWxpZGF0b3IjdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb24uSlNQSFRNTFZhbGlkYXRvclRlc3QjdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJSlNQQ29udGVudFNvdXJjZVZhbGlkYXRvciBmVmFsaWRhdG9yID0gbmV3IEpTUENvbnRlbnRTb3VyY2VWYWxpZGF0b3IoKTsKLQkJCi0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KHByb2plY3ROYW1lLCBKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdGF0ZUxvY2F0aW9uKCkuYXBwZW5kKGdldE5hbWUoKSksIG51bGwpOwotCQkKLQkJSUZpbGUgdGVzdEZpbGUgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQkvL2dldCB0ZXN0IGZpbGUKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgidGVzdGZpbGVzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnIiwgcHJvamVjdE5hbWUpOwotCQkJdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIlRlc3QxLmpzcCIpOwotCQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICIgZG9lcyBub3QgZXhpc3QiLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0JCQkKLQkJCS8vZ2V0IHRoZSBkb2N1bWVudAotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdCh0ZXN0RmlsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkKLQkJCS8vc2V0IHVwIGZvciBmVmFsaWRhdG9yCi0JCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQgPSBuZXcgV29ya2JlbmNoQ29udGV4dCgpOwotCQkJTGlzdCBmaWxlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWZpbGVMaXN0LmFkZCh0ZXN0RmlsZS5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQljb250ZXh0LnNldFZhbGlkYXRpb25GaWxlVVJJcyhmaWxlTGlzdCk7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQkKLQkJCS8vbmVlZCB0byBkeW5hbWljYWxseSBmaW5kIHdoZXJlIHRoZSAtLT4gaXMgYmVjYXVzZQotCQkJLy9pdHMgZGlmZmVyZW50IG9uIHVuaXggdnMgd2luZG93cyBiZWNhdXNlIG9mIGxpbmUgZW5kaW5ncwotCQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlpbnQgZW5kQ29tbWVudEluZGV4ID0gY29udGVudHMuaW5kZXhPZigiLS0+Iik7Ci0JCQkKLQkJCS8vcmVtb3ZlIC0tPgotCQkJZG9jdW1lbnQucmVwbGFjZShlbmRDb21tZW50SW5kZXgsIDMsICIiKTsKLQkJCQotCQkJLy92YWxpZGF0ZSBmaWxlIHdpdGggZXJyb3IKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRUcnVlKCJUaGVyZSBzaG91bGQgYmUgdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJCi0JCQkvL3JlcGxhY2UgLS0+Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGVuZENvbW1lbnRJbmRleCwgMCwgIi0tPiIpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGNsZWFuIGZpbGUKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIEEgPGNvZGU+SVJlcG9ydGVyPC9jb2RlPiBmb3IgdGVzdGluZyB2YWxpZGF0b3JzCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBUZXN0UmVwb3J0ZXIgaW1wbGVtZW50cyBJUmVwb3J0ZXIgewotCQlwcml2YXRlIGJvb2xlYW4gbWVzc2FnZVJlcG9ydGVkID0gZmFsc2U7Ci0JCQotCQlwdWJsaWMgVGVzdFJlcG9ydGVyKCl7fQotCQkKLQkJcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJbWVzc2FnZVJlcG9ydGVkID0gdHJ1ZTsKLQkJfQotCQkKLQkJcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlUmVwb3J0ZWQoKSB7Ci0JCQlyZXR1cm4gbWVzc2FnZVJlcG9ydGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZGlzcGxheVN1YnRhc2soSVZhbGlkYXRvciB2YWxpZGF0b3IsIElNZXNzYWdlIG1lc3NhZ2UpIHt9Ci0KLQkJcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4sIE9iamVjdCBvYmplY3QpIHt9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHt9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlTWVzc2FnZVN1YnNldChJVmFsaWRhdG9yIHZhbGlkYXRvciwgT2JqZWN0IG9iaiwgU3RyaW5nIGdyb3VwTmFtZSkge30KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYTk4YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL1JlcG9ydGVyRm9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5JTWVzc2FnZUFjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLQotY2xhc3MgUmVwb3J0ZXJGb3JUZXN0IGltcGxlbWVudHMgSVJlcG9ydGVyIHsKLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgUmVwb3J0ZXJGb3JUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJbGlzdC5hZGQobWVzc2FnZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcGxheVN1YnRhc2soSVZhbGlkYXRvciB2YWxpZGF0b3IsIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIElNZXNzYWdlQWNjZXNzIGdldE1lc3NhZ2VBY2Nlc3MoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4sIE9iamVjdCBvYmplY3QpIHsgLy8gZG8KLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHsKLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTWVzc2FnZVN1YnNldChJVmFsaWRhdG9yIHZhbGlkYXRvciwgT2JqZWN0IG9iaiwgU3RyaW5nIGdyb3VwTmFtZSkgey8vIGRvCi0JCS8qIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCAqLwotCX0KLQotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQlyZXR1cm4gbGlzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNjEzZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL1ZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLQotY2xhc3MgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGltcGxlbWVudHMgSVZhbGlkYXRpb25Db250ZXh0IHsKLQlwcml2YXRlIFN0cmluZyBmVVJJID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKSB7Ci0JCWZVUkkgPSB1cmk7Ci0JfQotCi0JcHVibGljIFN0cmluZ1tdIGdldFVSSXMoKSB7Ci0JCWlmIChmVVJJICE9IG51bGwpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1tde2ZVUkl9OwotCQlyZXR1cm4gbmV3IFN0cmluZ1swXTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGxvYWRNb2RlbChTdHJpbmcgc3ltYm9saWNOYW1lKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBPYmplY3QgbG9hZE1vZGVsKFN0cmluZyBzeW1ib2xpY05hbWUsIE9iamVjdFtdIHBhcm1zKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDNkMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRleHQuSUpTUFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLSAgICBwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0gICAgfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMSk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLAotCQkJCQkJCQkJCQkJCUlKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsCi0JCQkJCQkJCQkJCQkJSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9OwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2MmE0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SlNQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdEpTUCBleHRlbmRzIFZpZXdQYXJ0IHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTU0VfRURJVE9SX0ZPTlQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiICU+XG4iOwotCi0JU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgTnVtYmVySW5wdXREaWFsb2coU2hlbGwgc2hlbGwpIHsKLQkJCXN1cGVyKHNoZWxsKTsKLQkJfQotCi0JCXB1YmxpYyBUZXh0IHN0YXJ0OwotCQlpbnQgc3RhcnRWYWx1ZTsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCQlpbnQgbGVuZ3RoVmFsdWU7Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IEpTUCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhzb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYW55IGFkZGl0aW9uYWwgcHJlZmVyZW5jZXMgaXQgc2hvdWxkIGhhdmUgRXg6Ci0JICogZm9udCwgdGFiIHdpZHRoCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyUHJlZmVyZW5jZXMoKSB7Ci0JCWZTb3VyY2VWaWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udChTU0VfRURJVE9SX0ZPTlQpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCkpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNmFkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQ4MGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzU5NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQKKysrIC9kZXYvbnVsbApAQCAtMSw2NDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotCi0KLQotCi0KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIj4KLTx0YWdsaWI+Ci08dGxpYnZlcnNpb24+MS4wPC90bGlidmVyc2lvbj4KLTxqc3B2ZXJzaW9uPjEuMTwvanNwdmVyc2lvbj4KLTxzaG9ydG5hbWU+bG9naWM8L3Nob3J0bmFtZT4KLTx1cmk+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1sb2dpYzwvdXJpPgotPHRhZz4KLTxuYW1lPmVtcHR5PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5FbXB0eVRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+ZXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkVxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmZvcndhcmQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkZvcndhcmRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PmVtcHR5PC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ncmVhdGVyRXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkdyZWF0ZXJFcXVhbFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ncmVhdGVyVGhhbjwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuR3JlYXRlclRoYW5UYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+aXRlcmF0ZTwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuSXRlcmF0ZVRhZzwvdGFnY2xhc3M+Ci08dGVpY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkl0ZXJhdGVUZWk8L3RlaWNsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29sbGVjdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5pZDwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT5mYWxzZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5pbmRleElkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT5mYWxzZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sZW5ndGg8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5vZmZzZXQ8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dHlwZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxlc3NFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTGVzc0VxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxlc3NUaGFuPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5MZXNzVGhhblRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5tYXRjaDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTWF0Y2hUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sb2NhdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWVzc2FnZXNOb3RQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NZXNzYWdlc05vdFByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5tZXNzYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWVzc2FnZXNQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NZXNzYWdlc1ByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5tZXNzYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90RW1wdHk8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdEVtcHR5VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ub3RFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTm90RXF1YWxUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90TWF0Y2g8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdE1hdGNoVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bG9jYXRpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm5vdFByZXNlbnQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdFByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5yb2xlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnVzZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5wcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5QcmVzZW50VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cm9sZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT51c2VyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+cmVkaXJlY3Q8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLlJlZGlyZWN0VGFnPC90YWdjbGFzcz4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5hbmNob3I8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+Zm9yd2FyZDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5ocmVmPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFnZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbUlkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtTmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbVByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtU2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dHJhbnNhY3Rpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTwvdGFnbGliPgotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzMmY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC9pbmNsdWRlci5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xODk5MjQvaW5jbHVkZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjRjOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC9pbmNsdWRlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBpbmNsdWRlIGZpbGU9InRlc3QxODk5MjQuanNwIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC90ZXN0MTg5OTI0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC90ZXN0MTg5OTI0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllMzJkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xODk5MjQvdGVzdDE4OTkyNC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQotPCVAcGFnZSBzZXNzaW9uID0gImZhbHNlIiAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTEvd21sXzFfMS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0NTI2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iDQotICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPg0KLSAgIDx3bWw+DQotICAgLi4uDQotICAgPC93bWw+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGxlbmd0aCAgIkNEQVRBIj4gICAgPCEtLSBbMC05XSsgZm9yIHBpeGVscyBvciBbMC05XSsiJSIgZm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotPCFFTlRJVFkgJSB2ZGF0YSAgICJDREFUQSI+ICAgIDwhLS0gYXR0cmlidXRlIHZhbHVlIHBvc3NpYmx5IGNvbnRhaW5pbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSByZWZlcmVuY2VzIC0tPg0KLTwhRU5USVRZICUgSFJFRiAgICAiJXZkYXRhOyI+ICA8IS0tIFVSSSwgVVJMIG9yIFVSTiBkZXNpZ25hdGluZyBhIGh5cGVydGV4dA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuIE1heSBjb250YWluIHZhcmlhYmxlIHJlZmVyZW5jZXMgLS0+DQotPCFFTlRJVFkgJSBib29sZWFuCSIodHJ1ZXxmYWxzZSkiPg0KLTwhRU5USVRZICUgbnVtYmVyICAiTk1UT0tFTiI+ICA8IS0tIGEgbnVtYmVyLCB3aXRoIGZvcm1hdCBbMC05XSsgLS0+DQotPCFFTlRJVFkgJSBjb3JlYXR0cnMgICJpZCAgICBJRCAgICAgI0lNUExJRUQgDQotICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDREFUQSAgI0lNUExJRUQiPg0KLQ0KLTwhRU5USVRZICUgZW1waCAgICAiZW0gfCBzdHJvbmcgfCBiIHwgaSB8IHUgfCBiaWcgfCBzbWFsbCI+DQotPCFFTlRJVFkgJSBsYXlvdXQgICJiciI+DQotDQotPCFFTlRJVFkgJSB0ZXh0ICAgICAiI1BDREFUQSB8ICVlbXBoOyI+DQotDQotPCEtLSBmbG93IGNvdmVycyAiY2FyZC1sZXZlbCIgZWxlbWVudHMsIHN1Y2ggYXMgdGV4dCBhbmQgaW1hZ2VzIC0tPg0KLTwhRU5USVRZICUgZmxvdyAgICAgIiV0ZXh0OyB8ICVsYXlvdXQ7IHwgaW1nIHwgYW5jaG9yIHwgYSB8IHRhYmxlIj4NCi0NCi08IS0tIFRhc2sgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSB0YXNrICAgImdvIHwgcHJldiB8IG5vb3AgfCByZWZyZXNoIj4NCi0NCi08IS0tIE5hdmlnYXRpb24gYW5kIGV2ZW50IGVsZW1lbnRzIC0tPg0KLTwhRU5USVRZICUgbmF2ZWxtdHMgImRvIHwgb25ldmVudCI+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRGVja3MgYW5kIENhcmRzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgd21sICggaGVhZD8sIHRlbXBsYXRlPywgY2FyZCsgKT4NCi08IUFUVExJU1Qgd21sDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLSBjYXJkIGludHJpbnNpYyBldmVudHMgLS0+DQotPCFFTlRJVFkgJSBjYXJkZXYNCi0gIm9uZW50ZXJmb3J3YXJkICAlSFJFRjsgICAgICAgICAgI0lNUExJRUQNCi0gIG9uZW50ZXJiYWNrd2FyZCAlSFJFRjsgICAgICAgICAgI0lNUExJRUQNCi0gIG9udGltZXIgICAgICAgICAlSFJFRjsgICAgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBjYXJkIGZpZWxkIHR5cGVzIC0tPg0KLTwhRU5USVRZICUgZmllbGRzICAiJWZsb3c7IHwgaW5wdXQgfCBzZWxlY3QgfCBmaWVsZHNldCI+DQotDQotPCFFTEVNRU5UIGNhcmQgKG9uZXZlbnQqLCB0aW1lcj8sIChkbyB8IHApKik+DQotPCFBVFRMSVNUIGNhcmQNCi0gIHRpdGxlICAgICAgICAgICAldmRhdGE7ICAgICAgICNJTVBMSUVEDQotICBuZXdjb250ZXh0ICAgICAgJWJvb2xlYW47ICAgICAiZmFsc2UiDQotICBvcmRlcmVkICAgICAgICAgJWJvb2xlYW47ICAgICAidHJ1ZSINCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY2FyZGV2Ow0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBFdmVudCBCaW5kaW5ncyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGRvICgldGFzazspPg0KLTwhQVRUTElTVCBkbw0KLSAgdHlwZSAgICAgICAgIENEQVRBICAgICAgICNSRVFVSVJFRA0KLSAgbGFiZWwgICAgICAgICV2ZGF0YTsgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICAgTk1UT0tFTiAgICAgI0lNUExJRUQNCi0gIG9wdGlvbmFsICAgICAlYm9vbGVhbjsgICAiZmFsc2UiDQotICB4bWw6bGFuZyAgICAgTk1UT0tFTiAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG9uZXZlbnQgKCV0YXNrOyk+DQotPCFBVFRMSVNUIG9uZXZlbnQNCi0gIHR5cGUgICAgICAgICBDREFUQSAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRGVjay1sZXZlbCBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBoZWFkICggYWNjZXNzIHwgbWV0YSApKz4NCi08IUFUVExJU1QgaGVhZA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdGVtcGxhdGUgKCVuYXZlbG10czspKj4NCi08IUFUVExJU1QgdGVtcGxhdGUNCi0gICVjYXJkZXY7DQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBhY2Nlc3MgRU1QVFk+DQotPCFBVFRMSVNUIGFjY2Vzcw0KLSAgZG9tYWluICAgICAgIENEQVRBICAgICAgICNJTVBMSUVEDQotICBwYXRoICAgICAgICAgQ0RBVEEgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG1ldGEgRU1QVFk+DQotPCFBVFRMSVNUIG1ldGENCi0gIGh0dHAtZXF1aXYgICAgIENEQVRBICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgICAgIENEQVRBICAgICAgI0lNUExJRUQNCi0gIGZvcnVhICAgICAgICAgICVib29sZWFuOyAgI0lNUExJRUQNCi0gIGNvbnRlbnQgICAgICAgIENEQVRBICAgICAgI1JFUVVJUkVEDQotICBzY2hlbWUgICAgICAgICBDREFUQSAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IFRhc2tzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgZ28gKHBvc3RmaWVsZCB8IHNldHZhcikqPg0KLTwhQVRUTElTVCBnbw0KLSAgaHJlZiAgICAgICAgICAgICVIUkVGOyAgICAgICAgICAgI1JFUVVJUkVEDQotICBzZW5kcmVmZXJlciAgICAgJWJvb2xlYW47ICAgICAgICJmYWxzZSINCi0gIG1ldGhvZCAgICAgICAgICAocG9zdHxnZXQpICAgICAgImdldCINCi0gIGFjY2VwdC1jaGFyc2V0ICBDREFUQSAgICAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHByZXYgKHNldHZhcikqPg0KLTwhQVRUTElTVCBwcmV2DQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCByZWZyZXNoIChzZXR2YXIpKj4NCi08IUFUVExJU1QgcmVmcmVzaA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgbm9vcCBFTVBUWT4NCi08IUFUVExJU1Qgbm9vcA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBwb3N0ZmllbGQgPT09PT09PT09PT09PT09PS0tPg0KLSANCi08IUVMRU1FTlQgcG9zdGZpZWxkIEVNUFRZPg0KLTwhQVRUTElTVCBwb3N0ZmllbGQNCi0gIG5hbWUgICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gIHZhbHVlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gdmFyaWFibGVzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgc2V0dmFyIEVNUFRZPg0KLTwhQVRUTElTVCBzZXR2YXINCi0gIG5hbWUgICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gIHZhbHVlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gQ2FyZCBGaWVsZHMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBzZWxlY3QgKG9wdGdyb3VwfG9wdGlvbikrPg0KLTwhQVRUTElTVCBzZWxlY3QNCi0gIHRpdGxlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgIE5NVE9LRU4gICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIGluYW1lICAgICAgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgaXZhbHVlICAgICAgICV2ZGF0YTsgICAgICAgICAgICNJTVBMSUVEDQotICBtdWx0aXBsZSAgICAgJWJvb2xlYW47ICAgICAgICAgImZhbHNlIg0KLSAgdGFiaW5kZXggICAgICVudW1iZXI7ICAgICAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG9wdGdyb3VwIChvcHRncm91cHxvcHRpb24pKyA+DQotPCFBVFRMSVNUIG9wdGdyb3VwDQotICB0aXRsZSAgICAgICV2ZGF0YTsgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgb3B0aW9uICgjUENEQVRBIHwgb25ldmVudCkqPg0KLTwhQVRUTElTVCBvcHRpb24NCi0gIHZhbHVlICAgICAgJXZkYXRhOyAgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAldmRhdGE7ICAgICNJTVBMSUVEDQotICBvbnBpY2sgICAgICVIUkVGOyAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgaW5wdXQgRU1QVFk+DQotPCFBVFRMSVNUIGlucHV0DQotICBuYW1lICAgICAgIE5NVE9LRU4gICAgICAgICAgICNSRVFVSVJFRA0KLSAgdHlwZSAgICAgICAodGV4dHxwYXNzd29yZCkgICAidGV4dCINCi0gIHZhbHVlICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIGZvcm1hdCAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGVtcHR5b2sgICAgJWJvb2xlYW47ICAgICAgICAgImZhbHNlIg0KLSAgc2l6ZSAgICAgICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgbWF4bGVuZ3RoICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgZmllbGRzZXQgKCVmaWVsZHM7IHwgZG8pKiA+DQotPCFBVFRMSVNUIGZpZWxkc2V0DQotICB0aXRsZSAgICAgICAgICAgJXZkYXRhOyAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0aW1lciBFTVBUWT4NCi08IUFUVExJU1QgdGltZXINCi0gIG5hbWUgICAgICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgJXZkYXRhOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEltYWdlcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBJQWxpZ24gIih0b3B8bWlkZGxlfGJvdHRvbSkiID4NCi0NCi08IUVMRU1FTlQgaW1nIEVNUFRZPg0KLTwhQVRUTElTVCBpbWcNCi0gIGFsdCAgICAgICAgJXZkYXRhOyAgICAgICNSRVFVSVJFRA0KLSAgc3JjICAgICAgICAlSFJFRjsgICAgICAgI1JFUVVJUkVEDQotICBsb2NhbHNyYyAgICV2ZGF0YTsgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAlbGVuZ3RoOyAgICAgIjAiDQotICBoc3BhY2UgICAgICVsZW5ndGg7ICAgICAiMCINCi0gIGFsaWduICAgICAgJUlBbGlnbjsgICAgICJib3R0b20iDQotICBoZWlnaHQgICAgICVsZW5ndGg7ICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAlbGVuZ3RoOyAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEFuY2hvciA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGFuY2hvciAoICNQQ0RBVEEgfCBiciB8IGltZyB8IGdvIHwgcHJldiB8IHJlZnJlc2ggKSo+DQotPCFBVFRMSVNUIGFuY2hvcg0KLSAgdGl0bGUgICAgICAgICV2ZGF0YTsgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgIE5NVE9LRU4gICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYSAoICNQQ0RBVEEgfCBiciB8IGltZyApKj4NCi08IUFUVExJU1QgYQ0KLSAgaHJlZiAgICAgICAgICVIUkVGOyAgICAgICAjUkVRVUlSRUQNCi0gIHRpdGxlICAgICAgICAldmRhdGE7ICAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gVGFibGVzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgdGFibGUgKHRyKSs+DQotPCFBVFRMSVNUIHRhYmxlDQotICB0aXRsZSAgICAgICAldmRhdGE7ICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICBDREFUQSAgICAgICNJTVBMSUVEDQotICBjb2x1bW5zICAgICAlbnVtYmVyOyAgICNSRVFVSVJFRA0KLSAgeG1sOmxhbmcgICAgTk1UT0tFTiAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdHIgKHRkKSs+DQotPCFBVFRMSVNUIHRyDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0ZCAoICV0ZXh0OyB8ICVsYXlvdXQ7IHwgaW1nIHwgYW5jaG9yIHwgYSApKj4NCi08IUFUVExJU1QgdGQNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IFRleHQgbGF5b3V0IGFuZCBsaW5lIGJyZWFrcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGVtICAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIGVtDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgc3Ryb25nICglZmxvdzspKj4NCi08IUFUVExJU1Qgc3Ryb25nDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYiAgICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgYg0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGkgICAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIGkNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB1ICAgICAgKCVmbG93OykqPg0KLTwhQVRUTElTVCB1DQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYmlnICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgYmlnDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgc21hbGwgICglZmxvdzspKj4NCi08IUFUVExJU1Qgc21hbGwNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRU5USVRZICUgVEFsaWduICIobGVmdHxyaWdodHxjZW50ZXIpIj4NCi08IUVOVElUWSAlIFdyYXBNb2RlICIod3JhcHxub3dyYXApIiA+DQotPCFFTEVNRU5UIHAgKCVmaWVsZHM7IHwgZG8pKj4NCi08IUFUVExJU1QgcA0KLSAgYWxpZ24gICAgICAgJVRBbGlnbjsgICAgICJsZWZ0Ig0KLSAgbW9kZSAgICAgICAgJVdyYXBNb2RlOyAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGJyIEVNUFRZPg0KLTwhQVRUTElTVCBicg0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTlRJVFkgcXVvdCAgIiYjMzQ7Ij4gICAgIDwhLS0gcXVvdGF0aW9uIG1hcmsgLS0+DQotPCFFTlRJVFkgYW1wICAgIiYjMzg7IzM4OyI+IDwhLS0gYW1wZXJzYW5kIC0tPg0KLTwhRU5USVRZIGFwb3MgICImIzM5OyI+ICAgICA8IS0tIGFwb3N0cm9waGUgLS0+DQotPCFFTlRJVFkgbHQgICAgIiYjMzg7IzYwOyI+IDwhLS0gbGVzcyB0aGFuIC0tPg0KLTwhRU5USVRZIGd0ICAgICImIzYyOyI+ICAgICA8IS0tIGdyZWF0ZXIgdGhhbiAtLT4NCi08IUVOVElUWSBuYnNwICAiJiMxNjA7Ij4gICAgPCEtLSBub24tYnJlYWtpbmcgc3BhY2UgLS0+DQotPCFFTlRJVFkgc2h5ICAgIiYjMTczOyI+ICAgIDwhLS0gc29mdCBoeXBoZW4gKGRpc2NyZXRpb25hcnkgaHlwaGVuKSAtLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvY2hhbm5lbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvY2hhbm5lbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYyMTAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL2NoYW5uZWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tDQotICAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGlkZW50aWZpZXI6DQotICAgICAJIi0vL1dBUEZPUlVNLy9EVEQgQ0hBTk5FTCAxLjIvL0VOIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgQm9vbGVhbiAiKCB0cnVlIHwgZmFsc2UgKSI+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAtLT4NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiID4gIA0KLQ0KLTwhLS0gQ2hhbm5lbCBFdmVudHMgLS0+DQotPCFFTlRJVFkgJSBDaGFubmVsRXZlbnQuYXR0cmlicw0KLQkic3VjY2VzcwkJJVVSSTsJCSNJTVBMSUVEDQotCSBmYWlsdXJlCQklVVJJOwkJI0lNUExJRUQiDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFubmVsICh0aXRsZSAsIGFic3RyYWN0PyAsIHJlc291cmNlKiApID4NCi08IUFUVExJU1QgY2hhbm5lbA0KLQltYXhzcGFjZQkJJU51bWJlcjsJI1JFUVVJUkVEIA0KLQliYXNlCQkJJVVSSTsJCSNJTVBMSUVEDQotCWV2ZW50aWQJCQlDREFUQQkJI0lNUExJRUQNCi0JY2hhbm5lbGlkCQlDREFUQQkJI1JFUVVJUkVEIA0KLQl1c2VyYWNjZXNzaWJsZSAJCSVCb29sZWFuOwkiZmFsc2UiDQotCSVDaGFubmVsRXZlbnQuYXR0cmliczsNCi0+DQotDQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUVMRU1FTlQgYWJzdHJhY3QgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCByZXNvdXJjZSBFTVBUWT4NCi08IUFUVExJU1QgcmVzb3VyY2UNCi0JaHJlZiAgICAgIAklVVJJOwkgICAJI1JFUVVJUkVEDQotCWxhc3Rtb2QJCSVOdW1iZXI7CSNJTVBMSUVEDQotCWV0YWcJCU5NVE9LRU4JCSNJTVBMSUVEDQotCW1kNQkJTk1UT0tFTgkJI0lNUExJRUQNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9wYXBfMS4wLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvcGFwXzEuMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZWQwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9wYXBfMS4wLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi08IS0tDQotUHVzaCBBY2Nlc3MgUHJvdG9jb2wgKFBBUCkgdjEuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVBBUCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHBhcCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUEFQIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcGFwXzEuMC5kdGQiPg0KLSAgIDxwYXA+DQotICAgICAgLi4uDQotICAgPC9wYXA+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgU3RhdGUgICIocmVqZWN0ZWQgfCBwZW5kaW5nIA0KLSAgICAgICAgICAgICAgICAgIHwgZGVsaXZlcmVkIHwgdW5kZWxpdmVyYWJsZSANCi0gICAgICAgICAgICAgICAgICB8IGV4cGlyZWQgfCBhYm9ydGVkIA0KLSAgICAgICAgICAgICAgICAgIHwgdGltZW91dCB8IGNhbmNlbGxlZCB8IHVua25vd24pIj4gICAgICAgIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUFBHIE1lc3NhZ2UgU3RhdGUgLS0+DQotDQotDQotPCFFTEVNRU5UIHBhcCAgICAgICAgICAgICAgICAgICAgKCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLXJlc3BvbnNlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFkbWVzc2FnZS1yZXNwb25zZSkgPg0KLTwhQVRUTElTVCBwYXANCi0gICAgICAgICAgcHJvZHVjdC1uYW1lICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgcHVzaCBzdWJtaXNzaW9uIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLW1lc3NhZ2UgKCBhZGRyZXNzKywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcHVzaC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZWxpdmVyLWJlZm9yZS10aW1lc3RhbXAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBkZWxpdmVyLWFmdGVyLXRpbWVzdGFtcCAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzb3VyY2UtcmVmZXJlbmNlICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBwcGctbm90aWZ5LXJlcXVlc3RlZC10byAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRCANCi0gICAgICAgICAgcHJvZ3Jlc3Mtbm90ZXMtcmVxdWVzdGVkICAgKCB0cnVlIHwgZmFsc2UgKSAgImZhbHNlIg0KLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyBFTVBUWSA+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICAgICAgICAgYWRkcmVzcy12YWx1ZSAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhRUxFTUVOVCBxdWFsaXR5LW9mLXNlcnZpY2UgRU1QVFkgPg0KLTwhQVRUTElTVCBxdWFsaXR5LW9mLXNlcnZpY2UNCi0gICAgICAgICAgcHJpb3JpdHkgICAgICAgICAgICAgICAoIGhpZ2ggfCBtZWRpdW0gfCBsb3cgKSAgICAgICAgIm1lZGl1bSINCi0gICAgICAgICAgZGVsaXZlcnktbWV0aG9kICAgICAgICAoIGNvbmZpcm1lZCB8IHByZWZlcmNvbmZpcm1lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuY29uZmlybWVkIHwgbm90c3BlY2lmaWVkICkgIm5vdHNwZWNpZmllZCINCi0gICAgICAgICAgbmV0d29yayAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbmV0d29yay1yZXF1aXJlZCAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLSAgICAgICAgICBiZWFyZXIgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiZWFyZXItcmVxdWlyZWQgICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotPg0KLQ0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHB1c2gtcmVzcG9uc2UgKCBwcm9ncmVzcy1ub3RlKiwgcmVzcG9uc2UtcmVzdWx0ICkgPg0KLTwhQVRUTElTVCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBseS10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwcm9ncmVzcy1ub3RlIEVNUFRZID4NCi08IUFUVExJU1QgcHJvZ3Jlc3Mtbm90ZQ0KLSAgICAgICAgICBzdGFnZSAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBub3RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHJlc3BvbnNlLXJlc3VsdCBFTVBUWSA+DQotPCFBVFRMSVNUIHJlc3BvbnNlLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYW5jZWwgb3BlcmF0aW9uICAgICAgICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXNwb25zZSAoIGNhbmNlbC1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXN1bHQgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBub3RpZnkgcmVzdWx0IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlICggYWRkcmVzcywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlY2VpdmVkLXRpbWUgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBzdGF0dXNxdWVyeSBvcGVyYXRpb24gICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXNwb25zZSAoIHN0YXR1c3F1ZXJ5LXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXN1bHQgKCBhZGRyZXNzKiwgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzdWx0DQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMgcXVlcnkgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtbWVzc2FnZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1tZXNzYWdlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYXBwLWlkICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtcmVzcG9uc2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGJhZCBtZXNzYWdlIHJlc3BvbnNlIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGJhZG1lc3NhZ2UtcmVzcG9uc2UgRU1QVFkgPg0KLTwhQVRUTElTVCBiYWRtZXNzYWdlLXJlc3BvbnNlDQotCWNvZGUJCQlDREFUQQkjUkVRVUlSRUQNCi0JZGVzYwkJCUNEQVRBCSNJTVBMSUVEDQotCWJhZC1tZXNzYWdlLWZyYWdtZW50CUNEQVRBCSNJTVBMSUVEDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zaS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NpLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlOTdjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NpLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIEluZGljYXRpb24gKFNJKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNJIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNpIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTSSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NpLmR0ZCI+DQotICAgPHNpPg0KLSAgIC4uLg0KLSAgIDwvc2k+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBVUkkgICAgICAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0kgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNpIChpbmRpY2F0aW9uLGluZm8/KT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBpbmRpY2F0aW9uIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZGljYXRpb24gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpbmRpY2F0aW9uDQotICBocmVmCSAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1pZAkgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY3JlYXRlZAklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1leHBpcmVzCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGFjdGlvbgkoc2lnbmFsLW5vbmV8c2lnbmFsLWxvd3wNCi0gICAgICAgICAgICAgICAgIHNpZ25hbC1tZWRpdW18c2lnbmFsLWhpZ2h8ZGVsZXRlKSAgInNpZ25hbC1tZWRpdW0iIA0KLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBJTkZPIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZm8gKGl0ZW0rKT4NCi0NCi08IUVMRU1FTlQgaXRlbSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGl0ZW0NCi0gIGNsYXNzCSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2wuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zbC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NzMxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08IS0tDQotU2VydmljZSBMb2FkaW5nIChTTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0wgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zbC5kdGQiPg0KLSAgIDxzbD4NCi0gICAuLi4NCi0gICA8L3NsPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4gICAgICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNMIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNsIEVNUFRZPg0KLTwhQVRUTElTVCBzbA0KLSAgaHJlZiAgICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBhY3Rpb24gICAgICAgIChleGVjdXRlLWxvd3xleGVjdXRlLWhpZ2h8Y2FjaGUpICAgICJleGVjdXRlLWxvdyIgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93bWwxMy5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3dtbDEzLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4YTQ5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3dtbDEzLmR0ZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd3RhLXdtbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd3RhLXdtbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwZjdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3d0YS13bWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgVGVsZXBob255IEFwcGxpY2F0aW9ucyBXaXJlbGVzcyBNYXJrdXAgTGFuZ3VhZ2UgKFdUQS1XTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi1XVEEtV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgd3RhLXdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV1RBLVdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3d0YS13bWwxMi5kdGQiPg0KLTx3dGEtd21sPg0KLS4uLg0KLTwvd3RhLXdtbD4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHdtbC1kdGQgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEyLmR0ZCI+DQotDQotJXdtbC1kdGQ7DQotDQotPCFFTEVNRU5UIHd0YS13bWwgKCBoZWFkPywgdGVtcGxhdGU/LCBjYXJkKyApPg0KLTwhQVRUTElTVCB3dGEtd21sDQotCXhtbDpsYW5nCQlOTVRPS0VOCSNJTVBMSUVEDQotCSVjb3JlYXR0cnM7DQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL2NoYW5uZWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9jaGFubmVsMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjIxMDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL2NoYW5uZWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tDQotICAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGlkZW50aWZpZXI6DQotICAgICAJIi0vL1dBUEZPUlVNLy9EVEQgQ0hBTk5FTCAxLjIvL0VOIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgQm9vbGVhbiAiKCB0cnVlIHwgZmFsc2UgKSI+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAtLT4NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiID4gIA0KLQ0KLTwhLS0gQ2hhbm5lbCBFdmVudHMgLS0+DQotPCFFTlRJVFkgJSBDaGFubmVsRXZlbnQuYXR0cmlicw0KLQkic3VjY2VzcwkJJVVSSTsJCSNJTVBMSUVEDQotCSBmYWlsdXJlCQklVVJJOwkJI0lNUExJRUQiDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFubmVsICh0aXRsZSAsIGFic3RyYWN0PyAsIHJlc291cmNlKiApID4NCi08IUFUVExJU1QgY2hhbm5lbA0KLQltYXhzcGFjZQkJJU51bWJlcjsJI1JFUVVJUkVEIA0KLQliYXNlCQkJJVVSSTsJCSNJTVBMSUVEDQotCWV2ZW50aWQJCQlDREFUQQkJI0lNUExJRUQNCi0JY2hhbm5lbGlkCQlDREFUQQkJI1JFUVVJUkVEIA0KLQl1c2VyYWNjZXNzaWJsZSAJCSVCb29sZWFuOwkiZmFsc2UiDQotCSVDaGFubmVsRXZlbnQuYXR0cmliczsNCi0+DQotDQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUVMRU1FTlQgYWJzdHJhY3QgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCByZXNvdXJjZSBFTVBUWT4NCi08IUFUVExJU1QgcmVzb3VyY2UNCi0JaHJlZiAgICAgIAklVVJJOwkgICAJI1JFUVVJUkVEDQotCWxhc3Rtb2QJCSVOdW1iZXI7CSNJTVBMSUVEDQotCWV0YWcJCU5NVE9LRU4JCSNJTVBMSUVEDQotCW1kNQkJTk1UT0tFTgkJI0lNUExJRUQNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvcGFwXzEuMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9wYXBfMS4wLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlZDBkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9wYXBfMS4wLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi08IS0tDQotUHVzaCBBY2Nlc3MgUHJvdG9jb2wgKFBBUCkgdjEuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVBBUCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHBhcCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUEFQIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcGFwXzEuMC5kdGQiPg0KLSAgIDxwYXA+DQotICAgICAgLi4uDQotICAgPC9wYXA+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgU3RhdGUgICIocmVqZWN0ZWQgfCBwZW5kaW5nIA0KLSAgICAgICAgICAgICAgICAgIHwgZGVsaXZlcmVkIHwgdW5kZWxpdmVyYWJsZSANCi0gICAgICAgICAgICAgICAgICB8IGV4cGlyZWQgfCBhYm9ydGVkIA0KLSAgICAgICAgICAgICAgICAgIHwgdGltZW91dCB8IGNhbmNlbGxlZCB8IHVua25vd24pIj4gICAgICAgIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUFBHIE1lc3NhZ2UgU3RhdGUgLS0+DQotDQotDQotPCFFTEVNRU5UIHBhcCAgICAgICAgICAgICAgICAgICAgKCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLXJlc3BvbnNlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFkbWVzc2FnZS1yZXNwb25zZSkgPg0KLTwhQVRUTElTVCBwYXANCi0gICAgICAgICAgcHJvZHVjdC1uYW1lICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgcHVzaCBzdWJtaXNzaW9uIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLW1lc3NhZ2UgKCBhZGRyZXNzKywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcHVzaC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZWxpdmVyLWJlZm9yZS10aW1lc3RhbXAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBkZWxpdmVyLWFmdGVyLXRpbWVzdGFtcCAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzb3VyY2UtcmVmZXJlbmNlICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBwcGctbm90aWZ5LXJlcXVlc3RlZC10byAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRCANCi0gICAgICAgICAgcHJvZ3Jlc3Mtbm90ZXMtcmVxdWVzdGVkICAgKCB0cnVlIHwgZmFsc2UgKSAgImZhbHNlIg0KLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyBFTVBUWSA+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICAgICAgICAgYWRkcmVzcy12YWx1ZSAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhRUxFTUVOVCBxdWFsaXR5LW9mLXNlcnZpY2UgRU1QVFkgPg0KLTwhQVRUTElTVCBxdWFsaXR5LW9mLXNlcnZpY2UNCi0gICAgICAgICAgcHJpb3JpdHkgICAgICAgICAgICAgICAoIGhpZ2ggfCBtZWRpdW0gfCBsb3cgKSAgICAgICAgIm1lZGl1bSINCi0gICAgICAgICAgZGVsaXZlcnktbWV0aG9kICAgICAgICAoIGNvbmZpcm1lZCB8IHByZWZlcmNvbmZpcm1lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuY29uZmlybWVkIHwgbm90c3BlY2lmaWVkICkgIm5vdHNwZWNpZmllZCINCi0gICAgICAgICAgbmV0d29yayAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbmV0d29yay1yZXF1aXJlZCAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLSAgICAgICAgICBiZWFyZXIgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiZWFyZXItcmVxdWlyZWQgICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotPg0KLQ0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHB1c2gtcmVzcG9uc2UgKCBwcm9ncmVzcy1ub3RlKiwgcmVzcG9uc2UtcmVzdWx0ICkgPg0KLTwhQVRUTElTVCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBseS10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwcm9ncmVzcy1ub3RlIEVNUFRZID4NCi08IUFUVExJU1QgcHJvZ3Jlc3Mtbm90ZQ0KLSAgICAgICAgICBzdGFnZSAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBub3RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHJlc3BvbnNlLXJlc3VsdCBFTVBUWSA+DQotPCFBVFRMSVNUIHJlc3BvbnNlLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYW5jZWwgb3BlcmF0aW9uICAgICAgICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXNwb25zZSAoIGNhbmNlbC1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXN1bHQgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBub3RpZnkgcmVzdWx0IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlICggYWRkcmVzcywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlY2VpdmVkLXRpbWUgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBzdGF0dXNxdWVyeSBvcGVyYXRpb24gICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXNwb25zZSAoIHN0YXR1c3F1ZXJ5LXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXN1bHQgKCBhZGRyZXNzKiwgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzdWx0DQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMgcXVlcnkgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtbWVzc2FnZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1tZXNzYWdlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYXBwLWlkICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtcmVzcG9uc2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGJhZCBtZXNzYWdlIHJlc3BvbnNlIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGJhZG1lc3NhZ2UtcmVzcG9uc2UgRU1QVFkgPg0KLTwhQVRUTElTVCBiYWRtZXNzYWdlLXJlc3BvbnNlDQotCWNvZGUJCQlDREFUQQkjUkVRVUlSRUQNCi0JZGVzYwkJCUNEQVRBCSNJTVBMSUVEDQotCWJhZC1tZXNzYWdlLWZyYWdtZW50CUNEQVRBCSNJTVBMSUVEDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2kuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2kuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2U5N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NpLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIEluZGljYXRpb24gKFNJKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNJIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNpIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTSSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NpLmR0ZCI+DQotICAgPHNpPg0KLSAgIC4uLg0KLSAgIDwvc2k+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBVUkkgICAgICAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0kgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNpIChpbmRpY2F0aW9uLGluZm8/KT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBpbmRpY2F0aW9uIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZGljYXRpb24gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpbmRpY2F0aW9uDQotICBocmVmCSAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1pZAkgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY3JlYXRlZAklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1leHBpcmVzCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGFjdGlvbgkoc2lnbmFsLW5vbmV8c2lnbmFsLWxvd3wNCi0gICAgICAgICAgICAgICAgIHNpZ25hbC1tZWRpdW18c2lnbmFsLWhpZ2h8ZGVsZXRlKSAgInNpZ25hbC1tZWRpdW0iIA0KLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBJTkZPIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZm8gKGl0ZW0rKT4NCi0NCi08IUVMRU1FTlQgaXRlbSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGl0ZW0NCi0gIGNsYXNzCSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3MzExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08IS0tDQotU2VydmljZSBMb2FkaW5nIChTTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0wgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zbC5kdGQiPg0KLSAgIDxzbD4NCi0gICAuLi4NCi0gICA8L3NsPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4gICAgICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNMIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNsIEVNUFRZPg0KLTwhQVRUTElTVCBzbA0KLSAgaHJlZiAgICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBhY3Rpb24gICAgICAgIChleGVjdXRlLWxvd3xleGVjdXRlLWhpZ2h8Y2FjaGUpICAgICJleGVjdXRlLWxvdyIgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd21sMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd21sMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDAzYzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3dtbDEyLmR0ZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3d0YS13bWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93dGEtd21sMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjBmN2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3d0YS13bWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgVGVsZXBob255IEFwcGxpY2F0aW9ucyBXaXJlbGVzcyBNYXJrdXAgTGFuZ3VhZ2UgKFdUQS1XTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi1XVEEtV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgd3RhLXdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV1RBLVdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3d0YS13bWwxMi5kdGQiPg0KLTx3dGEtd21sPg0KLS4uLg0KLTwvd3RhLXdtbD4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHdtbC1kdGQgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEyLmR0ZCI+DQotDQotJXdtbC1kdGQ7DQotDQotPCFFTEVNRU5UIHd0YS13bWwgKCBoZWFkPywgdGVtcGxhdGU/LCBjYXJkKyApPg0KLTwhQVRUTElTVCB3dGEtd21sDQotCXhtbDpsYW5nCQlOTVRPS0VOCSNJTVBMSUVEDQotCSVjb3JlYXR0cnM7DQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL2NoYW5uZWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9jaGFubmVsMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjIxMDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL2NoYW5uZWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tDQotICAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGlkZW50aWZpZXI6DQotICAgICAJIi0vL1dBUEZPUlVNLy9EVEQgQ0hBTk5FTCAxLjIvL0VOIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgQm9vbGVhbiAiKCB0cnVlIHwgZmFsc2UgKSI+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAtLT4NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiID4gIA0KLQ0KLTwhLS0gQ2hhbm5lbCBFdmVudHMgLS0+DQotPCFFTlRJVFkgJSBDaGFubmVsRXZlbnQuYXR0cmlicw0KLQkic3VjY2VzcwkJJVVSSTsJCSNJTVBMSUVEDQotCSBmYWlsdXJlCQklVVJJOwkJI0lNUExJRUQiDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFubmVsICh0aXRsZSAsIGFic3RyYWN0PyAsIHJlc291cmNlKiApID4NCi08IUFUVExJU1QgY2hhbm5lbA0KLQltYXhzcGFjZQkJJU51bWJlcjsJI1JFUVVJUkVEIA0KLQliYXNlCQkJJVVSSTsJCSNJTVBMSUVEDQotCWV2ZW50aWQJCQlDREFUQQkJI0lNUExJRUQNCi0JY2hhbm5lbGlkCQlDREFUQQkJI1JFUVVJUkVEIA0KLQl1c2VyYWNjZXNzaWJsZSAJCSVCb29sZWFuOwkiZmFsc2UiDQotCSVDaGFubmVsRXZlbnQuYXR0cmliczsNCi0+DQotDQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUVMRU1FTlQgYWJzdHJhY3QgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCByZXNvdXJjZSBFTVBUWT4NCi08IUFUVExJU1QgcmVzb3VyY2UNCi0JaHJlZiAgICAgIAklVVJJOwkgICAJI1JFUVVJUkVEDQotCWxhc3Rtb2QJCSVOdW1iZXI7CSNJTVBMSUVEDQotCWV0YWcJCU5NVE9LRU4JCSNJTVBMSUVEDQotCW1kNQkJTk1UT0tFTgkJI0lNUExJRUQNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcGFwXzIuMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wYXBfMi4wLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY2ZThmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wYXBfMi4wLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi08IS0tDQotUHVzaCBBY2Nlc3MgUHJvdG9jb2wgKFBBUCkgdjIuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVBBUCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHBhcCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUEFQIDIuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcGFwXzIuMC5kdGQiDQotICAgICAgICAgICAgIFs8P3dhcC1wYXAtdmVyIHN1cHBvcnRlZC12ZXJzaW9ucz0iMi4wLDEuKiI/Pl0+DQotICAgPHBhcD4NCi0gICAgICAuLi4NCi0gICA8L3BhcD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBTdGF0ZSAgIihyZWplY3RlZCB8IHBlbmRpbmcgDQotICAgICAgICAgICAgICAgICAgfCBkZWxpdmVyZWQgfCB1bmRlbGl2ZXJhYmxlIA0KLSAgICAgICAgICAgICAgICAgIHwgZXhwaXJlZCB8IGFib3J0ZWQgDQotICAgICAgICAgICAgICAgICAgfCB0aW1lb3V0IHwgY2FuY2VsbGVkIHwgdW5rbm93bikiPiAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQUEcgTWVzc2FnZSBTdGF0ZSAtLT4NCi0NCi0NCi08IUVMRU1FTlQgcGFwICAgICAgICAgICAgICAgICAgICAoIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtcmVzcG9uc2UgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYWRtZXNzYWdlLXJlc3BvbnNlKSA+DQotPCFBVFRMSVNUIHBhcA0KLSAgICAgICAgICBwcm9kdWN0LW5hbWUgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBwdXNoIHN1Ym1pc3Npb24gbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHB1c2gtbWVzc2FnZSAoIGFkZHJlc3MrLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHJlcGxhY2UtcHVzaC1pZCAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlcGxhY2UtbWV0aG9kICAgICAgICAgICAgICggcGVuZGluZy1vbmx5IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCApICAgICAgICAgICAiYWxsIg0KLSAgICAgICAgICBkZWxpdmVyLWJlZm9yZS10aW1lc3RhbXAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBkZWxpdmVyLWFmdGVyLXRpbWVzdGFtcCAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzb3VyY2UtcmVmZXJlbmNlICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBwcGctbm90aWZ5LXJlcXVlc3RlZC10byAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRCANCi0gICAgICAgICAgcHJvZ3Jlc3Mtbm90ZXMtcmVxdWVzdGVkICAgKCB0cnVlIHwgZmFsc2UgKSAgImZhbHNlIg0KLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyBFTVBUWSA+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICAgICAgICAgYWRkcmVzcy12YWx1ZSAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhRUxFTUVOVCBxdWFsaXR5LW9mLXNlcnZpY2UgRU1QVFkgPg0KLTwhQVRUTElTVCBxdWFsaXR5LW9mLXNlcnZpY2UNCi0gICAgICAgICAgcHJpb3JpdHkgICAgICAgICAgICAgICAoIGhpZ2ggfCBtZWRpdW0gfCBsb3cgKSAgICAgICAgIm1lZGl1bSINCi0gICAgICAgICAgZGVsaXZlcnktbWV0aG9kICAgICAgICAoIGNvbmZpcm1lZCB8IHByZWZlcmNvbmZpcm1lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuY29uZmlybWVkIHwgbm90c3BlY2lmaWVkICkgIm5vdHNwZWNpZmllZCINCi0gICAgICAgICAgbmV0d29yayAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbmV0d29yay1yZXF1aXJlZCAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLSAgICAgICAgICBiZWFyZXIgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiZWFyZXItcmVxdWlyZWQgICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotPg0KLQ0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHB1c2gtcmVzcG9uc2UgKCBwcm9ncmVzcy1ub3RlKiwgcmVzcG9uc2UtcmVzdWx0ICkgPg0KLTwhQVRUTElTVCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBseS10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwcm9ncmVzcy1ub3RlIEVNUFRZID4NCi08IUFUVExJU1QgcHJvZ3Jlc3Mtbm90ZQ0KLSAgICAgICAgICBzdGFnZSAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBub3RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHJlc3BvbnNlLXJlc3VsdCBFTVBUWSA+DQotPCFBVFRMSVNUIHJlc3BvbnNlLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYW5jZWwgb3BlcmF0aW9uICAgICAgICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXNwb25zZSAoIGNhbmNlbC1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXN1bHQgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBub3RpZnkgcmVzdWx0IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlICggYWRkcmVzcywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlY2VpdmVkLXRpbWUgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBzdGF0dXNxdWVyeSBvcGVyYXRpb24gICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXNwb25zZSAoIHN0YXR1c3F1ZXJ5LXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXN1bHQgKCBhZGRyZXNzKiwgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzdWx0DQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMgcXVlcnkgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtbWVzc2FnZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1tZXNzYWdlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYXBwLWlkICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtcmVzcG9uc2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGJhZCBtZXNzYWdlIHJlc3BvbnNlIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGJhZG1lc3NhZ2UtcmVzcG9uc2UgRU1QVFkgPg0KLTwhQVRUTElTVCBiYWRtZXNzYWdlLXJlc3BvbnNlDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYmFkLW1lc3NhZ2UtZnJhZ21lbnQgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3Byb3YuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcHJvdi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYzA0NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcHJvdi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08IS0tDQotQ2xpZW50IFByb3Zpc2lvbmluZyB2MS4wIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotQ29ubmVjdGl2aXR5IERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbg0KLUNvbm5lY3Rpdml0eSBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgVXNhZ2U6DQotDQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHdhcC1wcm92aXNpb25pbmdkb2MgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFBST1YgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9wcm92LmR0ZCI+DQotICAgICAgICAgICAgDQotPHdhcC1wcm92aXNpb25pbmdkb2M+DQotLi4uDQotPC93YXAtcHJvdmlzaW9uaW5nZG9jPg0KLQ0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTEVNRU5UIHdhcC1wcm92aXNpb25pbmdkb2MgKGNoYXJhY3RlcmlzdGljKyk+DQotPCFBVFRMSVNUIHdhcC1wcm92aXNpb25pbmdkb2MNCi0gIHZlcnNpb24gICBDREFUQSAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgY2hhcmFjdGVyaXN0aWMgKHBhcm0qLCBjaGFyYWN0ZXJpc3RpYyopPg0KLTwhQVRUTElTVCBjaGFyYWN0ZXJpc3RpYw0KLSAgdHlwZSBDREFUQSAjUkVRVUlSRUQNCi0gDQotPg0KLQ0KLTwhRUxFTUVOVCBwYXJtIEVNUFRZPg0KLTwhQVRUTElTVCBwYXJtDQotICBuYW1lICBDREFUQSAjUkVRVUlSRUQNCi0gIHZhbHVlIENEQVRBICNJTVBMSUVEDQotPg0KLQ0KLQ0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2kuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2kuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2U5N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NpLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIEluZGljYXRpb24gKFNJKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNJIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNpIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTSSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NpLmR0ZCI+DQotICAgPHNpPg0KLSAgIC4uLg0KLSAgIDwvc2k+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBVUkkgICAgICAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0kgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNpIChpbmRpY2F0aW9uLGluZm8/KT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBpbmRpY2F0aW9uIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZGljYXRpb24gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpbmRpY2F0aW9uDQotICBocmVmCSAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1pZAkgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY3JlYXRlZAklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1leHBpcmVzCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGFjdGlvbgkoc2lnbmFsLW5vbmV8c2lnbmFsLWxvd3wNCi0gICAgICAgICAgICAgICAgIHNpZ25hbC1tZWRpdW18c2lnbmFsLWhpZ2h8ZGVsZXRlKSAgInNpZ25hbC1tZWRpdW0iIA0KLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBJTkZPIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZm8gKGl0ZW0rKT4NCi0NCi08IUVMRU1FTlQgaXRlbSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGl0ZW0NCi0gIGNsYXNzCSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3MzExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08IS0tDQotU2VydmljZSBMb2FkaW5nIChTTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0wgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zbC5kdGQiPg0KLSAgIDxzbD4NCi0gICAuLi4NCi0gICA8L3NsPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4gICAgICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNMIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNsIEVNUFRZPg0KLTwhQVRUTElTVCBzbA0KLSAgaHJlZiAgICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBhY3Rpb24gICAgICAgIChleGVjdXRlLWxvd3xleGVjdXRlLWhpZ2h8Y2FjaGUpICAgICJleGVjdXRlLWxvdyIgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWRlcHJlY2F0ZWQtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZGVwcmVjYXRlZC0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0YWQyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZGVwcmVjYXRlZC0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi08IS0tIFdNTCBEZXByZWNhdGVkIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWRlcHJlY2F0ZWQtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtZGVwcmVjYXRlZC0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgY29udGFpbnMgZGVwcmVjYXRlZCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4NCi0JDQotCQlBdHRyaWJ1dGVzOiBXTUwgbW9kZSwgWEhUTUwgYWxpZ24sIFhIVE1MIHZzcGFjZSwgWEhUTUwgaHNwYWNlDQotCQkNCi0JCUVsZW1lbnRzOiB1LCBiLCBiaWcsIGksIHNtYWxsIA0KLQkJDQotLS0+DQotPCEtLSANCi0JcCANCi0JDQotCSpXTUwgbW9kZQ0KLQkqWEhUTUwgYWxpZ24NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUFUVExJU1QgJXAucW5hbWU7DQotCSVhdHQubW9kZS5xbmFtZTsgKHdyYXAgfCBub3dyYXApICNJTVBMSUVEDQotCWFsaWduIChsZWZ0IHwgcmlnaHQgfCBjZW50ZXIpICJsZWZ0Ig0KLT4NCi08IS0tIA0KLQl0YWJsZSANCi0JDQotCSpXTUwgYWxpZ24gDQotCQ0KLQlOb3RlOiBUaGUgV01MIGFsaWduIGF0dHJpYnV0ZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIFhIVE1MIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUuDQotLS0+DQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0JJWF0dC5hbGlnbi5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW1nIA0KLQkNCi0JKlhIVE1MIHZzcGFjZSwgaHNwYWNlLCBhbGlnbg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhQVRUTElTVCBpbWcNCi0JdnNwYWNlIENEQVRBICIwIg0KLQloc3BhY2UgQ0RBVEEgIjAiDQotCWFsaWduICh0b3AgfCBtaWRkbGUgfCBib3R0b20pICJib3R0b20iDQotPg0KLTwhLS0gDQotCUlubGluZSBQcmVzZW50YXRpb24gDQotCQ0KLQkqWEhUTUwgIGIsIGJpZywgaSwgc21hbGwJDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJ4aHRtbC1pbmxwcmVzLTEubW9kIj4NCi0leGh0bWwtaW5scHJlcy5tb2Q7DQotPCEtLSANCi0JdQ0KLQ0KLQlUaGlzIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgWEhUTUwgaW5saW5lIHByZXNlbnRhdGlvbiBtb2R1bGUuDQotCUl0IHdhcyBkZXByZWNhdGVkIGFscmVhZHkgaW4gSFRNTCA0LjAuDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFFTlRJVFkgJSB1LmNvbnRlbnQgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiI+DQotPCFFTlRJVFkgJSB1LnFuYW1lICJ1Ij4NCi08IUVMRU1FTlQgJXUucW5hbWU7ICV1LmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCAldS5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQltZXRhIA0KLQkNCi0JKldNTCBmb3J1YSBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJW1ldGEucW5hbWU7DQotCSVhdHQuZm9ydWEucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAidHJ1ZSINCi0+DQotPCEtLQ0KLQlodG1sDQotCQ0KLQkqV01MIHVzZS14bWwtZnJhZ21lbnQgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLQklYXR0LnVzZXhtbGZyYWdtZW50LnFuYW1lOyAJJUJvb2xlYW4uZGF0YXR5cGU7ICJ0cnVlIg0KLT4NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZnJhbWV3b3JrLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWZyYW1ld29yay0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA2MWFmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZnJhbWV3b3JrLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPCEtLSBXTUwgTW9kdWxhciBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWZyYW1ld29yay0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sLWZyYW1ld29yay0xLm1vZCINCi0gICAgICAgDQotICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayBtb2R1bGUuIEluIGFkZGl0aW9uIHRvIHRoZSANCi0gICAgICAgcmVxdWlyZWQgWEhUTUwgZW50aXRpZXMgaXQgaW5jbHVkZXM6DQotICAgICAgIA0KLSAgICAgICAJCSpXTUwgZGF0YXR5cGVzDQotICAgICAgIAkJKldNTCBuYW1lc3BhY2UgcXVhbGlmaWVkIG5hbWVzDQotICAgICAgIAkJKldNTCBkb2N1bWVudCBtb2RlbCAgICAgICANCi0tLT4NCi08IS0tIA0KLQlYSFRNTCBub3RhdGlvbnMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLW5vdGF0aW9ucy5tb2QgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCI+DQotJXhodG1sLW5vdGF0aW9ucy5tb2Q7DQotPCEtLSANCi0JV01MIGRhdGF0eXBlcw0KLS0tPg0KLTwhRU5USVRZICUgQm9vbGVhbi5kYXRhdHlwZSAiKHRydWV8ZmFsc2UpIj4NCi08IS0tIA0KLQlYSFRNTCBkYXRhdHlwZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWRhdGF0eXBlcy5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIERhdGF0eXBlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZGF0YXR5cGVzLTEubW9kIj4NCi0leGh0bWwtZGF0YXR5cGVzLm1vZDsNCi08IS0tIA0KLQlXTUwgcXVhbGlmaWVkIG5hbWVzDQotLS0+DQotPCFFTlRJVFkgJSB3bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtcW5hbWUtMS5tb2QiPg0KLSV3bWwtcW5hbWUubW9kOw0KLTwhLS0gDQotCVhIVE1MIHF1YWxpZmllZCBuYW1lcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIj4NCi0leGh0bWwtcW5hbWUubW9kOw0KLTwhLS0NCi0JWEhUTUwgZ2xvYmFsIGF0dHJpYnV0ZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWlubHN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCI+DQotJXhodG1sLWlubHN0eWxlLm1vZDsNCi08IUVOVElUWSAlIFhIVE1MLmJpZGkgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1hdHRyaWJzLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiPg0KLSV4aHRtbC1hdHRyaWJzLm1vZDsNCi08IS0tIA0KLQlYSFRNTCBjaGFyYWN0ZXIgZW50aXRpZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWNoYXJlbnQtMS5tb2QiPg0KLSV4aHRtbC1jaGFyZW50Lm1vZDsNCi08IS0tIA0KLQlXTUwgZG9jdW1lbnQgbW9kZWwNCi0tLT4NCi08IUVOVElUWSAlIHdtbC1tb2RlbC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIDIuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDIwLW1vZGVsLTEubW9kIj4NCi0ld21sLW1vZGVsLm1vZDsNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtcW5hbWUtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtcW5hbWUtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjVhNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXFuYW1lLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPCEtLSBXTUwgUXVhbGlmaWVkIE5hbWVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtcW5hbWUtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotCVBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtcW5hbWUtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGRlY2xhcmVzIFdNTCBuYW1lcyB3aXRoIHRoZSBXTUwgbmFtZXNwYWNlIHByZWZpeC4JDQotDQotLS0+DQotPCEtLQ0KLQlUaGUgV01MIG5hbWVzcGFjZSBuYW1lDQotLS0+DQotPCFFTlRJVFkgJSBXTUwueG1sbnMgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi08IS0tDQotCVdNTCBuYW1lc3BhY2UgcHJlZml4DQotCQ0KLQlPbiBXTUwgZWxlbWVudHMgV01MIGlzIGRlY2xhcmVkIGFzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4gDQotCU5hbWVzcGFjZSBwcmVmaXggaXMgdXNlZCBvbmx5IGZvciBXTUwgYXR0cmlidXRlcyBvbiBYSFRNTCBlbGVtZW50cy4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC5wcmVmaXggIndtbCI+DQotPCEtLQ0KLQlQYXJhbWV0ZXIgZW50aXR5IHdpdGggdGhlIFdNTCBuYW1lc3BhY2UgcHJlZml4IHBsdXMgdGhlICI6Ii4gDQotCVRoZSBhY3R1YWwgcHJlZml4LCBXTUwucHJlZml4LCBpcyBkZWNsYXJlZCBpbiB0aGUgV01MIERURCBkcml2ZXIuIA0KLS0tPg0KLTwhRU5USVRZICUgV01MLnBmeCAiJVdNTC5wcmVmaXg7OiI+DQotPCEtLQ0KLQlBdHRyaWJ1dGUgdXNlZCB0byBkZWNsYXJlIHRoZSBXTUwgbmFtZXNwYWNlIHdpdGggdGhlIFdNTCBwcmVmaXguDQotLS0+DQotPCFFTlRJVFkgJSBXTUwueG1sbnMuZXh0cmEuYXR0cmliICJ4bWxuczolV01MLnByZWZpeDsJICVVUkkuZGF0YXR5cGU7IAkJI0ZJWEVEIAknJVdNTC54bWxuczsnIj4NCi08IS0tDQotCUFsbCBXTUwgcXVhbGlmaWVkIG5hbWVzLiANCi0JDQotCU5vdGUgdGhhdCBlbGVtZW50IG5hbWVzIGFyZSBub3QgcHJlZml4ZWQuIE9ubHkgYXR0cmlidXRlIG5hbWVzIGFyZS4NCi0tLT4NCi08IUVOVElUWSAlIGNhcmQucW5hbWUgIiVXTUwucGZ4O2NhcmQiPg0KLTwhRU5USVRZICUgZG8ucW5hbWUgIiVXTUwucGZ4O2RvIj4NCi08IUVOVElUWSAlIGFjY2Vzcy5xbmFtZSAiJVdNTC5wZng7YWNjZXNzIj4NCi08IUVOVElUWSAlIGdvLnFuYW1lICIlV01MLnBmeDtnbyI+DQotPCFFTlRJVFkgJSBwcmV2LnFuYW1lICIlV01MLnBmeDtwcmV2Ij4NCi08IUVOVElUWSAlIHJlZnJlc2gucW5hbWUgIiVXTUwucGZ4O3JlZnJlc2giPg0KLTwhRU5USVRZICUgbm9vcC5xbmFtZSAiJVdNTC5wZng7bm9vcCI+DQotPCFFTlRJVFkgJSBvbmV2ZW50LnFuYW1lICIlV01MLnBmeDtvbmV2ZW50Ij4NCi08IUVOVElUWSAlIHBvc3RmaWVsZC5xbmFtZSAiJVdNTC5wZng7cG9zdGZpZWxkIj4NCi08IUVOVElUWSAlIHNldHZhci5xbmFtZSAiJVdNTC5wZng7c2V0dmFyIj4NCi08IUVOVElUWSAlIGdldHZhci5xbmFtZSAiJVdNTC5wZng7Z2V0dmFyIj4NCi08IUVOVElUWSAlIHRpbWVyLnFuYW1lICIlV01MLnBmeDt0aW1lciI+DQotPCFFTlRJVFkgJSB3aWRnZXQucW5hbWUgIiVXTUwucGZ4O3dpZGdldCI+DQotPCFFTlRJVFkgJSBhbmNob3IucW5hbWUgIiVXTUwucGZ4O2FuY2hvciI+DQotPCFFTlRJVFkgJSBhdHQuZm9ydWEucW5hbWUgIiVXTUwucGZ4O2ZvcnVhIj4NCi08IUVOVElUWSAlIGF0dC52YWx1ZS5xbmFtZSAiJVdNTC5wZng7dmFsdWUiPg0KLTwhRU5USVRZICUgYXR0LmluYW1lLnFuYW1lICIlV01MLnBmeDtpbmFtZSI+DQotPCFFTlRJVFkgJSBhdHQubmFtZS5xbmFtZSAiJVdNTC5wZng7bmFtZSI+DQotPCFFTlRJVFkgJSBhdHQuaXZhbHVlLnFuYW1lICIlV01MLnBmeDtpdmFsdWUiPg0KLTwhRU5USVRZICUgYXR0LmZvcm1hdC5xbmFtZSAiJVdNTC5wZng7Zm9ybWF0Ij4NCi08IUVOVElUWSAlIGF0dC5lbXB0eW9rLnFuYW1lICIlV01MLnBmeDtlbXB0eW9rIj4NCi08IUVOVElUWSAlIGF0dC5sb2NhbHNyYy5xbmFtZSAiJVdNTC5wZng7bG9jYWxzcmMiPg0KLTwhRU5USVRZICUgYXR0LmNvbHVtbnMucW5hbWUgIiVXTUwucGZ4O2NvbHVtbnMiPg0KLTwhRU5USVRZICUgYXR0LmFsaWduLnFuYW1lICIlV01MLnBmeDthbGlnbiI+DQotPCFFTlRJVFkgJSBhdHQubW9kZS5xbmFtZSAiJVdNTC5wZng7bW9kZSI+DQotPCFFTlRJVFkgJSBhdHQub25lbnRlcmZvcndhcmQucW5hbWUgIiVXTUwucGZ4O29uZW50ZXJmb3J3YXJkIj4NCi08IUVOVElUWSAlIGF0dC5vbmVudGVyYmFja3dhcmQucW5hbWUgIiVXTUwucGZ4O29uZW50ZXJiYWNrd2FyZCI+DQotPCFFTlRJVFkgJSBhdHQub250aW1lci5xbmFtZSAiJVdNTC5wZng7b250aW1lciI+DQotPCFFTlRJVFkgJSBhdHQub25waWNrLnFuYW1lICIlV01MLnBmeDtvbnBpY2siPg0KLTwhRU5USVRZICUgYXR0Lm5ld2NvbnRleHQucW5hbWUgIiVXTUwucGZ4O25ld2NvbnRleHQiPg0KLTwhRU5USVRZICUgYXR0LnVzZXhtbGZyYWdtZW50LnFuYW1lICIlV01MLnBmeDt1c2UteG1sLWZyYWdtZW50cyI+DQotPCFFTlRJVFkgJSBhdHQudHlwZS5xbmFtZSAiJVdNTC5wZng7dHlwZSI+DQotPCEtLQ0KLQlUaGUgdSBlbGVtZW50IGlzIG5vdCBkZWNsYXJlZCBpbiBYSFRNTCwgYmVjYXVzZSBpdCBoYXMgYmVlZCByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLiANCi0JU28gaXQgbXVzdCBiZSBkZWNsYXJlZCBoZXJlLiBJdCBpcywgaG93ZXZlciwgZGVwcmVjYXRlZCBpbiBXTUwuIA0KLS0tPg0KLTwhRU5USVRZICUgdS5xbmFtZSAidSI+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXNwZWNpYWwtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtc3BlY2lhbC0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4NTkxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtc3BlY2lhbC0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi08IS0tIFdNTCAyLjAgU3BlY2lhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1zcGVjaWFsLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBTcGVjaWFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLXNwZWNpYWwtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nIFdNTCBlbGVtZW50cy4gDQotCQ0KLQkJY2FyZCwgZG8sIG9uZXZlbnQsIGFjY2VzcywgZ28sIHByZXYsDQotCQlyZWZyZXNoLCBub29wLCAgcG9zdGZpZWxkLCBzZXR2YXIsIGdldHZhcg0KLQkJdGltZXIsIGFuY2hvcg0KLQkJDQotCUl0IGFsc28gY29udGFpbnMgV01MIGV4dGVuc2lvbnMgb2YgWEhUTUwgZWxlbWVudHMuIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEdsb2JhbCBhdHRyaWJ1dGVzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgRXZlbnQgYXR0cmlidXRlcw0KLQkNCi0JVGhlc2UgYXJlIHVzZWQgb24gdGhlIFhIVE1MIGJvZHkgYW5kIGh0bWwgZWxlbWVudHMuDQotCVRoZSBzYW1lIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSBXTUwgY2FyZCBlbGVtZW50LCBidXQNCi0Jd2l0aG91dCBuYW1lc3BhY2UgcHJlZml4Lg0KLS0tPg0KLTwhRU5USVRZICUgV01MLmV2ZW50LmF0dHJpYiAiJWF0dC5vbmVudGVyZm9yd2FyZC5xbmFtZTsgQ0RBVEEJI0lNUExJRUQNCi0gJWF0dC5vbmVudGVyYmFja3dhcmQucW5hbWU7IENEQVRBCSNJTVBMSUVEDQotICVhdHQub250aW1lci5xbmFtZTsgQ0RBVEEJI0lNUExJRUQiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEVsZW1lbnRzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlDYXJkcyANCi0JDQotCVVzZSBzYW1lIGNvbnRlbnQgbW9kZWwgYXMgdGhlIEhUTUwgYm9keSBlbGVtZW50DQotLS0+DQotPCFFTEVNRU5UICVjYXJkLnFuYW1lOyAlQ2FyZEJvZHkubWl4Oz4NCi08IUFUVExJU1QgJWNhcmQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JbmV3Y29udGV4dCAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQlvbmVudGVyZm9yd2FyZCBDREFUQSAjSU1QTElFRA0KLQlvbmVudGVyYmFja3dhcmQgQ0RBVEEgI0lNUExJRUQNCi0Jb250aW1lciBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlEbyANCi0tLT4NCi08IUVMRU1FTlQgJWRvLnFuYW1lOyAoJVRhc2tzLmNsYXNzOyk+DQotPCFBVFRMSVNUICVkby5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLSAgCXR5cGUgICAgICAgICAgICAgQ0RBVEEgICAgICAgI1JFUVVJUkVEDQotICAJbGFiZWwgICAgICAgICAgICAgQ0RBVEEgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JT25ldmVudCANCi0tLT4NCi08IUVMRU1FTlQgJW9uZXZlbnQucW5hbWU7ICVUYXNrcy5jbGFzczs+DQotPCFBVFRMSVNUICVvbmV2ZW50LnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQl0eXBlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlBY2Nlc3MgDQotLS0+DQotPCFFTEVNRU5UICVhY2Nlc3MucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlYWNjZXNzLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQlkb21haW4gQ0RBVEEgI0lNUExJRUQNCi0JcGF0aCBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlHbyANCi0tLT4NCi08IUVOVElUWSAlIGNhY2hlLWNvbnRyb2wgJyhuby1jYWNoZSknPg0KLTwhRUxFTUVOVCAlZ28ucW5hbWU7ICglcG9zdGZpZWxkLnFuYW1lOyB8ICVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVnby5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JaHJlZiAlVVJJLmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0Jc2VuZHJlZmVyZXIgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0JdHlwZSAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICNJTVBMSUVEDQotCW1ldGhvZCAocG9zdCB8IGdldCkgImdldCINCi0JZW5jdHlwZSAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiDQotCWFjY2VwdC1jaGFyc2V0IENEQVRBICNJTVBMSUVEDQotCWNhY2hlLWNvbnRyb2wgJWNhY2hlLWNvbnRyb2w7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCVByZXYgDQotLS0+DQotPCFFTEVNRU5UICVwcmV2LnFuYW1lOyAoJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJXByZXYucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCVJlZnJlc2ggDQotLS0+DQotPCFFTEVNRU5UICVyZWZyZXNoLnFuYW1lOyAoJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJXJlZnJlc2gucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCU5vb3AgDQotLS0+DQotPCFFTEVNRU5UICVub29wLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJW5vb3AucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCVBvc3RmaWVsZCANCi0tLT4NCi08IUVMRU1FTlQgJXBvc3RmaWVsZC5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVwb3N0ZmllbGQucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlTZXR2YXIgDQotLS0+DQotPCFFTEVNRU5UICVzZXR2YXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlc2V0dmFyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JR2V0dmFyDQotLS0+DQotPCFFTEVNRU5UICVnZXR2YXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlZ2V0dmFyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQljb252ZXJzaW9uIChlc2NhcGUgfCBub2VzYyB8IHVuZXNjKSAibm9lc2MiDQotPg0KLTwhLS0gDQotCVRpbWVyICANCi0tLT4NCi08IUVMRU1FTlQgJXRpbWVyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXRpbWVyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIE5NVE9LRU4gI0lNUExJRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUFuY2hvciANCi0JDQotCVNhbWUgY29udGVudCBtb2RlbCBhcyBIVE1MIGEgZWxlbWVudCwgYnV0IGV4dGVuZGVkIHdpdGggV01MIHRhc2tzLg0KLS0tPg0KLTwhRUxFTUVOVCAlYW5jaG9yLnFuYW1lOyAoI1BDREFUQSB8ICVJbmxOb0FuY2hvci5taXg7IHwgJVRhc2tzLW5vbm9vcC5jbGFzczspKj4NCi08IUFUVExJU1QgJWFuY2hvci5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQlhY2Nlc3NrZXkgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgZXh0ZW5zaW9ucyBvZiBYSFRNTCBlbGVtZW50cw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0Jc2VsZWN0IA0KLQkNCi0JKldNTCBpbmFtZSwgaXZhbHVlLCB2YWx1ZSwgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICVzZWxlY3QucW5hbWU7DQotCSVhdHQuaW5hbWUucW5hbWU7IE5NVE9LRU4gI0lNUExJRUQNCi0JJWF0dC52YWx1ZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5pdmFsdWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW5wdXQgDQotCQ0KLQkqV01MIGZvcm1hdCwgZW1wdHlvaywgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICVpbnB1dC5xbmFtZTsNCi0JJWF0dC5mb3JtYXQucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuZW1wdHlvay5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JdGV4dGFyZWENCi0JDQotCSpXTUwgZm9ybWF0LCBlbXB0eW9rLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCBhdHRyaWJ1dGUgKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICV0ZXh0YXJlYS5xbmFtZTsNCi0JJWF0dC5mb3JtYXQucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuZW1wdHlvay5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0Jb3B0aW9uDQotCQ0KLQkqV01MIG9ucGljayBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJW9wdGlvbi5xbmFtZTsNCi0JJWF0dC5vbnBpY2sucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWltZyANCi0NCi0JKldNTCBsb2NhbHNyYyBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgaW1nDQotCSVhdHQubG9jYWxzcmMucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQudHlwZS5xbmFtZTsgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQl0YWJsZSANCi0JDQotCSpXTUwgY29sdW1ucyBhdHRyaWJ1dGUNCi0JDQotLS0+DQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0JJWF0dC5jb2x1bW5zLnFuYW1lOyAlTnVtYmVyLmRhdGF0eXBlOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlib2R5IA0KLQkNCi0JKldNTCBuZXdjb250ZXh0IA0KLQkqV01MIGV2ZW50IGF0dHJpYnV0ZXMNCi0tLT4NCi08IUFUVExJU1QgJWJvZHkucW5hbWU7DQotCSVhdHQubmV3Y29udGV4dC5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0JJVdNTC5ldmVudC5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlodG1sIA0KLQkNCi0JKkRlY2xhcmF0aW9uIG9mIFdNTCBuYW1lc3BhY2Ugd2l0aCBwcmVmaXgJDQotCSpXTUwgZXZlbnQgYXR0cmlidXRlcw0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0JJVdNTC54bWxucy5leHRyYS5hdHRyaWI7IA0KLQklV01MLmV2ZW50LmF0dHJpYjsgDQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLWZsYXQuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtZmxhdC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNTcwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtZmxhdC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzNjA5ICswLDAgQEAKLTwhLS0gV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLQlUaGlzIGlzIHRoZSBXTUwgMi4wIERURCBkcml2ZXIgZmlsZS4gUGxlYXNlIHVzZSB0aGlzIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoNCi0NCi0gICAgICAgICAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgCSAgICAgICAgICANCi0gICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFdNTCAyLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgICAgICB4bWxuczp3bWw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlWZXJzaW9uLCBYTUwgTmFtZXNwYWNlcywgYW5kIHByb2ZpbGUgaW5mb3JtYXRpb24gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCVZhbHVlIG9mIFhIVE1MIHZlcnNpb24gYXR0cmlidXRlIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiI+DQotPCEtLSANCi0JVmFsdWUgb2YgWEhUTUwgcHJvZmlsZSBhdHRyaWJ1dGUNCi0JDQotCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICIiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJTW9kdWxhcmlzYXRpb24gZnJhbWV3b3JrIHNldHVwDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IUVOVElUWSAlIHdtbC1mcmFtZXdvcmsubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWZyYW1ld29yay0xLm1vZCI+DQotPCEtLSBXTUwgTW9kdWxhciBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWZyYW1ld29yay0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sLWZyYW1ld29yay0xLm1vZCINCi0gICAgICAgDQotICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayBtb2R1bGUuIEluIGFkZGl0aW9uIHRvIHRoZSANCi0gICAgICAgcmVxdWlyZWQgWEhUTUwgZW50aXRpZXMgaXQgaW5jbHVkZXM6DQotICAgICAgIA0KLSAgICAgICAJCSpXTUwgZGF0YXR5cGVzDQotICAgICAgIAkJKldNTCBuYW1lc3BhY2UgcXVhbGlmaWVkIG5hbWVzDQotICAgICAgIAkJKldNTCBkb2N1bWVudCBtb2RlbCAgICAgICANCi0tLT4NCi08IS0tIA0KLQlYSFRNTCBub3RhdGlvbnMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLW5vdGF0aW9ucy5tb2QgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTm90YXRpb25zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW5vdGF0aW9ucy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBOb3RhdGlvbnMNCi0NCi0gICAgIGRlZmluZXMgdGhlIGZvbGxvd2luZyBub3RhdGlvbnMsIG1hbnkgb2YgdGhlc2UgaW1wb3J0ZWQgZnJvbQ0KLSAgICAgb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4gV2hlbiBhbiBleGlzdGluZyBGUEkgaXMNCi0gICAgIGtub3duLCBpdCBpcyBpbmNvcnBvcmF0ZWQgaGVyZS4NCi0tLT4NCi0NCi08IS0tIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFNHTUwgYW5kIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFczQyBYTUwgMS4wIFJlY29tbWVuZGF0aW9uIC0tPg0KLTwhTk9UQVRJT04gdzNjLXhtbA0KLSAgICAgUFVCTElDICJJU08gODg3OS8vTk9UQVRJT04gRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UgKFhNTCkgMS4wLy9FTiIgPg0KLQ0KLTwhLS0gWE1MIDEuMCBDREFUQSAtLT4NCi08IU5PVEFUSU9OIGNkYXRhDQotICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWE1MIDEuMDogQ0RBVEEvL0VOIiA+DQotDQotPCEtLSBTR01MIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllcnMgLS0+DQotPCFOT1RBVElPTiBmcGkNCi0gICAgIFBVQkxJQyAiSVNPIDg4Nzk6MTk4Ni8vTk9UQVRJT04gRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyLy9FTiIgPg0KLQ0KLTwhLS0gWEhUTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGVuZ3RoIGRlZmluZWQgZm9yIGNlbGxwYWRkaW5nL2NlbGxzcGFjaW5nIC0tPg0KLQ0KLTwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhTk9UQVRJT04gbGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGVuZ3RoLy9FTiIgPg0KLQ0KLTwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi08IU5PVEFUSU9OIGxpbmtUeXBlcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExpbmtUeXBlcy8vRU4iID4NCi0NCi08IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi08IU5PVEFUSU9OIG1lZGlhRGVzYw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE1lZGlhRGVzYy8vRU4iID4NCi0NCi08IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi08IU5PVEFUSU9OIG11bHRpTGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTXVsdGlMZW5ndGgvL0VOIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFOT1RBVElPTiBudW1iZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBOdW1iZXIvL0VOIiA+DQotDQotPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLTwhTk9UQVRJT04gcGl4ZWxzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogUGl4ZWxzLy9FTiIgPg0KLQ0KLTwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotPCFOT1RBVElPTiBzY3JpcHQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBTY3JpcHQvL0VOIiA+DQotDQotPCEtLSB0ZXh0dWFsIGNvbnRlbnQgLS0+DQotPCFOT1RBVElPTiB0ZXh0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVGV4dC8vRU4iID4NCi0NCi08IS0tIEltcG9ydGVkIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotPCFOT1RBVElPTiBjaGFyYWN0ZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyYWN0ZXIvL0VOIiA+DQotDQotPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJzZXQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0Ly9FTiIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY2hhcnNldHMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0cy8vRU4iID4NCi0NCi08IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENvbnRlbnRUeXBlLy9FTiIgPg0KLQ0KLTwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDb250ZW50VHlwZXMvL0VOIiA+DQotDQotPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotPCFOT1RBVElPTiBkYXRldGltZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IERhdGV0aW1lLy9FTiIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhTk9UQVRJT04gbGFuZ3VhZ2VDb2RlDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGFuZ3VhZ2VDb2RlLy9FTiIgPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbVVJJXSAtLT4NCi08IU5PVEFUSU9OIHVyaQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSS8vRU4iID4NCi0NCi08IS0tIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycywgc2VlIFtVUkldIC0tPg0KLTwhTk9UQVRJT04gdXJpcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSXMvL0VOIiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbm90YXRpb25zLTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCVdNTCBkYXRhdHlwZXMNCi0tLT4NCi08IUVOVElUWSAlIEJvb2xlYW4uZGF0YXR5cGUgIih0cnVlfGZhbHNlKSI+DQotPCEtLSANCi0JWEhUTUwgZGF0YXR5cGVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1kYXRhdHlwZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRGF0YXR5cGVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWRhdGF0eXBlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBEYXRhdHlwZXMNCi0NCi0gICAgIGRlZmluZXMgY29udGFpbmVycyBmb3IgdGhlIGZvbGxvd2luZyBkYXRhdHlwZXMsIG1hbnkgb2YNCi0gICAgIHRoZXNlIGltcG9ydGVkIGZyb20gb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4NCi0tLT4NCi0NCi08IS0tIExlbmd0aCBkZWZpbmVkIGZvciBjZWxscGFkZGluZy9jZWxsc3BhY2luZyAtLT4NCi0NCi08IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IUVOVElUWSAlIExlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSBMaW5rVHlwZXMuZGF0YXR5cGUgIk5NVE9LRU5TIiA+DQotDQotPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotPCFFTlRJVFkgJSBNZWRpYURlc2MuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotPCFFTlRJVFkgJSBQaXhlbHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi08IUVOVElUWSAlIFNjcmlwdC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHRleHR1YWwgY29udGVudCAtLT4NCi08IUVOVElUWSAlIFRleHQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBJbXBvcnRlZCBEYXRhdHlwZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLTwhRU5USVRZICUgQ2hhcmFjdGVyLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDaGFyc2V0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ2hhcnNldHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBDb2xvciBzcGVjaWZpY2F0aW9uIHVzaW5nIGNvbG9yIG5hbWUgb3Igc1JHQiAoI1JSR0dCQikgdmFsdWVzIC0tPg0KLTwhRU5USVRZICUgQ29sb3IuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ29udGVudFR5cGUuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlcy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi08IUVOVElUWSAlIERhdGV0aW1lLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyLCBhcyBwZXIgW0lTTzg4NzldIC0tPg0KLTwhRU5USVRZICUgRlBJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhRU5USVRZICUgTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlICJOTVRPS0VOIiA+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtVUkldIC0tPg0KLTwhRU5USVRZICUgVVJJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzLCBzZWUgW1VSSV0gLS0+DQotPCFFTlRJVFkgJSBVUklzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWRhdGF0eXBlcy0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQlXTUwgcXVhbGlmaWVkIG5hbWVzDQotLS0+DQotPCFFTlRJVFkgJSB3bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtcW5hbWUtMS5tb2QiPg0KLTwhLS0gV01MIFF1YWxpZmllZCBOYW1lcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLXFuYW1lLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgIA0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLQlQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLXFuYW1lLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBkZWNsYXJlcyBXTUwgbmFtZXMgd2l0aCB0aGUgV01MIG5hbWVzcGFjZSBwcmVmaXguCQ0KLQ0KLS0tPg0KLTwhLS0NCi0JVGhlIFdNTCBuYW1lc3BhY2UgbmFtZQ0KLS0tPg0KLTwhRU5USVRZICUgV01MLnhtbG5zICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbCI+DQotPCEtLQ0KLQlXTUwgbmFtZXNwYWNlIHByZWZpeA0KLQkNCi0JT24gV01MIGVsZW1lbnRzIFdNTCBpcyBkZWNsYXJlZCBhcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuIA0KLQlOYW1lc3BhY2UgcHJlZml4IGlzIHVzZWQgb25seSBmb3IgV01MIGF0dHJpYnV0ZXMgb24gWEhUTUwgZWxlbWVudHMuDQotLS0+DQotPCFFTlRJVFkgJSBXTUwucHJlZml4ICJ3bWwiPg0KLTwhLS0NCi0JUGFyYW1ldGVyIGVudGl0eSB3aXRoIHRoZSBXTUwgbmFtZXNwYWNlIHByZWZpeCBwbHVzIHRoZSAiOiIuIA0KLQlUaGUgYWN0dWFsIHByZWZpeCwgV01MLnByZWZpeCwgaXMgZGVjbGFyZWQgaW4gdGhlIFdNTCBEVEQgZHJpdmVyLiANCi0tLT4NCi08IUVOVElUWSAlIFdNTC5wZnggIiVXTUwucHJlZml4OzoiPg0KLTwhLS0NCi0JQXR0cmlidXRlIHVzZWQgdG8gZGVjbGFyZSB0aGUgV01MIG5hbWVzcGFjZSB3aXRoIHRoZSBXTUwgcHJlZml4Lg0KLS0tPg0KLTwhRU5USVRZICUgV01MLnhtbG5zLmV4dHJhLmF0dHJpYiAieG1sbnM6JVdNTC5wcmVmaXg7CSAlVVJJLmRhdGF0eXBlOyAJCSNGSVhFRCAJJyVXTUwueG1sbnM7JyI+DQotPCEtLQ0KLQlBbGwgV01MIHF1YWxpZmllZCBuYW1lcy4gDQotCQ0KLQlOb3RlIHRoYXQgZWxlbWVudCBuYW1lcyBhcmUgbm90IHByZWZpeGVkLiBPbmx5IGF0dHJpYnV0ZSBuYW1lcyBhcmUuDQotLS0+DQotPCFFTlRJVFkgJSBjYXJkLnFuYW1lICIlV01MLnBmeDtjYXJkIj4NCi08IUVOVElUWSAlIGRvLnFuYW1lICIlV01MLnBmeDtkbyI+DQotPCFFTlRJVFkgJSBhY2Nlc3MucW5hbWUgIiVXTUwucGZ4O2FjY2VzcyI+DQotPCFFTlRJVFkgJSBnby5xbmFtZSAiJVdNTC5wZng7Z28iPg0KLTwhRU5USVRZICUgcHJldi5xbmFtZSAiJVdNTC5wZng7cHJldiI+DQotPCFFTlRJVFkgJSByZWZyZXNoLnFuYW1lICIlV01MLnBmeDtyZWZyZXNoIj4NCi08IUVOVElUWSAlIG5vb3AucW5hbWUgIiVXTUwucGZ4O25vb3AiPg0KLTwhRU5USVRZICUgb25ldmVudC5xbmFtZSAiJVdNTC5wZng7b25ldmVudCI+DQotPCFFTlRJVFkgJSBwb3N0ZmllbGQucW5hbWUgIiVXTUwucGZ4O3Bvc3RmaWVsZCI+DQotPCFFTlRJVFkgJSBzZXR2YXIucW5hbWUgIiVXTUwucGZ4O3NldHZhciI+DQotPCFFTlRJVFkgJSBnZXR2YXIucW5hbWUgIiVXTUwucGZ4O2dldHZhciI+DQotPCFFTlRJVFkgJSB0aW1lci5xbmFtZSAiJVdNTC5wZng7dGltZXIiPg0KLTwhRU5USVRZICUgd2lkZ2V0LnFuYW1lICIlV01MLnBmeDt3aWRnZXQiPg0KLTwhRU5USVRZICUgYW5jaG9yLnFuYW1lICIlV01MLnBmeDthbmNob3IiPg0KLTwhRU5USVRZICUgYXR0LmZvcnVhLnFuYW1lICIlV01MLnBmeDtmb3J1YSI+DQotPCFFTlRJVFkgJSBhdHQudmFsdWUucW5hbWUgIiVXTUwucGZ4O3ZhbHVlIj4NCi08IUVOVElUWSAlIGF0dC5pbmFtZS5xbmFtZSAiJVdNTC5wZng7aW5hbWUiPg0KLTwhRU5USVRZICUgYXR0Lm5hbWUucW5hbWUgIiVXTUwucGZ4O25hbWUiPg0KLTwhRU5USVRZICUgYXR0Lml2YWx1ZS5xbmFtZSAiJVdNTC5wZng7aXZhbHVlIj4NCi08IUVOVElUWSAlIGF0dC5mb3JtYXQucW5hbWUgIiVXTUwucGZ4O2Zvcm1hdCI+DQotPCFFTlRJVFkgJSBhdHQuZW1wdHlvay5xbmFtZSAiJVdNTC5wZng7ZW1wdHlvayI+DQotPCFFTlRJVFkgJSBhdHQubG9jYWxzcmMucW5hbWUgIiVXTUwucGZ4O2xvY2Fsc3JjIj4NCi08IUVOVElUWSAlIGF0dC5jb2x1bW5zLnFuYW1lICIlV01MLnBmeDtjb2x1bW5zIj4NCi08IUVOVElUWSAlIGF0dC5hbGlnbi5xbmFtZSAiJVdNTC5wZng7YWxpZ24iPg0KLTwhRU5USVRZICUgYXR0Lm1vZGUucW5hbWUgIiVXTUwucGZ4O21vZGUiPg0KLTwhRU5USVRZICUgYXR0Lm9uZW50ZXJmb3J3YXJkLnFuYW1lICIlV01MLnBmeDtvbmVudGVyZm9yd2FyZCI+DQotPCFFTlRJVFkgJSBhdHQub25lbnRlcmJhY2t3YXJkLnFuYW1lICIlV01MLnBmeDtvbmVudGVyYmFja3dhcmQiPg0KLTwhRU5USVRZICUgYXR0Lm9udGltZXIucW5hbWUgIiVXTUwucGZ4O29udGltZXIiPg0KLTwhRU5USVRZICUgYXR0Lm9ucGljay5xbmFtZSAiJVdNTC5wZng7b25waWNrIj4NCi08IUVOVElUWSAlIGF0dC5uZXdjb250ZXh0LnFuYW1lICIlV01MLnBmeDtuZXdjb250ZXh0Ij4NCi08IUVOVElUWSAlIGF0dC51c2V4bWxmcmFnbWVudC5xbmFtZSAiJVdNTC5wZng7dXNlLXhtbC1mcmFnbWVudHMiPg0KLTwhRU5USVRZICUgYXR0LnR5cGUucW5hbWUgIiVXTUwucGZ4O3R5cGUiPg0KLTwhLS0NCi0JVGhlIHUgZWxlbWVudCBpcyBub3QgZGVjbGFyZWQgaW4gWEhUTUwsIGJlY2F1c2UgaXQgaGFzIGJlZWQgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4gDQotCVNvIGl0IG11c3QgYmUgZGVjbGFyZWQgaGVyZS4gSXQgaXMsIGhvd2V2ZXIsIGRlcHJlY2F0ZWQgaW4gV01MLiANCi0tLT4NCi08IUVOVElUWSAlIHUucW5hbWUgInUiPg0KLQ0KLTwhLS0gDQotCVhIVE1MIHF1YWxpZmllZCBuYW1lcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgUW5hbWUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1xbmFtZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSMyMDAwLTEwLTIyOiBhZGRlZCBxbmFtZSBkZWNsYXJhdGlvbnMgZm9yIHJ1YnkgZWxlbWVudHMNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gWEhUTUwgUW5hbWUgKFF1YWxpZmllZCBOYW1lKSBNb2R1bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGlzIGNvbnRhaW5lZCBpbiB0d28gcGFydHMsIGxhYmVsZWQgU2VjdGlvbiAnQScgYW5kICdCJzoNCi0NCi0gICAgICAgU2VjdGlvbiBBIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB0byBzdXBwb3J0IG5hbWVzcGFjZS0NCi0gICAgICAgcXVhbGlmaWVkIG5hbWVzLCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCBhbmQgbmFtZSBwcmVmaXhpbmcNCi0gICAgICAgZm9yIFhIVE1MIGFuZCBleHRlbnNpb25zLg0KLQ0KLSAgICAgICBTZWN0aW9uIEIgZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHVzZWQgdG8gcHJvdmlkZQ0KLSAgICAgICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzIGZvciBhbGwgWEhUTUwgZWxlbWVudCB0eXBlczoNCi0NCi0gICAgICAgICAlYXBwbGV0LnFuYW1lOyAgIHRoZSB4bWxucy1xdWFsaWZpZWQgbmFtZSBmb3IgPGFwcGxldD4NCi0gICAgICAgICAlYmFzZS5xbmFtZTsgICAgIHRoZSB4bWxucy1xdWFsaWZpZWQgbmFtZSBmb3IgPGJhc2U+DQotICAgICAgICAgLi4uDQotDQotICAgICBYSFRNTCBleHRlbnNpb25zIHdvdWxkIGNyZWF0ZSBhIG1vZHVsZSBzaW1pbGFyIHRvIHRoaXMgb25lLg0KLSAgICAgSW5jbHVkZWQgaW4gdGhlIFhIVE1MIGRpc3RyaWJ1dGlvbiBpcyBhIHRlbXBsYXRlIG1vZHVsZQ0KLSAgICAgKCd0ZW1wbGF0ZS1xbmFtZS0xLm1vZCcpIHN1aXRhYmxlIGZvciB0aGlzIHB1cnBvc2UuDQotLS0+DQotDQotPCEtLSBTZWN0aW9uIEE6IFhIVE1MIFhNTCBOYW1lc3BhY2UgRnJhbWV3b3JrIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gMS4gRGVjbGFyZSBhICVYSFRNTC5wcmVmaXhlZDsgY29uZGl0aW9uYWwgc2VjdGlvbiBrZXl3b3JkLCB1c2VkDQotICAgICAgICB0byBhY3RpdmF0ZSBuYW1lc3BhY2UgcHJlZml4aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQNCi0gICAgICAgIGluaGVyaXQgJyVOUy5wcmVmaXhlZDsnIGZyb20gdGhlIERURCBkcml2ZXIsIHNvIHRoYXQgdW5sZXNzDQotICAgICAgICBvdmVycmlkZGVuLCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9sbG93cyB0aGUgb3ZlcmFsbCBEVEQNCi0gICAgICAgIHByZWZpeGluZyBzY2hlbWUuDQotLS0+DQotPCFFTlRJVFkgJSBOUy5wcmVmaXhlZCAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXhlZCAiJU5TLnByZWZpeGVkOyIgPg0KLQ0KLTwhLS0gMi4gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgKGVnLiwgJVhIVE1MLnhtbG5zOykgY29udGFpbmluZw0KLSAgICAgICAgdGhlIFVSSSByZWZlcmVuY2UgdXNlZCB0byBpZGVudGlmeSB0aGUgWEhUTUwgbmFtZXNwYWNlOg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiA+DQotDQotPCEtLSAzLiBEZWNsYXJlIHBhcmFtZXRlciBlbnRpdGllcyAoZWcuLCAlWEhUTUwucHJlZml4OykgY29udGFpbmluZw0KLSAgICAgICAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIHByZWZpeCBzdHJpbmcocykgdG8gdXNlIHdoZW4gcHJlZml4aW5nDQotICAgICAgICBpcyBlbmFibGVkLiBUaGlzIG1heSBiZSBvdmVycmlkZGVuIGluIHRoZSBEVEQgZHJpdmVyIG9yIHRoZQ0KLSAgICAgICAgaW50ZXJuYWwgc3Vic2V0IG9mIGFuIGRvY3VtZW50IGluc3RhbmNlLiBJZiBubyBkZWZhdWx0IHByZWZpeA0KLSAgICAgICAgaXMgZGVzaXJlZCwgdGhpcyBtYXkgYmUgZGVjbGFyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLg0KLQ0KLSAgICAgTk9URTogQXMgc3BlY2lmaWVkIGluIFtYTUxOQU1FU10sIHRoZSBuYW1lc3BhY2UgcHJlZml4IHNlcnZlcw0KLSAgICAgYXMgYSBwcm94eSBmb3IgdGhlIFVSSSByZWZlcmVuY2UsIGFuZCBpcyBub3QgaW4gaXRzZWxmIHNpZ25pZmljYW50Lg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ICAiIiA+DQotDQotPCEtLSA0LiBEZWNsYXJlIHBhcmFtZXRlciBlbnRpdGllcyAoZWcuLCAlWEhUTUwucGZ4OykgY29udGFpbmluZyB0aGUNCi0gICAgICAgIGNvbG9uaXplZCBwcmVmaXgoZXMpIChlZy4sICclWEhUTUwucHJlZml4OzonKSB1c2VkIHdoZW4NCi0gICAgICAgIHByZWZpeGluZyBpcyBhY3RpdmUsIGFuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGlzIG5vdC4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgWEhUTUwucGZ4ICAiJVhIVE1MLnByZWZpeDs6IiA+DQotXV0+DQotPCFFTlRJVFkgJSBYSFRNTC5wZnggICIiID4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIG5hbWUgZXh0ZW5zaW9ucyBoZXJlIC4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLWV4dHJhLm1vZCAiIiA+DQotDQotDQotPCEtLSA1LiBUaGUgcGFyYW1ldGVyIGVudGl0eSAlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyBtYXkgYmUNCi0gICAgICAgIHJlZGVjbGFyZWQgdG8gY29udGFpbiBhbnkgbm9uLVhIVE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbg0KLSAgICAgICAgYXR0cmlidXRlcyBmb3IgbmFtZXNwYWNlcyBlbWJlZGRlZCBpbiBYSFRNTC4gVGhlIGRlZmF1bHQNCi0gICAgICAgIGlzIGFuIGVtcHR5IHN0cmluZy4gIFhMaW5rIHNob3VsZCBiZSBpbmNsdWRlZCBoZXJlIGlmIHVzZWQNCi0gICAgICAgIGluIHRoZSBEVEQuDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gVGhlIHJlbWFpbmRlciBvZiBTZWN0aW9uIEEgaXMgb25seSBmb2xsb3dlZCBpbiBYSFRNTCwgbm90IGV4dGVuc2lvbnMuIC0tPg0KLQ0KLTwhLS0gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgJU5TLmRlY2wuYXR0cmliOyBjb250YWluaW5nDQotICAgICBhbGwgWE1MIE5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdXNlZCBpbiB0aGUgRFRELCBwbHVzIHRoZQ0KLSAgICAgeG1sbnMgZGVjbGFyYXRpb24gZm9yIFhIVE1MLCBpdHMgZm9ybSBkZXBlbmRlbnQgb24gd2hldGhlcg0KLSAgICAgcHJlZml4aW5nIGlzIGFjdGl2ZS4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgTlMuZGVjbC5hdHRyaWINCi0gICAgICJ4bWxuczolWEhUTUwucHJlZml4OyAgJVVSSS5kYXRhdHlwZTsgICAjRklYRUQgJyVYSFRNTC54bWxuczsnDQotICAgICAgJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsiDQotPg0KLV1dPg0KLTwhRU5USVRZICUgTlMuZGVjbC5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCEtLSBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBYTGluayBzdXBwb3J0Lg0KLS0tPg0KLTwhRU5USVRZICUgWExJTksueG1sbnMuYXR0cmliICIiID4NCi0NCi08IS0tIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5ICVOUy5kZWNsLmF0dHJpYjsgY29udGFpbmluZyBhbGwNCi0gICAgIFhNTCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gYXR0cmlidXRlcyB1c2VkIGJ5IFhIVE1MLCBpbmNsdWRpbmcNCi0gICAgIGEgZGVmYXVsdCB4bWxucyBhdHRyaWJ1dGUgd2hlbiBwcmVmaXhpbmcgaXMgaW5hY3RpdmUuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmF0dHJpYg0KLSAgICAgIiVOUy5kZWNsLmF0dHJpYjsNCi0gICAgICAlWExJTksueG1sbnMuYXR0cmliOyINCi0+DQotXV0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5hdHRyaWINCi0gICAgICJ4bWxucyAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNGSVhFRCAnJVhIVE1MLnhtbG5zOycNCi0gICAgICAlWExJTksueG1sbnMuYXR0cmliOyINCi0+DQotDQotPCEtLSBwbGFjZWhvbGRlciBmb3IgcXVhbGlmaWVkIG5hbWUgcmVkZWNsYXJhdGlvbnMgLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5yZWRlY2wgIiIgPg0KLQ0KLQ0KLTwhLS0gU2VjdGlvbiBCOiBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSA2LiBUaGlzIHNlY3Rpb24gZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHVzZWQgdG8gcHJvdmlkZQ0KLSAgICAgICAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcyBmb3IgYWxsIFhIVE1MIGVsZW1lbnQgdHlwZXMuDQotLS0+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1hcHBsZXQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhcHBsZXQucW5hbWUgICIlWEhUTUwucGZ4O2FwcGxldCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmFzZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJhc2UucW5hbWUgICAgIiVYSFRNTC5wZng7YmFzZSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmRvLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYmRvLnFuYW1lICAgICAiJVhIVE1MLnBmeDtiZG8iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3BocmFzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYWRkcmVzcy5xbmFtZSAiJVhIVE1MLnBmeDthZGRyZXNzIiA+DQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLnFuYW1lICAiJVhIVE1MLnBmeDtibG9ja3F1b3RlIiA+DQotPCFFTlRJVFkgJSBwcmUucW5hbWUgICAgICIlWEhUTUwucGZ4O3ByZSIgPg0KLTwhRU5USVRZICUgaDEucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMSIgPg0KLTwhRU5USVRZICUgaDIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMiIgPg0KLTwhRU5USVRZICUgaDMucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMyIgPg0KLTwhRU5USVRZICUgaDQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNCIgPg0KLTwhRU5USVRZICUgaDUucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNSIgPg0KLTwhRU5USVRZICUgaDYucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrcHJlcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGhyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aHIiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3N0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGRpdi5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGl2IiA+DQotPCFFTlRJVFkgJSBwLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O3AiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWVkaXQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBpbnMucW5hbWUgICAgICIlWEhUTUwucGZ4O2lucyIgPg0KLTwhRU5USVRZICUgZGVsLnFuYW1lICAgICAiJVhIVE1MLnBmeDtkZWwiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWZvcm0tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBmb3JtLnFuYW1lICAgICIlWEhUTUwucGZ4O2Zvcm0iID4NCi08IUVOVElUWSAlIGxhYmVsLnFuYW1lICAgIiVYSFRNTC5wZng7bGFiZWwiID4NCi08IUVOVElUWSAlIGlucHV0LnFuYW1lICAgIiVYSFRNTC5wZng7aW5wdXQiID4NCi08IUVOVElUWSAlIHNlbGVjdC5xbmFtZSAgIiVYSFRNTC5wZng7c2VsZWN0IiA+DQotPCFFTlRJVFkgJSBvcHRncm91cC5xbmFtZSAgIiVYSFRNTC5wZng7b3B0Z3JvdXAiID4NCi08IUVOVElUWSAlIG9wdGlvbi5xbmFtZSAgIiVYSFRNTC5wZng7b3B0aW9uIiA+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5xbmFtZSAgIiVYSFRNTC5wZng7dGV4dGFyZWEiID4NCi08IUVOVElUWSAlIGZpZWxkc2V0LnFuYW1lICAiJVhIVE1MLnBmeDtmaWVsZHNldCIgPg0KLTwhRU5USVRZICUgbGVnZW5kLnFuYW1lICAiJVhIVE1MLnBmeDtsZWdlbmQiID4NCi08IUVOVElUWSAlIGJ1dHRvbi5xbmFtZSAgIiVYSFRNTC5wZng7YnV0dG9uIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1oeXBlcnRleHQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2EiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWltYWdlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAgICAiJVhIVE1MLnBmeDtpbWciID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHBocmFzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYWJici5xbmFtZSAgICAiJVhIVE1MLnBmeDthYmJyIiA+DQotPCFFTlRJVFkgJSBhY3JvbnltLnFuYW1lICIlWEhUTUwucGZ4O2Fjcm9ueW0iID4NCi08IUVOVElUWSAlIGNpdGUucW5hbWUgICAgIiVYSFRNTC5wZng7Y2l0ZSIgPg0KLTwhRU5USVRZICUgY29kZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtjb2RlIiA+DQotPCFFTlRJVFkgJSBkZm4ucW5hbWUgICAgICIlWEhUTUwucGZ4O2RmbiIgPg0KLTwhRU5USVRZICUgZW0ucW5hbWUgICAgICAiJVhIVE1MLnBmeDtlbSIgPg0KLTwhRU5USVRZICUga2JkLnFuYW1lICAgICAiJVhIVE1MLnBmeDtrYmQiID4NCi08IUVOVElUWSAlIHEucW5hbWUgICAgICAgIiVYSFRNTC5wZng7cSIgPg0KLTwhRU5USVRZICUgc2FtcC5xbmFtZSAgICAiJVhIVE1MLnBmeDtzYW1wIiA+DQotPCFFTlRJVFkgJSBzdHJvbmcucW5hbWUgICIlWEhUTUwucGZ4O3N0cm9uZyIgPg0KLTwhRU5USVRZICUgdmFyLnFuYW1lICAgICAiJVhIVE1MLnBmeDt2YXIiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHByZXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2IiID4NCi08IUVOVElUWSAlIGJpZy5xbmFtZSAgICAgIiVYSFRNTC5wZng7YmlnIiA+DQotPCFFTlRJVFkgJSBpLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2kiID4NCi08IUVOVElUWSAlIHNtYWxsLnFuYW1lICAgIiVYSFRNTC5wZng7c21hbGwiID4NCi08IUVOVElUWSAlIHN1Yi5xbmFtZSAgICAgIiVYSFRNTC5wZng7c3ViIiA+DQotPCFFTlRJVFkgJSBzdXAucW5hbWUgICAgICIlWEhUTUwucGZ4O3N1cCIgPg0KLTwhRU5USVRZICUgdHQucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0dCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5sc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYnIucW5hbWUgICAgICAiJVhIVE1MLnBmeDticiIgPg0KLTwhRU5USVRZICUgc3Bhbi5xbmFtZSAgICAiJVhIVE1MLnBmeDtzcGFuIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pc21hcC0xLm1vZCAoYWxzbyBjc2lzbWFwLCBzc2lzbWFwKSAtLT4NCi08IUVOVElUWSAlIG1hcC5xbmFtZSAgICAgIiVYSFRNTC5wZng7bWFwIiA+DQotPCFFTlRJVFkgJSBhcmVhLnFuYW1lICAgICIlWEhUTUwucGZ4O2FyZWEiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWxpbmstMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBsaW5rLnFuYW1lICAgICIlWEhUTUwucGZ4O2xpbmsiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWxpc3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBkbC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2RsIiA+DQotPCFFTlRJVFkgJSBkdC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2R0IiA+DQotPCFFTlRJVFkgJSBkZC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2RkIiA+DQotPCFFTlRJVFkgJSBvbC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O29sIiA+DQotPCFFTlRJVFkgJSB1bC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3VsIiA+DQotPCFFTlRJVFkgJSBsaS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2xpIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1tZXRhLTEubW9kIC0tPg0KLTwhRU5USVRZICUgbWV0YS5xbmFtZSAgICAiJVhIVE1MLnBmeDttZXRhIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1wYXJhbS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHBhcmFtLnFuYW1lICAgIiVYSFRNTC5wZng7cGFyYW0iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLW9iamVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIG9iamVjdC5xbmFtZSAgIiVYSFRNTC5wZng7b2JqZWN0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zY3JpcHQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBzY3JpcHQucW5hbWUgICIlWEhUTUwucGZ4O3NjcmlwdCIgPg0KLTwhRU5USVRZICUgbm9zY3JpcHQucW5hbWUgICIlWEhUTUwucGZ4O25vc2NyaXB0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBodG1sLnFuYW1lICAgICIlWEhUTUwucGZ4O2h0bWwiID4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICAgIiVYSFRNTC5wZng7aGVhZCIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICAiJVhIVE1MLnBmeDt0aXRsZSIgPg0KLTwhRU5USVRZICUgYm9keS5xbmFtZSAgICAiJVhIVE1MLnBmeDtib2R5IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zdHlsZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHN0eWxlLnFuYW1lICAgIiVYSFRNTC5wZng7c3R5bGUiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXRhYmxlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgdGFibGUucW5hbWUgICAiJVhIVE1MLnBmeDt0YWJsZSIgPg0KLTwhRU5USVRZICUgY2FwdGlvbi5xbmFtZSAiJVhIVE1MLnBmeDtjYXB0aW9uIiA+DQotPCFFTlRJVFkgJSB0aGVhZC5xbmFtZSAgICIlWEhUTUwucGZ4O3RoZWFkIiA+DQotPCFFTlRJVFkgJSB0Zm9vdC5xbmFtZSAgICIlWEhUTUwucGZ4O3Rmb290IiA+DQotPCFFTlRJVFkgJSB0Ym9keS5xbmFtZSAgICIlWEhUTUwucGZ4O3Rib2R5IiA+DQotPCFFTlRJVFkgJSBjb2xncm91cC5xbmFtZSAgIiVYSFRNTC5wZng7Y29sZ3JvdXAiID4NCi08IUVOVElUWSAlIGNvbC5xbmFtZSAgICAgIiVYSFRNTC5wZng7Y29sIiA+DQotPCFFTlRJVFkgJSB0ci5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RyIiA+DQotPCFFTlRJVFkgJSB0aC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RoIiA+DQotPCFFTlRJVFkgJSB0ZC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RkIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ydWJ5LTEubW9kIC0tPg0KLQ0KLTwhRU5USVRZICUgcnVieS5xbmFtZSAgICAiJVhIVE1MLnBmeDtydWJ5IiA+DQotPCFFTlRJVFkgJSByYmMucW5hbWUgICAgICIlWEhUTUwucGZ4O3JiYyIgPg0KLTwhRU5USVRZICUgcnRjLnFuYW1lICAgICAiJVhIVE1MLnBmeDtydGMiID4NCi08IUVOVElUWSAlIHJiLnFuYW1lICAgICAgIiVYSFRNTC5wZng7cmIiID4NCi08IUVOVElUWSAlIHJ0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7cnQiID4NCi08IUVOVElUWSAlIHJwLnFuYW1lICAgICAgIiVYSFRNTC5wZng7cnAiID4NCi0NCi08IS0tIFByb3Zpc2lvbmFsIFhIVE1MIDIuMCBRdWFsaWZpZWQgTmFtZXMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbWFnZS0yLm1vZCAtLT4NCi08IUVOVElUWSAlIGFsdC5xbmFtZSAgICAgIiVYSFRNTC5wZng7YWx0IiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtcW5hbWUtMS5tb2QgLS0+DQotDQotPCEtLQ0KLQlYSFRNTCBnbG9iYWwgYXR0cmlidXRlcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3R5bGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJA0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlICdzdHlsZScgYXR0cmlidXRlLCB1c2VkIHRvIHN1cHBvcnQgaW5saW5lDQotICAgICBzdHlsZSBtYXJrdXAuIFRoaXMgbW9kdWxlIG11c3QgYmUgaW5zdGFudGlhdGVkIHByaW9yIHRvIHRoZSBYSFRNTA0KLSAgICAgQ29tbW9uIEF0dHJpYnV0ZXMgbW9kdWxlIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluICVDb3JlLmF0dHJpYjsuDQotLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRyaWINCi0gICAgICJzdHlsZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi0NCi08IUVOVElUWSAlIENvcmUuZXh0cmEuYXR0cmliDQotICAgICAiJXN0eWxlLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0eWxlLTEubW9kIC0tPg0KLQ0KLTwhRU5USVRZICUgWEhUTUwuYmlkaSAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWF0dHJpYnMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYXR0cmlicy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWF0dHJpYnMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQ29tbW9uIEF0dHJpYnV0ZXMNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIG1hbnkgb2YgdGhlIGNvbW1vbiBhdHRyaWJ1dGVzIGZvciB0aGUgWEhUTUwgRFRELg0KLSAgICAgJU5TLmRlY2wuYXR0cmliOyBpcyBkZWNsYXJlZCBpbiB0aGUgWEhUTUwgUW5hbWUgbW9kdWxlLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaWQuYXR0cmliDQotICAgICAiaWQgICAgICAgICAgIElEICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBjbGFzcy5hdHRyaWINCi0gICAgICJjbGFzcyAgICAgICAgTk1UT0tFTlMgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmF0dHJpYg0KLSAgICAgInRpdGxlICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgJWNsYXNzLmF0dHJpYjsNCi0gICAgICAldGl0bGUuYXR0cmliOw0KLSAgICAgICVDb3JlLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhRU5USVRZICUgbGFuZy5hdHRyaWINCi0gICAgICJ4bWw6bGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEIg0KLT4NCi0NCi08IVslWEhUTUwuYmlkaTtbDQotPCFFTlRJVFkgJSBkaXIuYXR0cmliDQotICAgICAiZGlyICAgICAgICAgICggbHRyIHwgcnRsICkgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBJMThuLmF0dHJpYg0KLSAgICAgIiVkaXIuYXR0cmliOw0KLSAgICAgICVsYW5nLmF0dHJpYjsiDQotPg0KLQ0KLV1dPg0KLTwhRU5USVRZICUgSTE4bi5hdHRyaWINCi0gICAgICIlbGFuZy5hdHRyaWI7Ig0KLT4NCi0NCi08IUVOVElUWSAlIENvbW1vbi5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gaW50cmluc2ljIGV2ZW50IGF0dHJpYnV0ZXMgZGVjbGFyZWQgcHJldmlvdXNseQ0KLS0tPg0KLTwhRU5USVRZICUgRXZlbnRzLmF0dHJpYiAiIiA+DQotDQotPCFFTlRJVFkgJSBDb21tb24uYXR0cmliDQotICAgICAiJUNvcmUuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICAlRXZlbnRzLmF0dHJpYjsNCi0gICAgICAlQ29tbW9uLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWF0dHJpYnMtMS5tb2QgLS0+DQotDQotPCEtLSANCi0JWEhUTUwgY2hhcmFjdGVyIGVudGl0aWVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1jaGFyZW50Lm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWNoYXJlbnQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIENoYXJhY3RlciBFbnRpdGllcyBmb3IgWEhUTUwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzZXQgb2YgY2hhcmFjdGVyIGVudGl0aWVzIGZvciBYSFRNTCwNCi0gICAgIGluY2x1ZGluZyB0aGUgTGF0aW4gMSwgU3ltYm9sIGFuZCBTcGVjaWFsIGNoYXJhY3RlciBjb2xsZWN0aW9ucy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1sYXQxLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhNTC1jb21wYXRpYmxlIElTTyBMYXRpbiAxIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1sYXQxLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLWxhdDEuZW50IiA+DQotICAgICAgICV4aHRtbC1sYXQxOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1sYXQxLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotLS0+DQotDQotPCFFTlRJVFkgbmJzcCAgICImIzE2MDsiID48IS0tIG5vLWJyZWFrIHNwYWNlID0gbm9uLWJyZWFraW5nIHNwYWNlLCBVKzAwQTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGlleGNsICAiJiMxNjE7IiA+PCEtLSBpbnZlcnRlZCBleGNsYW1hdGlvbiBtYXJrLCBVKzAwQTEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGNlbnQgICAiJiMxNjI7IiA+PCEtLSBjZW50IHNpZ24sIFUrMDBBMiBJU09udW0gLS0+DQotPCFFTlRJVFkgcG91bmQgICImIzE2MzsiID48IS0tIHBvdW5kIHNpZ24sIFUrMDBBMyBJU09udW0gLS0+DQotPCFFTlRJVFkgY3VycmVuICImIzE2NDsiID48IS0tIGN1cnJlbmN5IHNpZ24sIFUrMDBBNCBJU09udW0gLS0+DQotPCFFTlRJVFkgeWVuICAgICImIzE2NTsiID48IS0tIHllbiBzaWduID0geXVhbiBzaWduLCBVKzAwQTUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGJydmJhciAiJiMxNjY7IiA+PCEtLSBicm9rZW4gYmFyID0gYnJva2VuIHZlcnRpY2FsIGJhciwgVSswMEE2IElTT251bSAtLT4NCi08IUVOVElUWSBzZWN0ICAgIiYjMTY3OyIgPjwhLS0gc2VjdGlvbiBzaWduLCBVKzAwQTcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVtbCAgICAiJiMxNjg7IiA+PCEtLSBkaWFlcmVzaXMgPSBzcGFjaW5nIGRpYWVyZXNpcywgVSswMEE4IElTT2RpYSAtLT4NCi08IUVOVElUWSBjb3B5ICAgIiYjMTY5OyIgPjwhLS0gY29weXJpZ2h0IHNpZ24sIFUrMDBBOSBJU09udW0gLS0+DQotPCFFTlRJVFkgb3JkZiAgICImIzE3MDsiID48IS0tIGZlbWluaW5lIG9yZGluYWwgaW5kaWNhdG9yLCBVKzAwQUEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGxhcXVvICAiJiMxNzE7IiA+PCEtLSBsZWZ0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IGxlZnQgcG9pbnRpbmcgZ3VpbGxlbWV0LCBVKzAwQUIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG5vdCAgICAiJiMxNzI7IiA+PCEtLSBub3Qgc2lnbiwgVSswMEFDIElTT251bSAtLT4NCi08IUVOVElUWSBzaHkgICAgIiYjMTczOyIgPjwhLS0gc29mdCBoeXBoZW4gPSBkaXNjcmV0aW9uYXJ5IGh5cGhlbiwgVSswMEFEIElTT251bSAtLT4NCi08IUVOVElUWSByZWcgICAgIiYjMTc0OyIgPjwhLS0gcmVnaXN0ZXJlZCBzaWduID0gcmVnaXN0ZXJlZCB0cmFkZSBtYXJrIHNpZ24sIFUrMDBBRSBJU09udW0gLS0+DQotPCFFTlRJVFkgbWFjciAgICImIzE3NTsiID48IS0tIG1hY3JvbiA9IHNwYWNpbmcgbWFjcm9uID0gb3ZlcmxpbmUgPSBBUEwgb3ZlcmJhciwgVSswMEFGIElTT2RpYSAtLT4NCi08IUVOVElUWSBkZWcgICAgIiYjMTc2OyIgPjwhLS0gZGVncmVlIHNpZ24sIFUrMDBCMCBJU09udW0gLS0+DQotPCFFTlRJVFkgcGx1c21uICImIzE3NzsiID48IS0tIHBsdXMtbWludXMgc2lnbiA9IHBsdXMtb3ItbWludXMgc2lnbiwgVSswMEIxIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAyICAgIiYjMTc4OyIgPjwhLS0gc3VwZXJzY3JpcHQgdHdvID0gc3VwZXJzY3JpcHQgZGlnaXQgdHdvID0gc3F1YXJlZCwgVSswMEIyIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAzICAgIiYjMTc5OyIgPjwhLS0gc3VwZXJzY3JpcHQgdGhyZWUgPSBzdXBlcnNjcmlwdCBkaWdpdCB0aHJlZSA9IGN1YmVkLCBVKzAwQjMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFjdXRlICAiJiMxODA7IiA+PCEtLSBhY3V0ZSBhY2NlbnQgPSBzcGFjaW5nIGFjdXRlLCBVKzAwQjQgSVNPZGlhIC0tPg0KLTwhRU5USVRZIG1pY3JvICAiJiMxODE7IiA+PCEtLSBtaWNybyBzaWduLCBVKzAwQjUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBhcmEgICAiJiMxODI7IiA+PCEtLSBwaWxjcm93IHNpZ24gPSBwYXJhZ3JhcGggc2lnbiwgVSswMEI2IElTT251bSAtLT4NCi08IUVOVElUWSBtaWRkb3QgIiYjMTgzOyIgPjwhLS0gbWlkZGxlIGRvdCA9IEdlb3JnaWFuIGNvbW1hID0gR3JlZWsgbWlkZGxlIGRvdCwgVSswMEI3IElTT251bSAtLT4NCi08IUVOVElUWSBjZWRpbCAgIiYjMTg0OyIgPjwhLS0gY2VkaWxsYSA9IHNwYWNpbmcgY2VkaWxsYSwgVSswMEI4IElTT2RpYSAtLT4NCi08IUVOVElUWSBzdXAxICAgIiYjMTg1OyIgPjwhLS0gc3VwZXJzY3JpcHQgb25lID0gc3VwZXJzY3JpcHQgZGlnaXQgb25lLCBVKzAwQjkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9yZG0gICAiJiMxODY7IiA+PCEtLSBtYXNjdWxpbmUgb3JkaW5hbCBpbmRpY2F0b3IsIFUrMDBCQSBJU09udW0gLS0+DQotPCFFTlRJVFkgcmFxdW8gICImIzE4NzsiID48IS0tIHJpZ2h0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IHJpZ2h0IHBvaW50aW5nIGd1aWxsZW1ldCwgVSswMEJCIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMTQgIiYjMTg4OyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyID0gZnJhY3Rpb24gb25lIHF1YXJ0ZXIsIFUrMDBCQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzEyICImIzE4OTsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiA9IGZyYWN0aW9uIG9uZSBoYWxmLCBVKzAwQkQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMzNCAiJiMxOTA7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMgPSBmcmFjdGlvbiB0aHJlZSBxdWFydGVycywgVSswMEJFIElTT251bSAtLT4NCi08IUVOVElUWSBpcXVlc3QgIiYjMTkxOyIgPjwhLS0gaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyayA9IHR1cm5lZCBxdWVzdGlvbiBtYXJrLCBVKzAwQkYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIEFncmF2ZSAiJiMxOTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBncmF2ZSA9IGxhdGluIGNhcGl0YWwgQSBncmF2ZSwgVSswMEMwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQWFjdXRlICImIzE5MzsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGFjdXRlLCBVKzAwQzEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBY2lyYyAgIiYjMTk0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggY2lyY3VtZmxleCwgVSswMEMyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXRpbGRlICImIzE5NTsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIHRpbGRlLCBVKzAwQzMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBdW1sICAgIiYjMTk2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggZGlhZXJlc2lzLCBVKzAwQzQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBcmluZyAgIiYjMTk3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIGNhcGl0YWwgQSByaW5nLCBVKzAwQzUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBRWxpZyAgIiYjMTk4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBRSA9IGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgQUUsIFUrMDBDNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIENjZWRpbCAiJiMxOTk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEMgd2l0aCBjZWRpbGxhLCBVKzAwQzcgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFZ3JhdmUgIiYjMjAwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggZ3JhdmUsIFUrMDBDOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVhY3V0ZSAiJiMyMDE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBhY3V0ZSwgVSswMEM5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWNpcmMgICImIzIwMjsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEV1bWwgICAiJiMyMDM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBkaWFlcmVzaXMsIFUrMDBDQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIElncmF2ZSAiJiMyMDQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBncmF2ZSwgVSswMENDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWFjdXRlICImIzIwNTsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGFjdXRlLCBVKzAwQ0QgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJY2lyYyAgIiYjMjA2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggY2lyY3VtZmxleCwgVSswMENFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSXVtbCAgICImIzIwNzsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGRpYWVyZXNpcywgVSswMENGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRVRIICAgICImIzIwODsiID48IS0tIGxhdGluIGNhcGl0YWwgRVRILCBVKzAwRDAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBOdGlsZGUgIiYjMjA5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBOIHdpdGggdGlsZGUsIFUrMDBEMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9ncmF2ZSAiJiMyMTA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBncmF2ZSwgVSswMEQyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2FjdXRlICImIzIxMTsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGFjdXRlLCBVKzAwRDMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPY2lyYyAgIiYjMjEyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggY2lyY3VtZmxleCwgVSswMEQ0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT3RpbGRlICImIzIxMzsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIHRpbGRlLCBVKzAwRDUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPdW1sICAgIiYjMjE0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggZGlhZXJlc2lzLCBVKzAwRDYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB0aW1lcyAgIiYjMjE1OyIgPjwhLS0gbXVsdGlwbGljYXRpb24gc2lnbiwgVSswMEQ3IElTT251bSAtLT4NCi08IUVOVElUWSBPc2xhc2ggIiYjMjE2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggc3Ryb2tlID0gbGF0aW4gY2FwaXRhbCBPIHNsYXNoLCBVKzAwRDggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVZ3JhdmUgIiYjMjE3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggZ3JhdmUsIFUrMDBEOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVhY3V0ZSAiJiMyMTg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBhY3V0ZSwgVSswMERBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWNpcmMgICImIzIxOTsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBEQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFV1bWwgICAiJiMyMjA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBkaWFlcmVzaXMsIFUrMDBEQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFlhY3V0ZSAiJiMyMjE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFkgd2l0aCBhY3V0ZSwgVSswMEREIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVEhPUk4gICImIzIyMjsiID48IS0tIGxhdGluIGNhcGl0YWwgVEhPUk4sIFUrMDBERSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHN6bGlnICAiJiMyMjM7IiA+PCEtLSBsYXRpbiBzbWFsbCBzaGFycCBzID0gZXNzLXplZCwgVSswMERGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWdyYXZlICImIzIyNDsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBncmF2ZSA9IGxhdGluIHNtYWxsIGEgZ3JhdmUsIFUrMDBFMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFhY3V0ZSAiJiMyMjU7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggYWN1dGUsIFUrMDBFMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFjaXJjICAiJiMyMjY7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggY2lyY3VtZmxleCwgVSswMEUyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXRpbGRlICImIzIyNzsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCB0aWxkZSwgVSswMEUzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXVtbCAgICImIzIyODsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBkaWFlcmVzaXMsIFUrMDBFNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFyaW5nICAiJiMyMjk7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIHNtYWxsIGEgcmluZywgVSswMEU1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWVsaWcgICImIzIzMDsiID48IS0tIGxhdGluIHNtYWxsIGFlID0gbGF0aW4gc21hbGwgbGlnYXR1cmUgYWUsIFUrMDBFNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGNjZWRpbCAiJiMyMzE7IiA+PCEtLSBsYXRpbiBzbWFsbCBjIHdpdGggY2VkaWxsYSwgVSswMEU3IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWdyYXZlICImIzIzMjsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBncmF2ZSwgVSswMEU4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWFjdXRlICImIzIzMzsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBhY3V0ZSwgVSswMEU5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWNpcmMgICImIzIzNDsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBldW1sICAgIiYjMjM1OyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGRpYWVyZXNpcywgVSswMEVCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWdyYXZlICImIzIzNjsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBncmF2ZSwgVSswMEVDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWFjdXRlICImIzIzNzsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBhY3V0ZSwgVSswMEVEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWNpcmMgICImIzIzODsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpdW1sICAgIiYjMjM5OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGRpYWVyZXNpcywgVSswMEVGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZXRoICAgICImIzI0MDsiID48IS0tIGxhdGluIHNtYWxsIGV0aCwgVSswMEYwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgbnRpbGRlICImIzI0MTsiID48IS0tIGxhdGluIHNtYWxsIG4gd2l0aCB0aWxkZSwgVSswMEYxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2dyYXZlICImIzI0MjsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBncmF2ZSwgVSswMEYyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2FjdXRlICImIzI0MzsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBhY3V0ZSwgVSswMEYzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2NpcmMgICImIzI0NDsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBjaXJjdW1mbGV4LCBVKzAwRjQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdGlsZGUgIiYjMjQ1OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIHRpbGRlLCBVKzAwRjUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdW1sICAgIiYjMjQ2OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGRpYWVyZXNpcywgVSswMEY2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZGl2aWRlICImIzI0NzsiID48IS0tIGRpdmlzaW9uIHNpZ24sIFUrMDBGNyBJU09udW0gLS0+DQotPCFFTlRJVFkgb3NsYXNoICImIzI0ODsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBzdHJva2UsID0gbGF0aW4gc21hbGwgbyBzbGFzaCwgVSswMEY4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWdyYXZlICImIzI0OTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBncmF2ZSwgVSswMEY5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWFjdXRlICImIzI1MDsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBhY3V0ZSwgVSswMEZBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWNpcmMgICImIzI1MTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRkIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1dW1sICAgIiYjMjUyOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGRpYWVyZXNpcywgVSswMEZDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgeWFjdXRlICImIzI1MzsiID48IS0tIGxhdGluIHNtYWxsIHkgd2l0aCBhY3V0ZSwgVSswMEZEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdGhvcm4gICImIzI1NDsiID48IS0tIGxhdGluIHNtYWxsIHRob3JuIHdpdGgsIFUrMDBGRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHl1bWwgICAiJiMyNTU7IiA+PCEtLSBsYXRpbiBzbWFsbCB5IHdpdGggZGlhZXJlc2lzLCBVKzAwRkYgSVNPbGF0MSAtLT4NCi08IS0tIGVuZCBvZiB4aHRtbC1sYXQxLmVudCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLXN5bWJvbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBJU08gTWF0aCwgR3JlZWsgYW5kIFN5bWJvbGljIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3ltYm9sLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtc3ltYm9sLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3ltYm9sOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zeW1ib2wuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0tLT4NCi0NCi08IS0tIFJlbGV2YW50IElTTyBlbnRpdHkgc2V0IGlzIGdpdmVuIHVubGVzcyBuYW1lcyBhcmUgbmV3bHkgaW50cm9kdWNlZC4NCi0gICAgIE5ldyBuYW1lcyAoaS5lLiwgbm90IGluIElTTyA4ODc5IFtTR01MXSBsaXN0KSBkbyBub3QgY2xhc2ggd2l0aA0KLSAgICAgYW55IGV4aXN0aW5nIElTTyA4ODc5IGVudGl0eSBuYW1lcy4gSVNPIDEwNjQ2IFtJU08xMDY0Nl0gY2hhcmFjdGVyDQotICAgICBudW1iZXJzIGFyZSBnaXZlbiBmb3IgZWFjaCBjaGFyYWN0ZXIsIGluIGhleC4gRW50aXR5IHZhbHVlcyBhcmUNCi0gICAgIGRlY2ltYWwgY29udmVyc2lvbnMgb2YgdGhlIElTTyAxMDY0NiB2YWx1ZXMgYW5kIHJlZmVyIHRvIHRoZQ0KLSAgICAgZG9jdW1lbnQgY2hhcmFjdGVyIHNldC4gTmFtZXMgYXJlIFVuaWNvZGUgW1VOSUNPREVdIG5hbWVzLg0KLS0tPg0KLQ0KLTwhLS0gTGF0aW4gRXh0ZW5kZWQtQiAtLT4NCi08IUVOVElUWSBmbm9mICAgICAiJiM0MDI7IiA+PCEtLSBsYXRpbiBzbWFsbCBmIHdpdGggaG9vayA9IGZ1bmN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmbG9yaW4sIFUrMDE5MiBJU090ZWNoIC0tPg0KLQ0KLTwhLS0gR3JlZWsgLS0+DQotPCFFTlRJVFkgQWxwaGEgICAgIiYjOTEzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgYWxwaGEsIFUrMDM5MSAtLT4NCi08IUVOVElUWSBCZXRhICAgICAiJiM5MTQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBiZXRhLCBVKzAzOTIgLS0+DQotPCFFTlRJVFkgR2FtbWEgICAgIiYjOTE1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZ2FtbWEsIFUrMDM5MyBJU09ncmszIC0tPg0KLTwhRU5USVRZIERlbHRhICAgICImIzkxNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGRlbHRhLCBVKzAzOTQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBFcHNpbG9uICAiJiM5MTc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBlcHNpbG9uLCBVKzAzOTUgLS0+DQotPCFFTlRJVFkgWmV0YSAgICAgIiYjOTE4OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgemV0YSwgVSswMzk2IC0tPg0KLTwhRU5USVRZIEV0YSAgICAgICImIzkxOTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGV0YSwgVSswMzk3IC0tPg0KLTwhRU5USVRZIFRoZXRhICAgICImIzkyMDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHRoZXRhLCBVKzAzOTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBJb3RhICAgICAiJiM5MjE7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBpb3RhLCBVKzAzOTkgLS0+DQotPCFFTlRJVFkgS2FwcGEgICAgIiYjOTIyOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIga2FwcGEsIFUrMDM5QSAtLT4NCi08IUVOVElUWSBMYW1iZGEgICAiJiM5MjM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBsYW1iZGEsIFUrMDM5QiBJU09ncmszIC0tPg0KLTwhRU5USVRZIE11ICAgICAgICImIzkyNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG11LCBVKzAzOUMgLS0+DQotPCFFTlRJVFkgTnUgICAgICAgIiYjOTI1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbnUsIFUrMDM5RCAtLT4NCi08IUVOVElUWSBYaSAgICAgICAiJiM5MjY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB4aSwgVSswMzlFIElTT2dyazMgLS0+DQotPCFFTlRJVFkgT21pY3JvbiAgIiYjOTI3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgb21pY3JvbiwgVSswMzlGIC0tPg0KLTwhRU5USVRZIFBpICAgICAgICImIzkyODsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBpLCBVKzAzQTAgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBSaG8gICAgICAiJiM5Mjk7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciByaG8sIFUrMDNBMSAtLT4NCi08IS0tIHRoZXJlIGlzIG5vIFNpZ21hZiwgYW5kIG5vIFUrMDNBMiBjaGFyYWN0ZXIgZWl0aGVyIC0tPg0KLTwhRU5USVRZIFNpZ21hICAgICImIzkzMTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hLCBVKzAzQTMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBUYXUgICAgICAiJiM5MzI7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB0YXUsIFUrMDNBNCAtLT4NCi08IUVOVElUWSBVcHNpbG9uICAiJiM5MzM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB1cHNpbG9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUrMDNBNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIFBoaSAgICAgICImIzkzNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBoaSwgVSswM0E2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgQ2hpICAgICAgIiYjOTM1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgY2hpLCBVKzAzQTcgLS0+DQotPCFFTlRJVFkgUHNpICAgICAgIiYjOTM2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcHNpLCBVKzAzQTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBPbWVnYSAgICAiJiM5Mzc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBvbWVnYSwgVSswM0E5IElTT2dyazMgLS0+DQotPCFFTlRJVFkgYWxwaGEgICAgIiYjOTQ1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGFscGhhLCBVKzAzQjEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBiZXRhICAgICAiJiM5NDY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgYmV0YSwgVSswM0IyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgZ2FtbWEgICAgIiYjOTQ3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGdhbW1hLCBVKzAzQjMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBkZWx0YSAgICAiJiM5NDg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZGVsdGEsIFUrMDNCNCBJU09ncmszIC0tPg0KLTwhRU5USVRZIGVwc2lsb24gICImIzk0OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBlcHNpbG9uLCBVKzAzQjUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB6ZXRhICAgICAiJiM5NTA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgemV0YSwgVSswM0I2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgZXRhICAgICAgIiYjOTUxOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGV0YSwgVSswM0I3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGhldGEgICAgIiYjOTUyOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRoZXRhLCBVKzAzQjggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBpb3RhICAgICAiJiM5NTM7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgaW90YSwgVSswM0I5IElTT2dyazMgLS0+DQotPCFFTlRJVFkga2FwcGEgICAgIiYjOTU0OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGthcHBhLCBVKzAzQkEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBsYW1iZGEgICAiJiM5NTU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbGFtYmRhLCBVKzAzQkIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBtdSAgICAgICAiJiM5NTY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbXUsIFUrMDNCQyBJU09ncmszIC0tPg0KLTwhRU5USVRZIG51ICAgICAgICImIzk1NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBudSwgVSswM0JEIElTT2dyazMgLS0+DQotPCFFTlRJVFkgeGkgICAgICAgIiYjOTU4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHhpLCBVKzAzQkUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBvbWljcm9uICAiJiM5NTk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgb21pY3JvbiwgVSswM0JGIE5FVyAtLT4NCi08IUVOVElUWSBwaSAgICAgICAiJiM5NjA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcGksIFUrMDNDMCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHJobyAgICAgICImIzk2MTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciByaG8sIFUrMDNDMSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHNpZ21hZiAgICImIzk2MjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBmaW5hbCBzaWdtYSwgVSswM0MyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgc2lnbWEgICAgIiYjOTYzOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHNpZ21hLCBVKzAzQzMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0YXUgICAgICAiJiM5NjQ7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGF1LCBVKzAzQzQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB1cHNpbG9uICAiJiM5NjU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdXBzaWxvbiwgVSswM0M1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcGhpICAgICAgIiYjOTY2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBoaSwgVSswM0M2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgY2hpICAgICAgIiYjOTY3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGNoaSwgVSswM0M3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcHNpICAgICAgIiYjOTY4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBzaSwgVSswM0M4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgb21lZ2EgICAgIiYjOTY5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG9tZWdhLCBVKzAzQzkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0aGV0YXN5bSAiJiM5Nzc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGhldGEgc3ltYm9sLCBVKzAzRDEgTkVXIC0tPg0KLTwhRU5USVRZIHVwc2loICAgICImIzk3ODsiID48IS0tIGdyZWVrIHVwc2lsb24gd2l0aCBob29rIHN5bWJvbCwgVSswM0QyIE5FVyAtLT4NCi08IUVOVElUWSBwaXYgICAgICAiJiM5ODI7IiA+PCEtLSBncmVlayBwaSBzeW1ib2wsIFUrMDNENiBJU09ncmszIC0tPg0KLQ0KLTwhLS0gR2VuZXJhbCBQdW5jdHVhdGlvbiAtLT4NCi08IUVOVElUWSBidWxsICAgICAiJiM4MjI2OyIgPjwhLS0gYnVsbGV0ID0gYmxhY2sgc21hbGwgY2lyY2xlLCBVKzIwMjIgSVNPcHViICAtLT4NCi08IS0tIGJ1bGxldCBpcyBOT1QgdGhlIHNhbWUgYXMgYnVsbGV0IG9wZXJhdG9yLCBVKzIyMTkgLS0+DQotPCFFTlRJVFkgaGVsbGlwICAgIiYjODIzMDsiID48IS0tIGhvcml6b250YWwgZWxsaXBzaXMgPSB0aHJlZSBkb3QgbGVhZGVyLCBVKzIwMjYgSVNPcHViICAtLT4NCi08IUVOVElUWSBwcmltZSAgICAiJiM4MjQyOyIgPjwhLS0gcHJpbWUgPSBtaW51dGVzID0gZmVldCwgVSsyMDMyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgUHJpbWUgICAgIiYjODI0MzsiID48IS0tIGRvdWJsZSBwcmltZSA9IHNlY29uZHMgPSBpbmNoZXMsIFUrMjAzMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9saW5lICAgICImIzgyNTQ7IiA+PCEtLSBvdmVybGluZSA9IHNwYWNpbmcgb3ZlcnNjb3JlLCBVKzIwM0UgTkVXIC0tPg0KLTwhRU5USVRZIGZyYXNsICAgICImIzgyNjA7IiA+PCEtLSBmcmFjdGlvbiBzbGFzaCwgVSsyMDQ0IE5FVyAtLT4NCi0NCi08IS0tIExldHRlcmxpa2UgU3ltYm9scyAtLT4NCi08IUVOVElUWSB3ZWllcnAgICAiJiM4NDcyOyIgPjwhLS0gc2NyaXB0IGNhcGl0YWwgUCA9IHBvd2VyIHNldCA9IFdlaWVyc3RyYXNzIHAsIFUrMjExOCBJU09hbXNvIC0tPg0KLTwhRU5USVRZIGltYWdlICAgICImIzg0NjU7IiA+PCEtLSBibGFja2xldHRlciBjYXBpdGFsIEkgPSBpbWFnaW5hcnkgcGFydCwgVSsyMTExIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgcmVhbCAgICAgIiYjODQ3NjsiID48IS0tIGJsYWNrbGV0dGVyIGNhcGl0YWwgUiA9IHJlYWwgcGFydCBzeW1ib2wsIFUrMjExQyBJU09hbXNvIC0tPg0KLTwhRU5USVRZIHRyYWRlICAgICImIzg0ODI7IiA+PCEtLSB0cmFkZSBtYXJrIHNpZ24sIFUrMjEyMiBJU09udW0gLS0+DQotPCFFTlRJVFkgYWxlZnN5bSAgIiYjODUwMTsiID48IS0tIGFsZWYgc3ltYm9sID0gZmlyc3QgdHJhbnNmaW5pdGUgY2FyZGluYWwsIFUrMjEzNSBORVcgLS0+DQotPCEtLSBhbGVmIHN5bWJvbCBpcyBOT1QgdGhlIHNhbWUgYXMgaGVicmV3IGxldHRlciBhbGVmLCBVKzA1RDAgYWx0aG91Z2gNCi0gICAgIHRoZSBzYW1lIGdseXBoIGNvdWxkIGJlIHVzZWQgdG8gZGVwaWN0IGJvdGggY2hhcmFjdGVycyAtLT4NCi0NCi08IS0tIEFycm93cyAtLT4NCi08IUVOVElUWSBsYXJyICAgICAiJiM4NTkyOyIgPjwhLS0gbGVmdHdhcmRzIGFycm93LCBVKzIxOTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVhcnIgICAgICImIzg1OTM7IiA+PCEtLSB1cHdhcmRzIGFycm93LCBVKzIxOTEgSVNPbnVtLS0+DQotPCFFTlRJVFkgcmFyciAgICAgIiYjODU5NDsiID48IS0tIHJpZ2h0d2FyZHMgYXJyb3csIFUrMjE5MiBJU09udW0gLS0+DQotPCFFTlRJVFkgZGFyciAgICAgIiYjODU5NTsiID48IS0tIGRvd253YXJkcyBhcnJvdywgVSsyMTkzIElTT251bSAtLT4NCi08IUVOVElUWSBoYXJyICAgICAiJiM4NTk2OyIgPjwhLS0gbGVmdCByaWdodCBhcnJvdywgVSsyMTk0IElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgY3JhcnIgICAgIiYjODYyOTsiID48IS0tIGRvd253YXJkcyBhcnJvdyB3aXRoIGNvcm5lciBsZWZ0d2FyZHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjYXJyaWFnZSByZXR1cm4sIFUrMjFCNSBORVcgLS0+DQotPCFFTlRJVFkgbEFyciAgICAgIiYjODY1NjsiID48IS0tIGxlZnR3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMCBJU090ZWNoIC0tPg0KLTwhLS0gVW5pY29kZSBkb2VzIG5vdCBzYXkgdGhhdCBsQXJyIGlzIHRoZSBzYW1lIGFzIHRoZSAnaXMgaW1wbGllZCBieScgYXJyb3cNCi0gICAgYnV0IGFsc28gZG9lcyBub3QgaGF2ZSBhbnkgb3RoZXIgY2hhcmFjdGVyIGZvciB0aGF0IGZ1bmN0aW9uLiBTbyA/IGxBcnIgY2FuDQotICAgIGJlIHVzZWQgZm9yICdpcyBpbXBsaWVkIGJ5JyBhcyBJU090ZWNoIHN1Z2dlc3RzIC0tPg0KLTwhRU5USVRZIHVBcnIgICAgICImIzg2NTc7IiA+PCEtLSB1cHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQxIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgckFyciAgICAgIiYjODY1ODsiID48IS0tIHJpZ2h0d2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDIgSVNPdGVjaCAtLT4NCi08IS0tIFVuaWNvZGUgZG9lcyBub3Qgc2F5IHRoaXMgaXMgdGhlICdpbXBsaWVzJyBjaGFyYWN0ZXIgYnV0IGRvZXMgbm90IGhhdmUNCi0gICAgIGFub3RoZXIgY2hhcmFjdGVyIHdpdGggdGhpcyBmdW5jdGlvbiBzbyA/DQotICAgICByQXJyIGNhbiBiZSB1c2VkIGZvciAnaW1wbGllcycgYXMgSVNPdGVjaCBzdWdnZXN0cyAtLT4NCi08IUVOVElUWSBkQXJyICAgICAiJiM4NjU5OyIgPjwhLS0gZG93bndhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQzIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgaEFyciAgICAgIiYjODY2MDsiID48IS0tIGxlZnQgcmlnaHQgZG91YmxlIGFycm93LCBVKzIxRDQgSVNPYW1zYSAtLT4NCi0NCi08IS0tIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMgLS0+DQotPCFFTlRJVFkgZm9yYWxsICAgIiYjODcwNDsiID48IS0tIGZvciBhbGwsIFUrMjIwMCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHBhcnQgICAgICImIzg3MDY7IiA+PCEtLSBwYXJ0aWFsIGRpZmZlcmVudGlhbCwgVSsyMjAyIElTT3RlY2ggIC0tPg0KLTwhRU5USVRZIGV4aXN0ICAgICImIzg3MDc7IiA+PCEtLSB0aGVyZSBleGlzdHMsIFUrMjIwMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVtcHR5ICAgICImIzg3MDk7IiA+PCEtLSBlbXB0eSBzZXQgPSBudWxsIHNldCA9IGRpYW1ldGVyLCBVKzIyMDUgSVNPYW1zbyAtLT4NCi08IUVOVElUWSBuYWJsYSAgICAiJiM4NzExOyIgPjwhLS0gbmFibGEgPSBiYWNrd2FyZCBkaWZmZXJlbmNlLCBVKzIyMDcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpc2luICAgICAiJiM4NzEyOyIgPjwhLS0gZWxlbWVudCBvZiwgVSsyMjA4IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbm90aW4gICAgIiYjODcxMzsiID48IS0tIG5vdCBhbiBlbGVtZW50IG9mLCBVKzIyMDkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBuaSAgICAgICAiJiM4NzE1OyIgPjwhLS0gY29udGFpbnMgYXMgbWVtYmVyLCBVKzIyMEIgSVNPdGVjaCAtLT4NCi08IS0tIHNob3VsZCB0aGVyZSBiZSBhIG1vcmUgbWVtb3JhYmxlIG5hbWUgdGhhbiAnbmknPyAtLT4NCi08IUVOVElUWSBwcm9kICAgICAiJiM4NzE5OyIgPjwhLS0gbi1hcnkgcHJvZHVjdCA9IHByb2R1Y3Qgc2lnbiwgVSsyMjBGIElTT2Ftc2IgLS0+DQotPCEtLSBwcm9kIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswM0EwICdncmVlayBjYXBpdGFsIGxldHRlciBwaScgdGhvdWdoDQotICAgICB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIGZvciBib3RoIC0tPg0KLTwhRU5USVRZIHN1bSAgICAgICImIzg3MjE7IiA+PCEtLSBuLWFyeSBzdW1hdGlvbiwgVSsyMjExIElTT2Ftc2IgLS0+DQotPCEtLSBzdW0gaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAzQTMgJ2dyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hJw0KLSAgICAgdGhvdWdoIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgZm9yIGJvdGggLS0+DQotPCFFTlRJVFkgbWludXMgICAgIiYjODcyMjsiID48IS0tIG1pbnVzIHNpZ24sIFUrMjIxMiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxvd2FzdCAgICImIzg3Mjc7IiA+PCEtLSBhc3RlcmlzayBvcGVyYXRvciwgVSsyMjE3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcmFkaWMgICAgIiYjODczMDsiID48IS0tIHNxdWFyZSByb290ID0gcmFkaWNhbCBzaWduLCBVKzIyMUEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBwcm9wICAgICAiJiM4NzMzOyIgPjwhLS0gcHJvcG9ydGlvbmFsIHRvLCBVKzIyMUQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpbmZpbiAgICAiJiM4NzM0OyIgPjwhLS0gaW5maW5pdHksIFUrMjIxRSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGFuZyAgICAgICImIzg3MzY7IiA+PCEtLSBhbmdsZSwgVSsyMjIwIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgYW5kICAgICAgIiYjODc0MzsiID48IS0tIGxvZ2ljYWwgYW5kID0gd2VkZ2UsIFUrMjIyNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9yICAgICAgICImIzg3NDQ7IiA+PCEtLSBsb2dpY2FsIG9yID0gdmVlLCBVKzIyMjggSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjYXAgICAgICAiJiM4NzQ1OyIgPjwhLS0gaW50ZXJzZWN0aW9uID0gY2FwLCBVKzIyMjkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjdXAgICAgICAiJiM4NzQ2OyIgPjwhLS0gdW5pb24gPSBjdXAsIFUrMjIyQSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGludCAgICAgICImIzg3NDc7IiA+PCEtLSBpbnRlZ3JhbCwgVSsyMjJCIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgdGhlcmU0ICAgIiYjODc1NjsiID48IS0tIHRoZXJlZm9yZSwgVSsyMjM0IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc2ltICAgICAgIiYjODc2NDsiID48IS0tIHRpbGRlIG9wZXJhdG9yID0gdmFyaWVzIHdpdGggPSBzaW1pbGFyIHRvLCBVKzIyM0MgSVNPdGVjaCAtLT4NCi08IS0tIHRpbGRlIG9wZXJhdG9yIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgdGhlIHRpbGRlLCBVKzAwN0UsDQotICAgICBhbHRob3VnaCB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIHRvIHJlcHJlc2VudCBib3RoICAtLT4NCi08IUVOVElUWSBjb25nICAgICAiJiM4NzczOyIgPjwhLS0gYXBwcm94aW1hdGVseSBlcXVhbCB0bywgVSsyMjQ1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgYXN5bXAgICAgIiYjODc3NjsiID48IS0tIGFsbW9zdCBlcXVhbCB0byA9IGFzeW1wdG90aWMgdG8sIFUrMjI0OCBJU09hbXNyIC0tPg0KLTwhRU5USVRZIG5lICAgICAgICImIzg4MDA7IiA+PCEtLSBub3QgZXF1YWwgdG8sIFUrMjI2MCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVxdWl2ICAgICImIzg4MDE7IiA+PCEtLSBpZGVudGljYWwgdG8sIFUrMjI2MSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxlICAgICAgICImIzg4MDQ7IiA+PCEtLSBsZXNzLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGdlICAgICAgICImIzg4MDU7IiA+PCEtLSBncmVhdGVyLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1YiAgICAgICImIzg4MzQ7IiA+PCEtLSBzdWJzZXQgb2YsIFUrMjI4MiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1cCAgICAgICImIzg4MzU7IiA+PCEtLSBzdXBlcnNldCBvZiwgVSsyMjgzIElTT3RlY2ggLS0+DQotPCEtLSBub3RlIHRoYXQgbnN1cCwgJ25vdCBhIHN1cGVyc2V0IG9mLCBVKzIyODMnIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBTeW1ib2wNCi0gICAgIGZvbnQgZW5jb2RpbmcgYW5kIGlzIG5vdCBpbmNsdWRlZC4gU2hvdWxkIGl0IGJlLCBmb3Igc3ltbWV0cnk/DQotICAgICBJdCBpcyBpbiBJU09hbXNuICAtLT4NCi08IUVOVElUWSBuc3ViICAgICAiJiM4ODM2OyIgPjwhLS0gbm90IGEgc3Vic2V0IG9mLCBVKzIyODQgSVNPYW1zbiAtLT4NCi08IUVOVElUWSBzdWJlICAgICAiJiM4ODM4OyIgPjwhLS0gc3Vic2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODYgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdXBlICAgICAiJiM4ODM5OyIgPjwhLS0gc3VwZXJzZXQgb2Ygb3IgZXF1YWwgdG8sIFUrMjI4NyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9wbHVzICAgICImIzg4NTM7IiA+PCEtLSBjaXJjbGVkIHBsdXMgPSBkaXJlY3Qgc3VtLCBVKzIyOTUgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBvdGltZXMgICAiJiM4ODU1OyIgPjwhLS0gY2lyY2xlZCB0aW1lcyA9IHZlY3RvciBwcm9kdWN0LCBVKzIyOTcgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBwZXJwICAgICAiJiM4ODY5OyIgPjwhLS0gdXAgdGFjayA9IG9ydGhvZ29uYWwgdG8gPSBwZXJwZW5kaWN1bGFyLCBVKzIyQTUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzZG90ICAgICAiJiM4OTAxOyIgPjwhLS0gZG90IG9wZXJhdG9yLCBVKzIyQzUgSVNPYW1zYiAtLT4NCi08IS0tIGRvdCBvcGVyYXRvciBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDBCNyBtaWRkbGUgZG90IC0tPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBUZWNobmljYWwgLS0+DQotPCFFTlRJVFkgbGNlaWwgICAgIiYjODk2ODsiID48IS0tIGxlZnQgY2VpbGluZyA9IGFwbCB1cHN0aWxlLCBVKzIzMDggSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgcmNlaWwgICAgIiYjODk2OTsiID48IS0tIHJpZ2h0IGNlaWxpbmcsIFUrMjMwOSBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsZmxvb3IgICAiJiM4OTcwOyIgPjwhLS0gbGVmdCBmbG9vciA9IGFwbCBkb3duc3RpbGUsIFUrMjMwQSBJU09hbXNjICAtLT4NCi08IUVOVElUWSByZmxvb3IgICAiJiM4OTcxOyIgPjwhLS0gcmlnaHQgZmxvb3IsIFUrMjMwQiBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsYW5nICAgICAiJiM5MDAxOyIgPjwhLS0gbGVmdC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0gYnJhLCBVKzIzMjkgSVNPdGVjaCAtLT4NCi08IS0tIGxhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0MgJ2xlc3MgdGhhbicNCi0gICAgIG9yIFUrMjAzOSAnc2luZ2xlIGxlZnQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmsnIC0tPg0KLTwhRU5USVRZIHJhbmcgICAgICImIzkwMDI7IiA+PCEtLSByaWdodC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0ga2V0LCBVKzIzMkEgSVNPdGVjaCAtLT4NCi08IS0tIHJhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0UgJ2dyZWF0ZXIgdGhhbicNCi0gICAgIG9yIFUrMjAzQSAnc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrJyAtLT4NCi0NCi08IS0tIEdlb21ldHJpYyBTaGFwZXMgLS0+DQotPCFFTlRJVFkgbG96ICAgICAgIiYjOTY3NDsiID48IS0tIGxvemVuZ2UsIFUrMjVDQSBJU09wdWIgLS0+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIFN5bWJvbHMgLS0+DQotPCFFTlRJVFkgc3BhZGVzICAgIiYjOTgyNDsiID48IS0tIGJsYWNrIHNwYWRlIHN1aXQsIFUrMjY2MCBJU09wdWIgLS0+DQotPCEtLSBibGFjayBoZXJlIHNlZW1zIHRvIG1lYW4gZmlsbGVkIGFzIG9wcG9zZWQgdG8gaG9sbG93IC0tPg0KLTwhRU5USVRZIGNsdWJzICAgICImIzk4Mjc7IiA+PCEtLSBibGFjayBjbHViIHN1aXQgPSBzaGFtcm9jaywgVSsyNjYzIElTT3B1YiAtLT4NCi08IUVOVElUWSBoZWFydHMgICAiJiM5ODI5OyIgPjwhLS0gYmxhY2sgaGVhcnQgc3VpdCA9IHZhbGVudGluZSwgVSsyNjY1IElTT3B1YiAtLT4NCi08IUVOVElUWSBkaWFtcyAgICAiJiM5ODMwOyIgPjwhLS0gYmxhY2sgZGlhbW9uZCBzdWl0LCBVKzI2NjYgSVNPcHViIC0tPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN5bWJvbC5lbnQgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtc3BlY2lhbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYTUwtY29tcGF0aWJsZSBJU08gU3BlY2lhbCBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3BlY2lhbC5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1zcGVjaWFsLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3BlY2lhbDsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3BlY2lhbC5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLTIwMDAtMTAtMjg6IGFkZGVkICZhcG9zOyBhbmQgYWx0ZXJlZCBYTUwgUHJlZGVmaW5lZCBFbnRpdGllcyBmb3IgY29tcGF0aWJpbGl0eQ0KLS0tPg0KLQ0KLTwhLS0gUmVsZXZhbnQgSVNPIGVudGl0eSBzZXQgaXMgZ2l2ZW4gdW5sZXNzIG5hbWVzIGFyZSBuZXdseSBpbnRyb2R1Y2VkLg0KLSAgICAgTmV3IG5hbWVzIChpLmUuLCBub3QgaW4gSVNPIDg4NzkgW1NHTUxdIGxpc3QpIGRvIG5vdCBjbGFzaCB3aXRoDQotICAgICBhbnkgZXhpc3RpbmcgSVNPIDg4NzkgZW50aXR5IG5hbWVzLiBJU08gMTA2NDYgW0lTTzEwNjQ2XSBjaGFyYWN0ZXINCi0gICAgIG51bWJlcnMgYXJlIGdpdmVuIGZvciBlYWNoIGNoYXJhY3RlciwgaW4gaGV4LiBFbnRpdHkgdmFsdWVzIGFyZQ0KLSAgICAgZGVjaW1hbCBjb252ZXJzaW9ucyBvZiB0aGUgSVNPIDEwNjQ2IHZhbHVlcyBhbmQgcmVmZXIgdG8gdGhlDQotICAgICBkb2N1bWVudCBjaGFyYWN0ZXIgc2V0LiBOYW1lcyBhcmUgVW5pY29kZSBbVU5JQ09ERV0gbmFtZXMuDQotLS0+DQotDQotPCEtLSBDMCBDb250cm9scyBhbmQgQmFzaWMgTGF0aW4gLS0+DQotPCFFTlRJVFkgbHQgICAgICAiJiMzODsmIzYwOyIgPjwhLS0gbGVzcy10aGFuIHNpZ24sIFUrMDAzQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZ3QgICAgICAiJiM2MjsiID48IS0tIGdyZWF0ZXItdGhhbiBzaWduLCBVKzAwM0UgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFtcCAgICAgIiYjMzg7JiMzODsiID48IS0tIGFtcGVyc2FuZCwgVSswMDI2IElTT251bSAtLT4NCi08IUVOVElUWSBhcG9zICAgICImIzM5OyIgPjwhLS0gYXBvc3Ryb3BoZSwgVSswMDI3IElTT251bSAtLT4NCi08IUVOVElUWSBxdW90ICAgICImIzM0OyIgPjwhLS0gcXVvdGF0aW9uIG1hcmsgPSBBUEwgcXVvdGUsIFUrMDAyMiBJU09udW0gLS0+DQotDQotPCEtLSBMYXRpbiBFeHRlbmRlZC1BIC0tPg0KLTwhRU5USVRZIE9FbGlnICAgIiYjMzM4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBPRSwgVSswMTUyIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgb2VsaWcgICAiJiMzMzk7IiA+PCEtLSBsYXRpbiBzbWFsbCBsaWdhdHVyZSBvZSwgVSswMTUzIElTT2xhdDIgLS0+DQotDQotPCEtLSBsaWdhdHVyZSBpcyBhIG1pc25vbWVyLCB0aGlzIGlzIGEgc2VwYXJhdGUgY2hhcmFjdGVyIGluIHNvbWUgbGFuZ3VhZ2VzIC0tPg0KLTwhRU5USVRZIFNjYXJvbiAgIiYjMzUyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgUyB3aXRoIGNhcm9uLCBVKzAxNjAgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBzY2Fyb24gICImIzM1MzsiID48IS0tIGxhdGluIHNtYWxsIGxldHRlciBzIHdpdGggY2Fyb24sIFUrMDE2MSBJU09sYXQyIC0tPg0KLTwhRU5USVRZIFl1bWwgICAgIiYjMzc2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgWSB3aXRoIGRpYWVyZXNpcywgVSswMTc4IElTT2xhdDIgLS0+DQotDQotPCEtLSBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMgLS0+DQotPCFFTlRJVFkgY2lyYyAgICAiJiM3MTA7IiA+PCEtLSBtb2RpZmllciBsZXR0ZXIgY2lyY3VtZmxleCBhY2NlbnQsIFUrMDJDNiBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGlsZGUgICAiJiM3MzI7IiA+PCEtLSBzbWFsbCB0aWxkZSwgVSswMkRDIElTT2RpYSAtLT4NCi0NCi08IS0tIEdlbmVyYWwgUHVuY3R1YXRpb24gLS0+DQotPCFFTlRJVFkgZW5zcCAgICAiJiM4MTk0OyIgPjwhLS0gZW4gc3BhY2UsIFUrMjAwMiBJU09wdWIgLS0+DQotPCFFTlRJVFkgZW1zcCAgICAiJiM4MTk1OyIgPjwhLS0gZW0gc3BhY2UsIFUrMjAwMyBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGhpbnNwICAiJiM4MjAxOyIgPjwhLS0gdGhpbiBzcGFjZSwgVSsyMDA5IElTT3B1YiAtLT4NCi08IUVOVElUWSB6d25qICAgICImIzgyMDQ7IiA+PCEtLSB6ZXJvIHdpZHRoIG5vbi1qb2luZXIsIFUrMjAwQyBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgendqICAgICAiJiM4MjA1OyIgPjwhLS0gemVybyB3aWR0aCBqb2luZXIsIFUrMjAwRCBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgbHJtICAgICAiJiM4MjA2OyIgPjwhLS0gbGVmdC10by1yaWdodCBtYXJrLCBVKzIwMEUgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIHJsbSAgICAgIiYjODIwNzsiID48IS0tIHJpZ2h0LXRvLWxlZnQgbWFyaywgVSsyMDBGIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBuZGFzaCAgICImIzgyMTE7IiA+PCEtLSBlbiBkYXNoLCBVKzIwMTMgSVNPcHViIC0tPg0KLTwhRU5USVRZIG1kYXNoICAgIiYjODIxMjsiID48IS0tIGVtIGRhc2gsIFUrMjAxNCBJU09wdWIgLS0+DQotPCFFTlRJVFkgbHNxdW8gICAiJiM4MjE2OyIgPjwhLS0gbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxOCBJU09udW0gLS0+DQotPCFFTlRJVFkgcnNxdW8gICAiJiM4MjE3OyIgPjwhLS0gcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMTkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNicXVvICAgIiYjODIxODsiID48IS0tIHNpbmdsZSBsb3ctOSBxdW90YXRpb24gbWFyaywgVSsyMDFBIE5FVyAtLT4NCi08IUVOVElUWSBsZHF1byAgICImIzgyMjA7IiA+PCEtLSBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyaywgVSsyMDFDIElTT251bSAtLT4NCi08IUVOVElUWSByZHF1byAgICImIzgyMjE7IiA+PCEtLSByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxRCBJU09udW0gLS0+DQotPCFFTlRJVFkgYmRxdW8gICAiJiM4MjIyOyIgPjwhLS0gZG91YmxlIGxvdy05IHF1b3RhdGlvbiBtYXJrLCBVKzIwMUUgTkVXIC0tPg0KLTwhRU5USVRZIGRhZ2dlciAgIiYjODIyNDsiID48IS0tIGRhZ2dlciwgVSsyMDIwIElTT3B1YiAtLT4NCi08IUVOVElUWSBEYWdnZXIgICImIzgyMjU7IiA+PCEtLSBkb3VibGUgZGFnZ2VyLCBVKzIwMjEgSVNPcHViIC0tPg0KLTwhRU5USVRZIHBlcm1pbCAgIiYjODI0MDsiID48IS0tIHBlciBtaWxsZSBzaWduLCBVKzIwMzAgSVNPdGVjaCAtLT4NCi0NCi08IS0tIGxzYXF1byBpcyBwcm9wb3NlZCBidXQgbm90IHlldCBJU08gc3RhbmRhcmRpemVkIC0tPg0KLTwhRU5USVRZIGxzYXF1byAgIiYjODI0OTsiID48IS0tIHNpbmdsZSBsZWZ0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMzkgSVNPIHByb3Bvc2VkIC0tPg0KLTwhLS0gcnNhcXVvIGlzIHByb3Bvc2VkIGJ1dCBub3QgeWV0IElTTyBzdGFuZGFyZGl6ZWQgLS0+DQotPCFFTlRJVFkgcnNhcXVvICAiJiM4MjUwOyIgPjwhLS0gc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwM0EgSVNPIHByb3Bvc2VkIC0tPg0KLTwhRU5USVRZIGV1cm8gICAgIiYjODM2NDsiID48IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zcGVjaWFsLmVudCAtLT4NCi0NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1jaGFyZW50LTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCVdNTCBkb2N1bWVudCBtb2RlbA0KLS0tPg0KLTwhRU5USVRZICUgd21sLW1vZGVsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgMi4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMjAtbW9kZWwtMS5tb2QiPg0KLTwhLS0gV01MIDIuMCBEb2N1bWVudCBNb2RlbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLW1vZGVsLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sMjAtbW9kZWwtMS5tb2QiDQotICAgICAgDQotICAgICBUaGlzIG1vZHVsZSBkZXNjcmliZXMgdGhlIGdyb3VwaW5ncyBvZiBlbGVtZW50cyB0aGF0IG1ha2UgdXANCi0gICAgIGNvbW1vbiBjb250ZW50IG1vZGVscyBmb3IgV01MIGFuZCBYSFRNTCBlbGVtZW50cy4NCi0NCi0gICAgIFRocmVlIGJhc2ljIGNvbnRlbnQgbW9kZWxzIGFyZSBkZWNsYXJlZDoNCi0NCi0gICAgICAgICAlSW5saW5lLm1peDsgIGNoYXJhY3Rlci1sZXZlbCBlbGVtZW50cw0KLSAgICAgICAgICVCbG9jay5taXg7ICAgYmxvY2stbGlrZSBlbGVtZW50cywgZWcuLCBwYXJhZ3JhcGhzIGFuZCBsaXN0cw0KLSAgICAgICAgICVGbG93Lm1peDsgICAgYW55IGJsb2NrIG9yIGlubGluZSBlbGVtZW50cw0KLQ0KLSAgICAgQW55IHBhcmFtZXRlciBlbnRpdGllcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZSBtYXkgYmUgdXNlZA0KLSAgICAgdG8gY3JlYXRlIGVsZW1lbnQgY29udGVudCBtb2RlbHMsIGJ1dCB0aGUgYWJvdmUgdGhyZWUgYXJlDQotICAgICBjb25zaWRlcmVkICdnbG9iYWwnIChpbnNvZmFyIGFzIHRoYXQgdGVybSBhcHBsaWVzIGhlcmUpLg0KLSAgICAgDQotICAgICAgICAJICAgICANCi0tLT4NCi08IS0tIA0KLQlPcHRpb25hbCBFbGVtZW50cyBpbiBoZWFkICANCi0tLT4NCi08IUVOVElUWSAlIEhlYWRPcHRzLm1peCAiKCAlbWV0YS5xbmFtZTsgDQotCQl8ICVsaW5rLnFuYW1lOyANCi0JCXwgJXN0eWxlLnFuYW1lOyANCi0JCXwgJW9iamVjdC5xbmFtZTsgDQotCQl8ICVhY2Nlc3MucW5hbWU7KSoiPg0KLTwhLS0gDQotCVRhc2sgZWxlbWVudHMNCi0NCi0JVXNlZCBmb3IgdGhlIFdNTCBkbyBhbmQgb25ldmVudCBlbGVtZW50cw0KLS0tPg0KLTwhRU5USVRZICUgVGFza3MuY2xhc3MgIiglZ28ucW5hbWU7IA0KLQkJfCAlcHJldi5xbmFtZTsgDQotCQl8ICVub29wLnFuYW1lOyANCi0JCXwgJXJlZnJlc2gucW5hbWU7KSI+DQotPCEtLSANCi0JVGFza3Mgd2l0aG91dCBub29wIGVsZW1lbnQNCi0NCi0JVXNlZCBmb3IgdGhlIFdNTCBhbmNob3INCi0tLT4NCi08IUVOVElUWSAlIFRhc2tzLW5vbm9vcC5jbGFzcyAiJWdvLnFuYW1lOyANCi0JCXwgJXByZXYucW5hbWU7IA0KLQkJfCAlcmVmcmVzaC5xbmFtZTsiPg0KLTwhLS0NCi0JRG8gZWxlbWVudA0KLS0tPg0KLTwhRU5USVRZICUgRG8uY2xhc3MgIiVkby5xbmFtZTsiPg0KLTwhLS0gDQotCU1pc2NlbGxhbmVvdXMgRWxlbWVudHMgIA0KLQkNCi0JVGhpcyBpcyBub3QgdXNlZCBmb3IgYW55dGhpbmcgcmlnaHQgbm93LiANCi0tLT4NCi08IUVOVElUWSAlIE1pc2MuY2xhc3MgIiI+DQotPCEtLSANCi0JSW5saW5lIEVsZW1lbnRzICANCi0tLT4NCi08IUVOVElUWSAlIElubFN0cnVjdC5jbGFzcyAiJWJyLnFuYW1lOyANCi0JfCAlc3Bhbi5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sUGhyYXMuY2xhc3MgInwgJWVtLnFuYW1lOyANCi0JfCAlc3Ryb25nLnFuYW1lOyANCi0JfCAlZGZuLnFuYW1lOyANCi0JfCAlY29kZS5xbmFtZTsgDQotCXwgJXNhbXAucW5hbWU7IA0KLQl8ICVrYmQucW5hbWU7IA0KLQl8ICV2YXIucW5hbWU7IA0KLQl8ICVjaXRlLnFuYW1lOyANCi0gICAgIAl8ICVhYmJyLnFuYW1lOyANCi0JfCAlYWNyb255bS5xbmFtZTsgDQotCXwgJXEucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFByZXMuY2xhc3MgInwgJWkucW5hbWU7IA0KLQl8ICViLnFuYW1lOyANCi0JfCAlYmlnLnFuYW1lOyANCi0JfCAlc21hbGwucW5hbWU7DQotCXwgJXUucW5hbWU7Ij4NCi08IUVOVElUWSAlIEkxOG4uY2xhc3MgIiI+DQotPCFFTlRJVFkgJSBBbmNob3IuY2xhc3MgInwgJWEucW5hbWU7IA0KLQl8ICVhbmNob3IucW5hbWU7IHwgJWRvLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxTcGVjaWFsLmNsYXNzICJ8ICVpbWcucW5hbWU7IA0KLQkgfCAlb2JqZWN0LnFuYW1lOyANCi0JfCAlZ2V0dmFyLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxGb3JtLmNsYXNzICJ8ICVpbnB1dC5xbmFtZTsgDQotCSB8ICVzZWxlY3QucW5hbWU7IA0KLQkgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgICAgfCAlbGFiZWwucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubGluZS5leHRyYSAiIj4NCi08IUVOVElUWSAlIElubGluZS5jbGFzcyAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5jbGFzcyAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiPg0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IubWl4ICIlSW5sTm9BbmNob3IuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIElubGluZS5taXggIiVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIA0KLQlCbG9jayBFbGVtZW50cyAgDQotLS0+DQotPCFFTlRJVFkgJSBIZWFkaW5nLmNsYXNzICIlaDEucW5hbWU7IA0KLQl8ICVoMi5xbmFtZTsgDQotCXwgJWgzLnFuYW1lOyANCi0JfCAlaDQucW5hbWU7IA0KLQl8ICVoNS5xbmFtZTsgDQotCXwgJWg2LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBMaXN0LmNsYXNzICIldWwucW5hbWU7IA0KLQl8ICVvbC5xbmFtZTsgDQotCXwgJWRsLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBUYWJsZS5jbGFzcyAifCAldGFibGUucW5hbWU7Ij4NCi08IUVOVElUWSAlIEZvcm0uY2xhc3MgInwgJWZvcm0ucW5hbWU7Ij4NCi08IUVOVElUWSAlIEZpZWxkc2V0LmNsYXNzICJ8ICVmaWVsZHNldC5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrU3RydWN0LmNsYXNzICIlcC5xbmFtZTsgDQotCXwgJWRpdi5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrUGhyYXMuY2xhc3MgInwgJXByZS5xbmFtZTsgDQotCSB8ICVibG9ja3F1b3RlLnFuYW1lOyANCi0JIHwgJWFkZHJlc3MucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1ByZXMuY2xhc3MgInwgJWhyLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtTcGVjaWFsLmNsYXNzICIlVGFibGUuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUZpZWxkc2V0LmNsYXNzOyI+DQotPCFFTlRJVFkgJSBCbG9jay5leHRyYSAiIj4NCi08IUVOVElUWSAlIEJsb2NrLmNsYXNzICIlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0JICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVCbGtTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsiPg0KLTwhRU5USVRZICUgQmxvY2subWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOyAgICAgDQotICAgICAgfCAlRG8uY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICB8ICV0YWJsZS5xbmFtZTsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIA0KLQlBbGwgQ29udGVudCBFbGVtZW50cyAgDQotLS0+DQotPCEtLSANCi0JZGVjbGFyZXMgYWxsIGNvbnRlbnQgZXhjZXB0IHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgRmxvd05vVGFibGUubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgRmxvdy5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSAJDQotCVRlbXBsYXRlIGxldmVsIGVsZW1lbnRzIA0KLS0tPg0KLTwhRU5USVRZICUgVGVtcGxhdGUubWl4ICIoICVvbmV2ZW50LnFuYW1lOykqIj4NCi08IS0tIA0KLQlDb250ZW50IG1vZGVsIG9mIHRoZSBXTUwgY2FyZCBhbmQgWEhUTUwgYm9keSBlbGVtZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2FyZEJvZHkubWl4ICIoJW9uZXZlbnQucW5hbWU7KiwgJXRpbWVyLnFuYW1lOz8sICAoICVCbG9jay5taXg7ICkrKSI+DQotPCEtLSBlbmQgb2Ygd21sMjAtbW9kZWwtMS5tb2QgLS0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlYSFRNTCBtb2R1bGVzIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBwcmUuY29udGVudCAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOyB8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyANCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyANCi0JfCAlZ2V0dmFyLnFuYW1lOw0KLQl8ICVpbnB1dC5xbmFtZTt8ICVzZWxlY3QucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgcC5jb250ZW50ICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgfCAldGFibGUucW5hbWU7IHwgJWZpZWxkc2V0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtdGV4dC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRleHR1YWwgQ29udGVudA0KLQ0KLSAgICAgVGhlIFRleHQgbW9kdWxlIGluY2x1ZGVzIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGNvcmUNCi0gICAgIHRleHQgY29udGFpbmVyIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3RydWN0Lm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1pbmxzdHJ1Y3QubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWlubHN0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFN0cnVjdHVyYWwNCi0NCi0gICAgICAgIGJyLCBzcGFuDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMNCi0gICAgIHVzZWQgdG8gc3VwcG9ydCBpbmxpbmUtbGV2ZWwgc3RydWN0dXJhbCBtYXJrdXAuDQotLS0+DQotDQotPCEtLSBicjogZm9yY2VkIGxpbmUgYnJlYWsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBici5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVici5lbGVtZW50O1sNCi0NCi08IUVOVElUWSAlIGJyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgYnIucW5hbWUgICJiciIgPg0KLTwhRUxFTUVOVCAlYnIucW5hbWU7ICAlYnIuY29udGVudDsgPg0KLQ0KLTwhLS0gZW5kIG9mIGJyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBici5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVici5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJyLnFuYW1lOw0KLSAgICAgICVDb3JlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYnIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHNwYW46IGdlbmVyaWMgaW5saW5lIGNvbnRhaW5lciAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHNwYW4uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3Bhbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNwYW4uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzcGFuLnFuYW1lICAic3BhbiIgPg0KLTwhRUxFTUVOVCAlc3Bhbi5xbmFtZTsgICVzcGFuLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzcGFuLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzcGFuLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNwYW4uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzcGFuLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzcGFuLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5sc3RydWN0LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaW5scGhyYXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWlubHBocmFzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwaHJhcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1pbmxwaHJhcy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBQaHJhc2FsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxwaHJhcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scGhyYXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFBocmFzYWwNCi0NCi0gICAgICAgIGFiYnIsIGFjcm9ueW0sIGNpdGUsIGNvZGUsIGRmbiwgZW0sIGtiZCwgcSwgc2FtcCwgc3Ryb25nLCB2YXINCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGlubGluZS1sZXZlbCBwaHJhc2FsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGFiYnIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWJici5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFiYnIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhYmJyLnFuYW1lICAiYWJiciIgPg0KLTwhRUxFTUVOVCAlYWJici5xbmFtZTsgICVhYmJyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhYmJyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhYmJyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFiYnIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhYmJyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhYmJyLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhY3JvbnltLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFjcm9ueW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhY3JvbnltLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYWNyb255bS5xbmFtZSAgImFjcm9ueW0iID4NCi08IUVMRU1FTlQgJWFjcm9ueW0ucW5hbWU7ICAlYWNyb255bS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWNyb255bS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWNyb255bS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhY3JvbnltLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWNyb255bS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWNyb255bS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2l0ZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjaXRlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY2l0ZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGNpdGUucW5hbWUgICJjaXRlIiA+DQotPCFFTEVNRU5UICVjaXRlLnFuYW1lOyAgJWNpdGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNpdGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNpdGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2l0ZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNpdGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNpdGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNvZGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY29kZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNvZGUuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBjb2RlLnFuYW1lICAiY29kZSIgPg0KLTwhRUxFTUVOVCAlY29kZS5xbmFtZTsgICVjb2RlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjb2RlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjb2RlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNvZGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjb2RlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjb2RlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZm4uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGZuLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGZuLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZGZuLnFuYW1lICAiZGZuIiA+DQotPCFFTEVNRU5UICVkZm4ucW5hbWU7ICAlZGZuLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkZm4uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRmbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkZm4uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkZm4ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRmbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBlbS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGVtLnFuYW1lICAiZW0iID4NCi08IUVMRU1FTlQgJWVtLnFuYW1lOyAgJWVtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBlbS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVlbS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGtiZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVrYmQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBrYmQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBrYmQucW5hbWUgICJrYmQiID4NCi08IUVMRU1FTlQgJWtiZC5xbmFtZTsgICVrYmQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGtiZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUga2JkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWtiZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWtiZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Yga2JkLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBxLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBxLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgcS5xbmFtZSAgInEiID4NCi08IUVMRU1FTlQgJXEucW5hbWU7ICAlcS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVxLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaXRlICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNhbXAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc2FtcC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNhbXAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzYW1wLnFuYW1lICAic2FtcCIgPg0KLTwhRUxFTUVOVCAlc2FtcC5xbmFtZTsgICVzYW1wLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzYW1wLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzYW1wLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNhbXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzYW1wLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzYW1wLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHJvbmcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3Ryb25nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3Ryb25nLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3Ryb25nLnFuYW1lICAic3Ryb25nIiA+DQotPCFFTEVNRU5UICVzdHJvbmcucW5hbWU7ICAlc3Ryb25nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdHJvbmcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0cm9uZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdHJvbmcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdHJvbmcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN0cm9uZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdmFyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXZhci5lbGVtZW50O1sNCi08IUVOVElUWSAlIHZhci5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHZhci5xbmFtZSAgInZhciIgPg0KLTwhRUxFTUVOVCAldmFyLnFuYW1lOyAgJXZhci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdmFyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB2YXIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldmFyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldmFyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB2YXIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxwaHJhcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWJsa3N0cnVjdC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYmxrc3RydWN0Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtzdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3N0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBTdHJ1Y3R1cmFsDQotDQotICAgICAgICBkaXYsIHANCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHN0cnVjdHVyYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgZGl2LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRpdi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRpdi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBkaXYucW5hbWUgICJkaXYiID4NCi08IUVMRU1FTlQgJWRpdi5xbmFtZTsgICVkaXYuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRpdi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGl2LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRpdi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRpdi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGl2LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi08IUVOVElUWSAlIHAucW5hbWUgICJwIiA+DQotPCFFTEVNRU5UICVwLnFuYW1lOyAgJXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwaHJhcy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYmxrcGhyYXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWJsa3BocmFzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYmxrcGhyYXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQaHJhc2FsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcGhyYXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcGhyYXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUGhyYXNhbA0KLQ0KLSAgICAgICAgYWRkcmVzcywgYmxvY2txdW90ZSwgcHJlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwaHJhc2FsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGFkZHJlc3MuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWRkcmVzcy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFkZHJlc3MuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLTwhRU5USVRZICUgYWRkcmVzcy5xbmFtZSAgImFkZHJlc3MiID4NCi08IUVMRU1FTlQgJWFkZHJlc3MucW5hbWU7ICAlYWRkcmVzcy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWRkcmVzcy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWRkcmVzcy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhZGRyZXNzLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWRkcmVzcy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWRkcmVzcy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVibG9ja3F1b3RlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLnFuYW1lICAiYmxvY2txdW90ZSIgPg0KLTwhRUxFTUVOVCAlYmxvY2txdW90ZS5xbmFtZTsgICVibG9ja3F1b3RlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBibG9ja3F1b3RlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJsb2NrcXVvdGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVibG9ja3F1b3RlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNpdGUgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcHJlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXByZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICB8ICV0dC5xbmFtZTsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsNCi0gICAgICAlSTE4bi5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgIHwgJXNjcmlwdC5xbmFtZTsgfCAlbWFwLnFuYW1lOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7ICkqIg0KLT4NCi08IUVOVElUWSAlIHByZS5xbmFtZSAgInByZSIgPg0KLTwhRUxFTUVOVCAlcHJlLnFuYW1lOyAgJXByZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcHJlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwcmUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcHJlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcHJlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHhtbDpzcGFjZSAgICAoIHByZXNlcnZlICkgICAgICAgICAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0+DQotPCEtLSBlbmQgb2YgcHJlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uICBIZWFkaW5nIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZGluZy5jb250ZW50ICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotDQotPCFFTlRJVFkgJSBoMS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgxLnFuYW1lICAiaDEiID4NCi08IUVMRU1FTlQgJWgxLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgxLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgxLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMi5xbmFtZSAgImgyIiA+DQotPCFFTEVNRU5UICVoMi5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgzLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgzLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDMucW5hbWUgICJoMyIgPg0KLTwhRUxFTUVOVCAlaDMucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDMuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgzLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgzLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDMucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgzLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg0LnFuYW1lICAiaDQiID4NCi08IUVMRU1FTlQgJWg0LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNS5xbmFtZSAgImg1IiA+DQotPCFFTEVNRU5UICVoNS5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg2LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg2LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDYucW5hbWUgICJoNiIgPg0KLTwhRUxFTUVOVCAlaDYucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDYuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg2LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg2LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDYucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg2LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrcGhyYXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtdGV4dC0xLm1vZCAtLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBIeXBlcnRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaHlwZXJ0ZXh0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEh5cGVydGV4dA0KLQ0KLSAgICAgICAgYQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGFuY2hvciAoJ2EnKSBlbGVtZW50IHR5cGUsIHdoaWNoDQotICAgICBkZWZpbmVzIHRoZSBzb3VyY2Ugb2YgYSBoeXBlcnRleHQgbGluay4gVGhlIGRlc3RpbmF0aW9uDQotICAgICAob3IgbGluayAndGFyZ2V0JykgaXMgaWRlbnRpZmllZCB2aWEgaXRzICdpZCcgYXR0cmlidXRlDQotICAgICByYXRoZXIgdGhhbiB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBhcyB3YXMgdXNlZCBpbiBIVE1MLg0KLS0tPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uICBBbmNob3IgRWxlbWVudCAgLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYS5xbmFtZSAgImEiID4NCi08IUVMRU1FTlQgJWEucW5hbWU7ICAlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hhcnNldCAgICAgICVDaGFyc2V0LmRhdGF0eXBlOyAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBocmVmbGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaHlwZXJ0ZXh0LTEubW9kIC0tPg0KLQ0KLTwhLS0gTGlzdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBMaXN0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGlzdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMaXN0cw0KLQ0KLSAgICAgICAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpc3Qtb3JpZW50ZWQgZWxlbWVudCB0eXBlcw0KLSAgICAgYW5kIHRoZWlyIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBkbC5xbmFtZSAgImRsIiA+DQotPCFFTlRJVFkgJSBkdC5xbmFtZSAgImR0IiA+DQotPCFFTlRJVFkgJSBkZC5xbmFtZSAgImRkIiA+DQotPCFFTlRJVFkgJSBvbC5xbmFtZSAgIm9sIiA+DQotPCFFTlRJVFkgJSB1bC5xbmFtZSAgInVsIiA+DQotPCFFTlRJVFkgJSBsaS5xbmFtZSAgImxpIiA+DQotDQotPCEtLSBkbDogRGVmaW5pdGlvbiBMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRsLmNvbnRlbnQgICIoICVkdC5xbmFtZTsgfCAlZGQucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVkbC5xbmFtZTsgICVkbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBkdDogRGVmaW5pdGlvbiBUZXJtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGR0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlZHQucW5hbWU7ICAlZHQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGR0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWR0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZGQ6IERlZmluaXRpb24gRGVzY3JpcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZGQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVkZC5xbmFtZTsgICVkZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBvbDogT3JkZXJlZCBMaXN0IChudW1iZXJlZCBzdHlsZXMpIC4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9sLmNvbnRlbnQgICIoICVsaS5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJW9sLnFuYW1lOyAgJW9sLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb2wuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb2wuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygb2wuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHVsOiBVbm9yZGVyZWQgTGlzdCAoYnVsbGV0IHN0eWxlcykgLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHVsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXVsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdWwuY29udGVudCAgIiggJWxpLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAldWwucW5hbWU7ICAldWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHVsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB1bC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV1bC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXVsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB1bC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gbGk6IExpc3QgSXRlbSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVsaS5xbmFtZTsgICVsaS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxpLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxpLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGxpLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbGlzdC0xLm1vZCAtLT4NCi0NCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIEltYWdlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbWFnZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEltYWdlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbWFnZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJvdmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEltYWdlcw0KLQ0KLSAgICAgICAgaW1nDQotDQotICAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBtYXJrdXAgdG8gc3VwcG9ydCBiYXNpYyBpbWFnZSBlbWJlZGRpbmcuDQotLS0+DQotDQotPCEtLSBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHRleHQtb25seSBVQXMgYXMgd2VsbCBhcyB0byBtYWtlDQotICAgICBpbWFnZSBjb250ZW50IHVuZGVyc3RhbmRhYmxlIGFuZCBuYXZpZ2FibGUgdG8gdXNlcnMgb2YNCi0gICAgIG5vbi12aXN1YWwgVUFzLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24gd2l0aA0KLSAgICAgdGhlICdhbHQnIGF0dHJpYnV0ZSwgYW5kIGF2b2lkIHNlcnZlci1zaWRlIGltYWdlIG1hcHMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBpbWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW1nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW1nLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAiaW1nIiA+DQotPCFFTEVNRU5UICVpbWcucW5hbWU7ICAlaW1nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGltZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVpbWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBhbHQgICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGxvbmdkZXNjICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBpbWcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbWFnZS0xLm1vZCAtLT4NCi0NCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXBhcmFtLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFBhcmFtZXRlcnMgZm9yIEphdmEgQXBwbGV0cyBhbmQgRW1iZWRkZWQgT2JqZWN0cw0KLQ0KLSAgICAgICAgcGFyYW0NCi0NCi0gICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHBhcmFtIGVsZW1lbnQsDQotICAgICB1c2VkIHRvIHByb3ZpZGUgbmFtZWQgcHJvcGVydHkgdmFsdWVzIGZvciB0aGUgYXBwbGV0DQotICAgICBhbmQgb2JqZWN0IGVsZW1lbnRzLg0KLS0tPg0KLQ0KLTwhLS0gcGFyYW06IE5hbWVkIFByb3BlcnR5IFZhbHVlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgcGFyYW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcGFyYW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwYXJhbS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIHBhcmFtLnFuYW1lICAicGFyYW0iID4NCi08IUVMRU1FTlQgJXBhcmFtLnFuYW1lOyAgJXBhcmFtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwYXJhbS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcGFyYW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcGFyYW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwYXJhbS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWV0eXBlICAgICggZGF0YSB8IHJlZiB8IG9iamVjdCApICAnZGF0YScNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHBhcmFtLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtcGFyYW0tMS5tb2QgLS0+DQotDQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1vYmplY3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0cw0KLQ0KLSAgICAgICAgb2JqZWN0DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgb2JqZWN0IGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsIHVzZWQNCi0gICAgIHRvIGVtYmVkIGV4dGVybmFsIG9iamVjdHMgYXMgcGFydCBvZiBYSFRNTCBwYWdlcy4gSW4gdGhlIGRvY3VtZW50LA0KLSAgICAgcGxhY2UgcGFyYW0gZWxlbWVudHMgcHJpb3IgdG8gb3RoZXIgY29udGVudCB3aXRoaW4gdGhlIG9iamVjdCBlbGVtZW50Lg0KLQ0KLSAgICAgTm90ZSB0aGF0IHVzZSBvZiB0aGlzIG1vZHVsZSByZXF1aXJlcyBpbnN0YW50aWF0aW9uIG9mIHRoZSBQYXJhbQ0KLSAgICAgRWxlbWVudCBNb2R1bGUuDQotLS0+DQotDQotPCEtLSBvYmplY3Q6IEdlbmVyaWMgRW1iZWRkZWQgT2JqZWN0IC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvYmplY3QuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb2JqZWN0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb2JqZWN0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7IHwgJXBhcmFtLnFuYW1lOyApKiINCi0+DQotPCFFTlRJVFkgJSBvYmplY3QucW5hbWUgICJvYmplY3QiID4NCi08IUVMRU1FTlQgJW9iamVjdC5xbmFtZTsgICVvYmplY3QuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9iamVjdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb2JqZWN0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9iamVjdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9iamVjdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBkZWNsYXJlICAgICAgKCBkZWNsYXJlICkgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2xhc3NpZCAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNvZGViYXNlICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBkYXRhICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGNvZGV0eXBlICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBhcmNoaXZlICAgICAgJVVSSXMuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc3RhbmRieSAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlaWdodCAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICB3aWR0aCAgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygb2JqZWN0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtb2JqZWN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2ljIFRhYmxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtdGFibGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgQmFzaWMsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2ljIFRhYmxlcw0KLQ0KLSAgICAgICAgdGFibGUsIGNhcHRpb24sIHRyLCB0aCwgdGQNCi0NCi0gICAgIFRoaXMgdGFibGUgbW9kdWxlIGRlY2xhcmVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluaW5nDQotICAgICBhIHRhYmxlIG1vZGVsIGJhc2VkIGZ1bmRhbWVudGFsbHkgb24gZmVhdHVyZXMgZm91bmQgaW4gdGhlDQotICAgICB3aWRlbHktZGVwbG95ZWQgSFRNTCAzLjIgdGFibGUgbW9kZWwuICBXaGlsZSB0aGlzIG1vZHVsZQ0KLSAgICAgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCB0YWJsZSBhdHRyaWJ1dGVzIG9mIEhUTUwgMy4yDQotICAgICB0YWJsZXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGVzIGFsbA0KLSAgICAgSFRNTCA0IGNvbW1vbiBhbmQgbW9zdCBvZiB0aGUgSFRNTCA0IHRhYmxlIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgInRhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICAiY2FwdGlvbiIgPg0KLTwhRU5USVRZICUgdHIucW5hbWUgICJ0ciIgPg0KLTwhRU5USVRZICUgdGgucW5hbWUgICJ0aCIgPg0KLTwhRU5USVRZICUgdGQucW5hbWUgICJ0ZCIgPg0KLQ0KLTwhLS0gaG9yaXpvbnRhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbEhBbGlnbi5hdHRyaWINCi0gICAgICJhbGlnbiAgICAgICAgKCBsZWZ0DQotICAgICAgICAgICAgICAgICAgIHwgY2VudGVyDQotICAgICAgICAgICAgICAgICAgIHwgcmlnaHQgKSAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB2ZXJ0aWNhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbFZBbGlnbi5hdHRyaWINCi0gICAgICJ2YWxpZ24gICAgICAgKCB0b3ANCi0gICAgICAgICAgICAgICAgICAgfCBtaWRkbGUNCi0gICAgICAgICAgICAgICAgICAgfCBib3R0b20gKSAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHNjb3BlIGlzIHNpbXBsZXIgdGhhbiBheGVzIGF0dHJpYnV0ZSBmb3IgY29tbW9uIHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgc2NvcGUuYXR0cmliDQotICAgICAic2NvcGUgICAgICAgICggcm93IHwgY29sICApICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB0YWJsZTogVGFibGUgRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRhYmxlLmNvbnRlbnQNCi0gICAgICIoICVjYXB0aW9uLnFuYW1lOz8sICV0ci5xbmFtZTsrICkiDQotPg0KLTwhRUxFTUVOVCAldGFibGUucW5hbWU7ICAldGFibGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRhYmxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHN1bW1hcnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGFibGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGNhcHRpb246IFRhYmxlIENhcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNhcHRpb24uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVjYXB0aW9uLnFuYW1lOyAgJWNhcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNhcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRyOiBUYWJsZSBSb3cgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHIuY29udGVudCAgIiggJXRoLnFuYW1lOyB8ICV0ZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXRyLnFuYW1lOyAgJXRyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldHIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0ci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGg6IFRhYmxlIEhlYWRlciBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gdGggaXMgZm9yIGhlYWRlciBjZWxscywgdGQgZm9yIGRhdGEsDQotICAgICBidXQgZm9yIGNlbGxzIGFjdGluZyBhcyBib3RoIHVzZSB0ZA0KLS0tPg0KLQ0KLTwhRU5USVRZICUgdGguZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGguZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0aC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3dOb1RhYmxlLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAldGgucW5hbWU7ICAldGguY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRoLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRoLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFiYnIgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBheGlzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVhZGVycyAgICAgIElEUkVGUyAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICVzY29wZS5hdHRyaWI7DQotICAgICAgcm93c3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICBjb2xzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRoLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZDogVGFibGUgRGF0YSBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvd05vVGFibGUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICV0ZC5xbmFtZTsgICV0ZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWJiciAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGF4aXMgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWFkZXJzICAgICAgSURSRUZTICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgJXNjb3BlLmF0dHJpYjsNCi0gICAgICByb3dzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgIGNvbHNwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy10YWJsZS0xLm1vZCAtLT4NCi0NCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IAkNCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICIoICNQQ0RBVEEgfCAlb25ldmVudC5xbmFtZTt8ICVnZXR2YXIucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAiKCAjUENEQVRBIHwgJWdldHZhci5xbmFtZTsgKSoiPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4Ow0KLSAgICAgIHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNpYy1mb3JtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFNpbXBsaWZpZWQgRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNpYy1mb3JtLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIEJhc2ljLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iICANCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNpYyBGb3Jtcw0KLQ0KLSAgICAgVGhpcyBmb3JtcyBtb2R1bGUgaXMgYmFzZWQgb24gdGhlIEhUTUwgMy4yIGZvcm1zIG1vZGVsLCB3aXRoDQotICAgICB0aGUgV0FJLXJlcXVlc3RlZCBhZGRpdGlvbiBvZiB0aGUgbGFiZWwgZWxlbWVudC4gV2hpbGUgdGhpcyANCi0gICAgIG1vZHVsZSBlc3NlbnRpYWxseSBtaW1pY3MgdGhlIGNvbnRlbnQgbW9kZWwgYW5kIGF0dHJpYnV0ZXMgb2YgDQotICAgICBIVE1MIDMuMiBmb3JtcywgdGhlIGVsZW1lbnQgdHlwZXMgZGVjbGFyZWQgaGVyZWluIGFsc28gaW5jbHVkZQ0KLSAgICAgYWxsIEhUTUwgNCBjb21tb24gYXR0cmlidXRlcy4NCi0NCi0gICAgICAgIGZvcm0sIGxhYmVsLCBpbnB1dCwgc2VsZWN0LCBvcHRpb24sIHRleHRhcmVhDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSBmb3JtLnFuYW1lICAiZm9ybSIgPg0KLTwhRU5USVRZICUgbGFiZWwucW5hbWUgICJsYWJlbCIgPg0KLTwhRU5USVRZICUgaW5wdXQucW5hbWUgICJpbnB1dCIgPg0KLTwhRU5USVRZICUgc2VsZWN0LnFuYW1lICAic2VsZWN0IiA+DQotPCFFTlRJVFkgJSBvcHRpb24ucW5hbWUgICJvcHRpb24iID4NCi08IUVOVElUWSAlIHRleHRhcmVhLnFuYW1lICAidGV4dGFyZWEiID4NCi0NCi08IS0tICVCbGtOb0Zvcm0ubWl4OyBpbmNsdWRlcyBhbGwgbm9uLWZvcm0gYmxvY2sgZWxlbWVudHMsDQotICAgICBwbHVzICVNaXNjLmNsYXNzOw0KLS0tPg0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICB8ICV0YWJsZS5xbmFtZTsgDQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBmb3JtOiBGb3JtIEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWZvcm0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQNCi0gICAgICIoICVCbGtOb0Zvcm0ubWl4OyApKyINCi0+DQotPCFFTEVNRU5UICVmb3JtLnFuYW1lOyAgJWZvcm0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGZvcm0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGZvcm0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZm9ybS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWZvcm0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWN0aW9uICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBtZXRob2QgICAgICAgKCBnZXQgfCBwb3N0ICkgICAgICAgICAgICdnZXQnDQotICAgICAgZW5jdHlwZSAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJw0KLT4NCi08IS0tIGVuZCBvZiBmb3JtLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBsYWJlbDogRm9ybSBGaWVsZCBMYWJlbCBUZXh0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsYWJlbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsYWJlbC5lbGVtZW50O1sNCi08IS0tIEVhY2ggbGFiZWwgbXVzdCBub3QgY29udGFpbiBtb3JlIHRoYW4gT05FIGZpZWxkDQotLS0+DQotPCFFTlRJVFkgJSBsYWJlbC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIA0KLSAgICAgIHwgJWlucHV0LnFuYW1lOyB8ICVzZWxlY3QucW5hbWU7IHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUkxOG4uY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWxhYmVsLnFuYW1lOyAgJWxhYmVsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsYWJlbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGFiZWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGFiZWwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsYWJlbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBmb3IgICAgICAgICAgSURSRUYgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBsYWJlbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaW5wdXQ6IEZvcm0gQ29udHJvbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaW5wdXQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW5wdXQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpbnB1dC5jb250ZW50ICAiRU1QVFkiID4NCi08IUVMRU1FTlQgJWlucHV0LnFuYW1lOyAgJWlucHV0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbnB1dC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhLS0gQmFzaWMgRm9ybXMgcmVtb3ZlcyAnaW1hZ2UnIGFuZCAnZmlsZScgaW5wdXQgdHlwZXMuDQotLS0+DQotPCFFTlRJVFkgJSBpbnB1dC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbnB1dC5hdHRsaXN0O1sNCi08IUVOVElUWSAlIElucHV0VHlwZS5jbGFzcw0KLSAgICAgIiggdGV4dCB8IHBhc3N3b3JkIHwgY2hlY2tib3ggfCByYWRpbyANCi0gICAgICB8IHN1Ym1pdCB8IHJlc2V0IHwgaGlkZGVuICkiDQotPg0KLTwhLS0gYXR0cmlidXRlIG5hbWUgcmVxdWlyZWQgZm9yIGFsbCBidXQgc3VibWl0ICYgcmVzZXQNCi0tLT4NCi08IUFUVExJU1QgJWlucHV0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHR5cGUgICAgICAgICAlSW5wdXRUeXBlLmNsYXNzOyAgICAgICAgJ3RleHQnDQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjaGVja2VkICAgICAgKCBjaGVja2VkICkgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc2l6ZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIG1heGxlbmd0aCAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBzcmMgICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgaW5wdXQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHNlbGVjdDogT3B0aW9uIFNlbGVjdG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHNlbGVjdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzZWxlY3QuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAgIiggJW9wdGlvbi5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXNlbGVjdC5xbmFtZTsgICVzZWxlY3QuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNlbGVjdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2VsZWN0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNlbGVjdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNlbGVjdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc2l6ZSAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIG11bHRpcGxlICAgICAoIG11bHRpcGxlICkgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHNlbGVjdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gb3B0aW9uOiBTZWxlY3RhYmxlIENob2ljZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb3B0aW9uLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9wdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVMRU1FTlQgJW9wdGlvbi5xbmFtZTsgICVvcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9wdGlvbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb3B0aW9uLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9wdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9wdGlvbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzZWxlY3RlZCAgICAgKCBzZWxlY3RlZCApICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBvcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRleHRhcmVhOiBNdWx0aS1MaW5lIFRleHQgRmllbGQgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRleHRhcmVhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRleHRhcmVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTEVNRU5UICV0ZXh0YXJlYS5xbmFtZTsgICV0ZXh0YXJlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGV4dGFyZWEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRleHRhcmVhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRleHRhcmVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHJvd3MgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI1JFUVVJUkVEDQotICAgICAgY29scyAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjUkVRVUlSRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiB0ZXh0YXJlYS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2ljLWZvcm0tMS5tb2QgLS0+DQotDQotPCEtLSBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGluay5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxpbmstMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpbmsgZWxlbWVudA0KLQ0KLSAgICAgICAgbGluaw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpbmsgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHdoaWNoIGNvdWxkIChpbiBwcmluY2lwbGUpIGJlIHVzZWQgdG8gZGVmaW5lIGRvY3VtZW50LWxldmVsIGxpbmtzDQotICAgICB0byBleHRlcm5hbCByZXNvdXJjZXMgc3VjaCBhczoNCi0NCi0gICAgIGEpIGZvciBkb2N1bWVudCBzcGVjaWZpYyB0b29sYmFycy9tZW51cywgZS5nLiBzdGFydCwgY29udGVudHMsDQotICAgICAgICBwcmV2aW91cywgbmV4dCwgaW5kZXgsIGVuZCwgaGVscA0KLSAgICAgYikgdG8gbGluayB0byBhIHNlcGFyYXRlIHN0eWxlIHNoZWV0IChyZWw9InN0eWxlc2hlZXQiKQ0KLSAgICAgYykgdG8gbWFrZSBhIGxpbmsgdG8gYSBzY3JpcHQgKHJlbD0ic2NyaXB0IikNCi0gICAgIGQpIGJ5IHN0eWxlIHNoZWV0cyB0byBjb250cm9sIGhvdyBjb2xsZWN0aW9ucyBvZiBodG1sIG5vZGVzIGFyZQ0KLSAgICAgICAgcmVuZGVyZWQgaW50byBwcmludGVkIGRvY3VtZW50cw0KLSAgICAgZSkgdG8gbWFrZSBhIGxpbmsgdG8gYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50DQotICAgICAgICBlLmcuIGEgcG9zdHNjcmlwdCBvciBwZGYgdmVyc2lvbiAocmVsPSJhbHRlcm5hdGUiIG1lZGlhPSJwcmludCIpDQotLS0+DQotDQotPCEtLSBsaW5rOiBNZWRpYS1JbmRlcGVuZGVudCBMaW5rIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaW5rLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxpbmsuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaW5rLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgbGluay5xbmFtZSAgImxpbmsiID4NCi08IUVMRU1FTlQgJWxpbmsucW5hbWU7ICAlbGluay5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGluay5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGluay5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsaW5rLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGluay5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaGFyc2V0ICAgICAgJUNoYXJzZXQuZGF0YXR5cGU7ICAgICAgICNJTVBMSUVEDQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhyZWZsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGxpbmsuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saW5rLTEubW9kIC0tPg0KLQ0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tZXRhLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBNZXRhIEluZm9ybWF0aW9uDQotDQotICAgICAgICBtZXRhDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbWV0YSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBwcm92aWRlIGRlY2xhcmF0aXZlIGRvY3VtZW50IG1ldGFpbmZvcm1hdGlvbi4NCi0tLT4NCi0NCi08IS0tIG1ldGE6IEdlbmVyaWMgTWV0YWluZm9ybWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG1ldGEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbWV0YS5lbGVtZW50O1sNCi08IUVOVElUWSAlIG1ldGEuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBtZXRhLnFuYW1lICAibWV0YSIgPg0KLTwhRUxFTUVOVCAlbWV0YS5xbmFtZTsgICVtZXRhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBtZXRhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBtZXRhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW1ldGEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVtZXRhLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgIGh0dHAtZXF1aXYgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBuYW1lICAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY29udGVudCAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBzY2hlbWUgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG1ldGEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1tZXRhLTEubW9kIC0tPg0KLQ0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNlIGVsZW1lbnQNCi0NCi0gICAgICAgIGJhc2UNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBiYXNlIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIGRlZmluZSBhIGJhc2UgVVJJIGFnYWluc3Qgd2hpY2ggcmVsYXRpdmUgVVJJcyBpbiB0aGUNCi0gICAgIGRvY3VtZW50IHdpbGwgYmUgcmVzb2x2ZWQuDQotDQotICAgICBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgYWxzbyByZWRlY2xhcmVzIHRoZSBjb250ZW50IG1vZGVsIGZvcg0KLSAgICAgdGhlIGhlYWQgZWxlbWVudCB0byBpbmNsdWRlIHRoZSBiYXNlIGVsZW1lbnQuDQotLS0+DQotDQotPCEtLSBiYXNlOiBEb2N1bWVudCBCYXNlIFVSSSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBiYXNlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJhc2UuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiYXNlLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgYmFzZS5xbmFtZSAgImJhc2UiID4NCi08IUVMRU1FTlQgJWJhc2UucW5hbWU7ICAlYmFzZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmFzZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmFzZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViYXNlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmFzZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLTwhLS0gZW5kIG9mIGJhc2UuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuY29udGVudA0KLSAgICAiKCAlSGVhZE9wdHMubWl4OywNCi0gICAgICggKCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OywgKCAlYmFzZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICk/ICkNCi0gICAgIHwgKCAlYmFzZS5xbmFtZTssICVIZWFkT3B0cy5taXg7LCAoICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICkpKSkiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2UtMS5tb2QgLS0+DQotDQotPCEtLSBTdHlsZXNoZWV0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEb2N1bWVudCBTdHlsZSBTaGVldCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gU3R5bGUgU2hlZXRzDQotDQotICAgICAgICBzdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIHN0eWxlIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIGVtYmVkIHN0eWxlIHNoZWV0IGluZm9ybWF0aW9uIGluIHRoZSBkb2N1bWVudCBoZWFkIGVsZW1lbnQuDQotLS0+DQotDQotPCEtLSBzdHlsZTogU3R5bGUgU2hlZXQgSW5mb3JtYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdHlsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN0eWxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgc3R5bGUucW5hbWUgICJzdHlsZSIgPg0KLTwhRUxFTUVOVCAlc3R5bGUucW5hbWU7ICAlc3R5bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN0eWxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdHlsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN0eWxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJXRpdGxlLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjUkVRVUlSRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgeG1sOnNwYWNlICAgICggcHJlc2VydmUgKSAgICAgICAgICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLT4NCi08IS0tIGVuZCBvZiBzdHlsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN0eWxlLTEubW9kIC0tPg0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIGh0bWwuY29udGVudCAiKCAlaGVhZC5xbmFtZTssICVUZW1wbGF0ZS5taXg7LCAoJWJvZHkucW5hbWU7IHwgKCVjYXJkLnFuYW1lOyspKSkiPg0KLTwhRU5USVRZICUgYm9keS5jb250ZW50ICIoJUNhcmRCb2R5Lm1peDspIj4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTdHJ1Y3R1cmUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZQ0KLQ0KLSAgICAgICAgdGl0bGUsIGhlYWQsIGJvZHksIGh0bWwNCi0NCi0gICAgIFRoZSBTdHJ1Y3R1cmUgTW9kdWxlIGRlZmluZXMgdGhlIG1ham9yIHN0cnVjdHVyYWwgZWxlbWVudHMgYW5kDQotICAgICB0aGVpciBhdHRyaWJ1dGVzLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoZSBjb250ZW50IG1vZGVsIG9mIHRoZSBoZWFkIGVsZW1lbnQgdHlwZSBpcyByZWRlY2xhcmVkDQotICAgICB3aGVuIHRoZSBCYXNlIE1vZHVsZSBpcyBpbmNsdWRlZCBpbiB0aGUgRFRELg0KLQ0KLSAgICAgVGhlIHBhcmFtZXRlciBlbnRpdHkgY29udGFpbmluZyB0aGUgWE1MIG5hbWVzcGFjZSBVUkkgdmFsdWUgdXNlZA0KLSAgICAgZm9yIFhIVE1MIGlzICclWEhUTUwueG1sbnM7JywgZGVmaW5lZCBpbiB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZS4NCi0tLT4NCi0NCi08IS0tIHRpdGxlOiBEb2N1bWVudCBUaXRsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRoZSB0aXRsZSBlbGVtZW50IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZsb3cgb2YgdGV4dC4NCi0gICAgIEl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGZvciBleGFtcGxlIGFzIHRoZSBwYWdlIGhlYWRlciBvcg0KLSAgICAgd2luZG93IHRpdGxlLiBFeGFjdGx5IG9uZSB0aXRsZSBpcyByZXF1aXJlZCBwZXIgZG9jdW1lbnQuDQotLS0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRpdGxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICJ0aXRsZSIgPg0KLTwhRUxFTUVOVCAldGl0bGUucW5hbWU7ICAldGl0bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRpdGxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRpdGxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0aXRsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaGVhZDogRG9jdW1lbnQgSGVhZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoZWFkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaGVhZC5jb250ZW50DQotICAgICIoICVIZWFkT3B0cy5taXg7LCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApIg0KLT4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICJoZWFkIiA+DQotPCFFTEVNRU5UICVoZWFkLnFuYW1lOyAgJWhlYWQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhlYWQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaGVhZC5hdHRsaXN0O1sNCi08IS0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMNCi0tLT4NCi08IUVOVElUWSAlIHByb2ZpbGUuYXR0cmliDQotICAgICAicHJvZmlsZSAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAnJVhIVE1MLnByb2ZpbGU7JyINCi0+DQotDQotPCFBVFRMSVNUICVoZWFkLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgICVwcm9maWxlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaGVhZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gYm9keTogRG9jdW1lbnQgQm9keSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYm9keS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVib2R5LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYm9keS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAiYm9keSIgPg0KLTwhRUxFTUVOVCAlYm9keS5xbmFtZTsgICVib2R5LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBib2R5LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBib2R5LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJvZHkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVib2R5LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBib2R5LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBodG1sOiBYSFRNTCBEb2N1bWVudCBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBodG1sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWh0bWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgICIoICVoZWFkLnFuYW1lOywgJWJvZHkucW5hbWU7ICkiID4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICJodG1sIiA+DQotPCFFTEVNRU5UICVodG1sLnFuYW1lOyAgJWh0bWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGh0bWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGh0bWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaHRtbC5hdHRsaXN0O1sNCi08IS0tIHZlcnNpb24gYXR0cmlidXRlIHZhbHVlIGRlZmluZWQgaW4gZHJpdmVyDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uLmF0dHJpYg0KLSAgICAgInZlcnNpb24gICAgICAlRlBJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwudmVyc2lvbjsnIg0KLT4NCi0NCi08IS0tIHNlZSB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZSBmb3IgaW5mb3JtYXRpb24NCi0gICAgIG9uIGhvdyB0byBleHRlbmQgWEhUTUwgdXNpbmcgWE1MIG5hbWVzcGFjZXMNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlWEhUTUwudmVyc2lvbi5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBodG1sLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3RydWN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcHJlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGhyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwcmVzZW50YXRpb25hbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBoci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoci5lbGVtZW50O1sNCi08IUVOVElUWSAlIGhyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICJociIgPg0KLTwhRUxFTUVOVCAlaHIucW5hbWU7ICAlaHIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWhyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3ByZXMtMS5tb2QgLS0+DQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlXTUwgRGVjbGFyYXRpb25zDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFNwZWNpYWwgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1zcGVjaWFsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXNwZWNpYWwtMS5tb2QiPg0KLTwhLS0gV01MIDIuMCBTcGVjaWFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLXNwZWNpYWwtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIFNwZWNpYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtc3BlY2lhbC0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgY29udGFpbnMgZGVjbGFyYXRpb25zIG9mIHRoZSBmb2xsb3dpbmcgV01MIGVsZW1lbnRzLiANCi0JDQotCQljYXJkLCBkbywgb25ldmVudCwgYWNjZXNzLCBnbywgcHJldiwNCi0JCXJlZnJlc2gsIG5vb3AsICBwb3N0ZmllbGQsIHNldHZhciwgZ2V0dmFyDQotCQl0aW1lciwgYW5jaG9yDQotCQkNCi0JSXQgYWxzbyBjb250YWlucyBXTUwgZXh0ZW5zaW9ucyBvZiBYSFRNTCBlbGVtZW50cy4gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgR2xvYmFsIGF0dHJpYnV0ZXMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBFdmVudCBhdHRyaWJ1dGVzDQotCQ0KLQlUaGVzZSBhcmUgdXNlZCBvbiB0aGUgWEhUTUwgYm9keSBhbmQgaHRtbCBlbGVtZW50cy4NCi0JVGhlIHNhbWUgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGUgb24gdGhlIFdNTCBjYXJkIGVsZW1lbnQsIGJ1dA0KLQl3aXRob3V0IG5hbWVzcGFjZSBwcmVmaXguDQotLS0+DQotPCFFTlRJVFkgJSBXTUwuZXZlbnQuYXR0cmliICIlYXR0Lm9uZW50ZXJmb3J3YXJkLnFuYW1lOyBDREFUQQkjSU1QTElFRA0KLSAlYXR0Lm9uZW50ZXJiYWNrd2FyZC5xbmFtZTsgQ0RBVEEJI0lNUExJRUQNCi0gJWF0dC5vbnRpbWVyLnFuYW1lOyBDREFUQQkjSU1QTElFRCI+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgRWxlbWVudHMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCUNhcmRzIA0KLQkNCi0JVXNlIHNhbWUgY29udGVudCBtb2RlbCBhcyB0aGUgSFRNTCBib2R5IGVsZW1lbnQNCi0tLT4NCi08IUVMRU1FTlQgJWNhcmQucW5hbWU7ICVDYXJkQm9keS5taXg7Pg0KLTwhQVRUTElTVCAlY2FyZC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQluZXdjb250ZXh0ICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCW9uZW50ZXJmb3J3YXJkIENEQVRBICNJTVBMSUVEDQotCW9uZW50ZXJiYWNrd2FyZCBDREFUQSAjSU1QTElFRA0KLQlvbnRpbWVyIENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCURvIA0KLS0tPg0KLTwhRUxFTUVOVCAlZG8ucW5hbWU7ICglVGFza3MuY2xhc3M7KT4NCi08IUFUVExJU1QgJWRvLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotICAJdHlwZSAgICAgICAgICAgICBDREFUQSAgICAgICAjUkVRVUlSRUQNCi0gIAlsYWJlbCAgICAgICAgICAgICBDREFUQSAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlPbmV2ZW50IA0KLS0tPg0KLTwhRUxFTUVOVCAlb25ldmVudC5xbmFtZTsgJVRhc2tzLmNsYXNzOz4NCi08IUFUVExJU1QgJW9uZXZlbnQucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCXR5cGUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUFjY2VzcyANCi0tLT4NCi08IUVMRU1FTlQgJWFjY2Vzcy5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVhY2Nlc3MucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCWRvbWFpbiBDREFUQSAjSU1QTElFRA0KLQlwYXRoIENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCUdvIA0KLS0tPg0KLTwhRU5USVRZICUgY2FjaGUtY29udHJvbCAnKG5vLWNhY2hlKSc+DQotPCFFTEVNRU5UICVnby5xbmFtZTsgKCVwb3N0ZmllbGQucW5hbWU7IHwgJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJWdvLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQlocmVmICVVUkkuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLQlzZW5kcmVmZXJlciAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQl0eXBlICVDb250ZW50VHlwZS5kYXRhdHlwZTsgI0lNUExJRUQNCi0JbWV0aG9kIChwb3N0IHwgZ2V0KSAiZ2V0Ig0KLQllbmN0eXBlICVDb250ZW50VHlwZS5kYXRhdHlwZTsgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCINCi0JYWNjZXB0LWNoYXJzZXQgQ0RBVEEgI0lNUExJRUQNCi0JY2FjaGUtY29udHJvbCAlY2FjaGUtY29udHJvbDsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JUHJldiANCi0tLT4NCi08IUVMRU1FTlQgJXByZXYucW5hbWU7ICglc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlcHJldi5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JUmVmcmVzaCANCi0tLT4NCi08IUVMRU1FTlQgJXJlZnJlc2gucW5hbWU7ICglc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlcmVmcmVzaC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JTm9vcCANCi0tLT4NCi08IUVMRU1FTlQgJW5vb3AucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlbm9vcC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JUG9zdGZpZWxkIA0KLS0tPg0KLTwhRUxFTUVOVCAlcG9zdGZpZWxkLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXBvc3RmaWVsZC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCVNldHZhciANCi0tLT4NCi08IUVMRU1FTlQgJXNldHZhci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVzZXR2YXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlHZXR2YXINCi0tLT4NCi08IUVMRU1FTlQgJWdldHZhci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVnZXR2YXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCWNvbnZlcnNpb24gKGVzY2FwZSB8IG5vZXNjIHwgdW5lc2MpICJub2VzYyINCi0+DQotPCEtLSANCi0JVGltZXIgIA0KLS0tPg0KLTwhRUxFTUVOVCAldGltZXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAldGltZXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgTk1UT0tFTiAjSU1QTElFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JQW5jaG9yIA0KLQkNCi0JU2FtZSBjb250ZW50IG1vZGVsIGFzIEhUTUwgYSBlbGVtZW50LCBidXQgZXh0ZW5kZWQgd2l0aCBXTUwgdGFza3MuDQotLS0+DQotPCFFTEVNRU5UICVhbmNob3IucW5hbWU7ICgjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgfCAlVGFza3Mtbm9ub29wLmNsYXNzOykqPg0KLTwhQVRUTElTVCAlYW5jaG9yLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCWFjY2Vzc2tleSBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBleHRlbnNpb25zIG9mIFhIVE1MIGVsZW1lbnRzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlzZWxlY3QgDQotCQ0KLQkqV01MIGluYW1lLCBpdmFsdWUsIHZhbHVlLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJXNlbGVjdC5xbmFtZTsNCi0JJWF0dC5pbmFtZS5xbmFtZTsgTk1UT0tFTiAjSU1QTElFRA0KLQklYXR0LnZhbHVlLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0Lml2YWx1ZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbnB1dCANCi0JDQotCSpXTUwgZm9ybWF0LCBlbXB0eW9rLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJWlucHV0LnFuYW1lOw0KLQklYXR0LmZvcm1hdC5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5lbXB0eW9rLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQl0ZXh0YXJlYQ0KLQkNCi0JKldNTCBmb3JtYXQsIGVtcHR5b2ssIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IGF0dHJpYnV0ZSAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJXRleHRhcmVhLnFuYW1lOw0KLQklYXR0LmZvcm1hdC5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5lbXB0eW9rLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlvcHRpb24NCi0JDQotCSpXTUwgb25waWNrIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlb3B0aW9uLnFuYW1lOw0KLQklYXR0Lm9ucGljay5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW1nIA0KLQ0KLQkqV01MIGxvY2Fsc3JjIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCBpbWcNCi0JJWF0dC5sb2NhbHNyYy5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC50eXBlLnFuYW1lOyAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCXRhYmxlIA0KLQkNCi0JKldNTCBjb2x1bW5zIGF0dHJpYnV0ZQ0KLQkNCi0tLT4NCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLQklYXR0LmNvbHVtbnMucW5hbWU7ICVOdW1iZXIuZGF0YXR5cGU7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWJvZHkgDQotCQ0KLQkqV01MIG5ld2NvbnRleHQgDQotCSpXTUwgZXZlbnQgYXR0cmlidXRlcw0KLS0tPg0KLTwhQVRUTElTVCAlYm9keS5xbmFtZTsNCi0JJWF0dC5uZXdjb250ZXh0LnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQklV01MLmV2ZW50LmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCWh0bWwgDQotCQ0KLQkqRGVjbGFyYXRpb24gb2YgV01MIG5hbWVzcGFjZSB3aXRoIHByZWZpeAkNCi0JKldNTCBldmVudCBhdHRyaWJ1dGVzDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLQklV01MLnhtbG5zLmV4dHJhLmF0dHJpYjsgDQotCSVXTUwuZXZlbnQuYXR0cmliOyANCi0+DQotDQotPCEtLSBEZXByZWNhdGVkIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtZGVwcmVjYXRlZC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZGVwcmVjYXRlZC0xLm1vZCI+DQotPCEtLSBXTUwgRGVwcmVjYXRlZCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1kZXByZWNhdGVkLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBEZXByZWNhdGVkIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLWRlcHJlY2F0ZWQtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlcHJlY2F0ZWQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuDQotCQ0KLQkJQXR0cmlidXRlczogV01MIG1vZGUsIFhIVE1MIGFsaWduLCBYSFRNTCB2c3BhY2UsIFhIVE1MIGhzcGFjZQ0KLQkJDQotCQlFbGVtZW50czogdSwgYiwgYmlnLCBpLCBzbWFsbCANCi0JCQ0KLS0tPg0KLTwhLS0gDQotCXAgDQotCQ0KLQkqV01MIG1vZGUNCi0JKlhIVE1MIGFsaWduDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFBVFRMSVNUICVwLnFuYW1lOw0KLQklYXR0Lm1vZGUucW5hbWU7ICh3cmFwIHwgbm93cmFwKSAjSU1QTElFRA0KLQlhbGlnbiAobGVmdCB8IHJpZ2h0IHwgY2VudGVyKSAibGVmdCINCi0+DQotPCEtLSANCi0JdGFibGUgDQotCQ0KLQkqV01MIGFsaWduIA0KLQkNCi0JTm90ZTogVGhlIFdNTCBhbGlnbiBhdHRyaWJ1dGUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBYSFRNTCBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lLg0KLS0tPg0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotCSVhdHQuYWxpZ24ucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWltZyANCi0JDQotCSpYSFRNTCB2c3BhY2UsIGhzcGFjZSwgYWxpZ24NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUFUVExJU1QgaW1nDQotCXZzcGFjZSBDREFUQSAiMCINCi0JaHNwYWNlIENEQVRBICIwIg0KLQlhbGlnbiAodG9wIHwgbWlkZGxlIHwgYm90dG9tKSAiYm90dG9tIg0KLT4NCi08IS0tIA0KLQlJbmxpbmUgUHJlc2VudGF0aW9uIA0KLQkNCi0JKlhIVE1MICBiLCBiaWcsIGksIHNtYWxsCQ0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWlubHByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotCQkieGh0bWwtaW5scHJlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHByZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGIsIGJpZywgaSwgc21hbGwsIHN1Yiwgc3VwLCB0dA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgaW5saW5lLWxldmVsIHByZXNlbnRhdGlvbmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAiYiIgPg0KLTwhRUxFTUVOVCAlYi5xbmFtZTsgICViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBiLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiaWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmlnLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmlnLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAiYmlnIiA+DQotPCFFTEVNRU5UICViaWcucW5hbWU7ICAlYmlnLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiaWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJpZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViaWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViaWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJpZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGkucW5hbWUgICJpIiA+DQotPCFFTEVNRU5UICVpLnFuYW1lOyAgJWkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc21hbGwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzbWFsbC5xbmFtZSAgInNtYWxsIiA+DQotPCFFTEVNRU5UICVzbWFsbC5xbmFtZTsgICVzbWFsbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc21hbGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc21hbGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNtYWxsLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3ViLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3ViLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAic3ViIiA+DQotPCFFTEVNRU5UICVzdWIucW5hbWU7ICAlc3ViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdWIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdWIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN1Yi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN1cC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN1cC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgInN1cCIgPg0KLTwhRUxFTUVOVCAlc3VwLnFuYW1lOyAgJXN1cC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3VwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3VwLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3VwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdXAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgInR0IiA+DQotPCFFTEVNRU5UICV0dC5xbmFtZTsgICV0dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQl1DQotDQotCVRoaXMgZWxlbWVudCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBYSFRNTCBpbmxpbmUgcHJlc2VudGF0aW9uIG1vZHVsZS4NCi0JSXQgd2FzIGRlcHJlY2F0ZWQgYWxyZWFkeSBpbiBIVE1MIDQuMC4NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUVOVElUWSAlIHUuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIj4NCi08IUVOVElUWSAlIHUucW5hbWUgInUiPg0KLTwhRUxFTUVOVCAldS5xbmFtZTsgJXUuY29udGVudDs+DQotPCFBVFRMSVNUICV1LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCW1ldGEgDQotCQ0KLQkqV01MIGZvcnVhIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlbWV0YS5xbmFtZTsNCi0JJWF0dC5mb3J1YS5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICJ0cnVlIg0KLT4NCi08IS0tDQotCWh0bWwNCi0JDQotCSpXTUwgdXNlLXhtbC1mcmFnbWVudCBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotCSVhdHQudXNleG1sZnJhZ21lbnQucW5hbWU7IAklQm9vbGVhbi5kYXRhdHlwZTsgInRydWUiDQotPg0KLQ0KLQ0KLQ0KLTwhLS0gZW5kIG9mIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLW1vZGVsLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtbW9kZWwtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZDc2MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtbW9kZWwtMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotPCEtLSBXTUwgMi4wIERvY3VtZW50IE1vZGVsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sMjAtbW9kZWwtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIDIuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwyMC1tb2RlbC0xLm1vZCINCi0gICAgICANCi0gICAgIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgZ3JvdXBpbmdzIG9mIGVsZW1lbnRzIHRoYXQgbWFrZSB1cA0KLSAgICAgY29tbW9uIGNvbnRlbnQgbW9kZWxzIGZvciBXTUwgYW5kIFhIVE1MIGVsZW1lbnRzLg0KLQ0KLSAgICAgVGhyZWUgYmFzaWMgY29udGVudCBtb2RlbHMgYXJlIGRlY2xhcmVkOg0KLQ0KLSAgICAgICAgICVJbmxpbmUubWl4OyAgY2hhcmFjdGVyLWxldmVsIGVsZW1lbnRzDQotICAgICAgICAgJUJsb2NrLm1peDsgICBibG9jay1saWtlIGVsZW1lbnRzLCBlZy4sIHBhcmFncmFwaHMgYW5kIGxpc3RzDQotICAgICAgICAgJUZsb3cubWl4OyAgICBhbnkgYmxvY2sgb3IgaW5saW5lIGVsZW1lbnRzDQotDQotICAgICBBbnkgcGFyYW1ldGVyIGVudGl0aWVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlIG1heSBiZSB1c2VkDQotICAgICB0byBjcmVhdGUgZWxlbWVudCBjb250ZW50IG1vZGVscywgYnV0IHRoZSBhYm92ZSB0aHJlZSBhcmUNCi0gICAgIGNvbnNpZGVyZWQgJ2dsb2JhbCcgKGluc29mYXIgYXMgdGhhdCB0ZXJtIGFwcGxpZXMgaGVyZSkuDQotICAgICANCi0gICAgICAgIAkgICAgIA0KLS0tPg0KLTwhLS0gDQotCU9wdGlvbmFsIEVsZW1lbnRzIGluIGhlYWQgIA0KLS0tPg0KLTwhRU5USVRZICUgSGVhZE9wdHMubWl4ICIoICVtZXRhLnFuYW1lOyANCi0JCXwgJWxpbmsucW5hbWU7IA0KLQkJfCAlc3R5bGUucW5hbWU7IA0KLQkJfCAlb2JqZWN0LnFuYW1lOyANCi0JCXwgJWFjY2Vzcy5xbmFtZTspKiI+DQotPCEtLSANCi0JVGFzayBlbGVtZW50cw0KLQ0KLQlVc2VkIGZvciB0aGUgV01MIGRvIGFuZCBvbmV2ZW50IGVsZW1lbnRzDQotLS0+DQotPCFFTlRJVFkgJSBUYXNrcy5jbGFzcyAiKCVnby5xbmFtZTsgDQotCQl8ICVwcmV2LnFuYW1lOyANCi0JCXwgJW5vb3AucW5hbWU7IA0KLQkJfCAlcmVmcmVzaC5xbmFtZTspIj4NCi08IS0tIA0KLQlUYXNrcyB3aXRob3V0IG5vb3AgZWxlbWVudA0KLQ0KLQlVc2VkIGZvciB0aGUgV01MIGFuY2hvcg0KLS0tPg0KLTwhRU5USVRZICUgVGFza3Mtbm9ub29wLmNsYXNzICIlZ28ucW5hbWU7IA0KLQkJfCAlcHJldi5xbmFtZTsgDQotCQl8ICVyZWZyZXNoLnFuYW1lOyI+DQotPCEtLQ0KLQlEbyBlbGVtZW50DQotLS0+DQotPCFFTlRJVFkgJSBEby5jbGFzcyAiJWRvLnFuYW1lOyI+DQotPCEtLSANCi0JTWlzY2VsbGFuZW91cyBFbGVtZW50cyAgDQotCQ0KLQlUaGlzIGlzIG5vdCB1c2VkIGZvciBhbnl0aGluZyByaWdodCBub3cuIA0KLS0tPg0KLTwhRU5USVRZICUgTWlzYy5jbGFzcyAiIj4NCi08IS0tIA0KLQlJbmxpbmUgRWxlbWVudHMgIA0KLS0tPg0KLTwhRU5USVRZICUgSW5sU3RydWN0LmNsYXNzICIlYnIucW5hbWU7IA0KLQl8ICVzcGFuLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxQaHJhcy5jbGFzcyAifCAlZW0ucW5hbWU7IA0KLQl8ICVzdHJvbmcucW5hbWU7IA0KLQl8ICVkZm4ucW5hbWU7IA0KLQl8ICVjb2RlLnFuYW1lOyANCi0JfCAlc2FtcC5xbmFtZTsgDQotCXwgJWtiZC5xbmFtZTsgDQotCXwgJXZhci5xbmFtZTsgDQotCXwgJWNpdGUucW5hbWU7IA0KLSAgICAgCXwgJWFiYnIucW5hbWU7IA0KLQl8ICVhY3JvbnltLnFuYW1lOyANCi0JfCAlcS5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sUHJlcy5jbGFzcyAifCAlaS5xbmFtZTsgDQotCXwgJWIucW5hbWU7IA0KLQl8ICViaWcucW5hbWU7IA0KLQl8ICVzbWFsbC5xbmFtZTsNCi0JfCAldS5xbmFtZTsiPg0KLTwhRU5USVRZICUgSTE4bi5jbGFzcyAiIj4NCi08IUVOVElUWSAlIEFuY2hvci5jbGFzcyAifCAlYS5xbmFtZTsgDQotCXwgJWFuY2hvci5xbmFtZTsgfCAlZG8ucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFNwZWNpYWwuY2xhc3MgInwgJWltZy5xbmFtZTsgDQotCSB8ICVvYmplY3QucW5hbWU7IA0KLQl8ICVnZXR2YXIucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubEZvcm0uY2xhc3MgInwgJWlucHV0LnFuYW1lOyANCi0JIHwgJXNlbGVjdC5xbmFtZTsgDQotCSB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICAgICB8ICVsYWJlbC5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5saW5lLmV4dHJhICIiPg0KLTwhRU5USVRZICUgSW5saW5lLmNsYXNzICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ij4NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLmNsYXNzICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5taXggIiVJbmxOb0FuY2hvci5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgSW5saW5lLm1peCAiJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gDQotCUJsb2NrIEVsZW1lbnRzICANCi0tLT4NCi08IUVOVElUWSAlIEhlYWRpbmcuY2xhc3MgIiVoMS5xbmFtZTsgDQotCXwgJWgyLnFuYW1lOyANCi0JfCAlaDMucW5hbWU7IA0KLQl8ICVoNC5xbmFtZTsgDQotCXwgJWg1LnFuYW1lOyANCi0JfCAlaDYucW5hbWU7Ij4NCi08IUVOVElUWSAlIExpc3QuY2xhc3MgIiV1bC5xbmFtZTsgDQotCXwgJW9sLnFuYW1lOyANCi0JfCAlZGwucW5hbWU7Ij4NCi08IUVOVElUWSAlIFRhYmxlLmNsYXNzICJ8ICV0YWJsZS5xbmFtZTsiPg0KLTwhRU5USVRZICUgRm9ybS5jbGFzcyAifCAlZm9ybS5xbmFtZTsiPg0KLTwhRU5USVRZICUgRmllbGRzZXQuY2xhc3MgInwgJWZpZWxkc2V0LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtTdHJ1Y3QuY2xhc3MgIiVwLnFuYW1lOyANCi0JfCAlZGl2LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtQaHJhcy5jbGFzcyAifCAlcHJlLnFuYW1lOyANCi0JIHwgJWJsb2NrcXVvdGUucW5hbWU7IA0KLQkgfCAlYWRkcmVzcy5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrUHJlcy5jbGFzcyAifCAlaHIucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1NwZWNpYWwuY2xhc3MgIiVUYWJsZS5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlRmllbGRzZXQuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEJsb2NrLmV4dHJhICIiPg0KLTwhRU5USVRZICUgQmxvY2suY2xhc3MgIiVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLQkgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJUJsa1NwZWNpYWwuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBCbG9jay5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7ICAgICANCi0gICAgICB8ICVEby5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgIHwgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gDQotCUFsbCBDb250ZW50IEVsZW1lbnRzICANCi0tLT4NCi08IS0tIA0KLQlkZWNsYXJlcyBhbGwgY29udGVudCBleGNlcHQgdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBGbG93Tm9UYWJsZS5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBGbG93Lm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIAkNCi0JVGVtcGxhdGUgbGV2ZWwgZWxlbWVudHMgDQotLS0+DQotPCFFTlRJVFkgJSBUZW1wbGF0ZS5taXggIiggJW9uZXZlbnQucW5hbWU7KSoiPg0KLTwhLS0gDQotCUNvbnRlbnQgbW9kZWwgb2YgdGhlIFdNTCBjYXJkIGFuZCBYSFRNTCBib2R5IGVsZW1lbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDYXJkQm9keS5taXggIiglb25ldmVudC5xbmFtZTsqLCAldGltZXIucW5hbWU7PywgICggJUJsb2NrLm1peDsgKSspIj4NCi08IS0tIGVuZCBvZiB3bWwyMC1tb2RlbC0xLm1vZCAtLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNmY4ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLTwhLS0gV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLQlUaGlzIGlzIHRoZSBXTUwgMi4wIERURCBkcml2ZXIgZmlsZS4gUGxlYXNlIHVzZSB0aGlzIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoNCi0NCi0gICAgICAgICAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgCSAgICAgICAgICANCi0gICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFdNTCAyLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgICAgICB4bWxuczp3bWw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlWZXJzaW9uLCBYTUwgTmFtZXNwYWNlcywgYW5kIHByb2ZpbGUgaW5mb3JtYXRpb24gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCVZhbHVlIG9mIFhIVE1MIHZlcnNpb24gYXR0cmlidXRlIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiI+DQotPCEtLSANCi0JVmFsdWUgb2YgWEhUTUwgcHJvZmlsZSBhdHRyaWJ1dGUNCi0JDQotCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICIiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJTW9kdWxhcmlzYXRpb24gZnJhbWV3b3JrIHNldHVwDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IUVOVElUWSAlIHdtbC1mcmFtZXdvcmsubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWZyYW1ld29yay0xLm1vZCI+DQotJXdtbC1mcmFtZXdvcmsubW9kOw0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJWEhUTUwgbW9kdWxlcyANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgDQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgDQotCXwgJWdldHZhci5xbmFtZTsNCi0JfCAlaW5wdXQucW5hbWU7fCAlc2VsZWN0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHAuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7IHwgJXRhYmxlLnFuYW1lOyB8ICVmaWVsZHNldC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCI+DQotJXhodG1sLXRleHQubW9kOw0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiPg0KLSV4aHRtbC1oeXBlcnRleHQubW9kOw0KLTwhLS0gTGlzdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIj4NCi0leGh0bWwtbGlzdC5tb2Q7DQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIj4NCi0leGh0bWwtaW1hZ2UubW9kOw0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiPg0KLSV4aHRtbC1wYXJhbS5tb2Q7DQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiPg0KLSV4aHRtbC1vYmplY3QubW9kOw0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCI+DQotJXhodG1sLXRhYmxlLm1vZDsNCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IAkNCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICIoICNQQ0RBVEEgfCAlb25ldmVudC5xbmFtZTt8ICVnZXR2YXIucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAiKCAjUENEQVRBIHwgJWdldHZhci5xbmFtZTsgKSoiPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4Ow0KLSAgICAgIHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNpYy1mb3JtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiPg0KLSV4aHRtbC1iYXNpYy1mb3JtLm1vZDsNCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIj4NCi0leGh0bWwtbGluay5tb2Q7DQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCI+DQotJXhodG1sLW1ldGEubW9kOw0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiPg0KLSV4aHRtbC1iYXNlLm1vZDsNCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1zdHlsZS5tb2Q7DQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICIoICVoZWFkLnFuYW1lOywgJVRlbXBsYXRlLm1peDssICglYm9keS5xbmFtZTsgfCAoJWNhcmQucW5hbWU7KykpKSI+DQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQgIiglQ2FyZEJvZHkubWl4OykiPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiPg0KLSV4aHRtbC1zdHJ1Y3QubW9kOw0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi0leGh0bWwtYmxrcHJlcy5tb2Q7DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlXTUwgRGVjbGFyYXRpb25zDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFNwZWNpYWwgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1zcGVjaWFsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXNwZWNpYWwtMS5tb2QiPg0KLSV3bWwtc3BlY2lhbC5tb2Q7DQotPCEtLSBEZXByZWNhdGVkIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtZGVwcmVjYXRlZC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZGVwcmVjYXRlZC0xLm1vZCI+DQotJXdtbC1kZXByZWNhdGVkLm1vZDsNCi08IS0tIGVuZCBvZiBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93dGEtd21sMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd3RhLXdtbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwZjdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93dGEtd21sMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPCEtLQ0KLVdpcmVsZXNzIFRlbGVwaG9ueSBBcHBsaWNhdGlvbnMgV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXVEEtV01MKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotV1RBLVdNTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPCFET0NUWVBFIHd0YS13bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdUQS1XTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93dGEtd21sMTIuZHRkIj4NCi08d3RhLXdtbD4NCi0uLi4NCi08L3d0YS13bWw+DQotLS0+DQotDQotPCFFTlRJVFkgJSB3bWwtZHRkIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwxMi5kdGQiPg0KLQ0KLSV3bWwtZHRkOw0KLQ0KLTwhRUxFTUVOVCB3dGEtd21sICggaGVhZD8sIHRlbXBsYXRlPywgY2FyZCsgKT4NCi08IUFUVExJU1Qgd3RhLXdtbA0KLQl4bWw6bGFuZwkJTk1UT0tFTgkjSU1QTElFRA0KLQklY29yZWF0dHJzOw0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLWZsYXQuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTNlNzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLWZsYXQuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzIxNiArMCwwIEBACi08IS0tIFhIVE1MIE1vYmlsZSAxLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tb2JpbGUxMC5kdGQgLS0+DQotPCEtLSANCi0gICAgIFRoaXMgaXMgWEhUTUwgTW9iaWxlIHByb2ZpbGUsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIA0KLSAgICAgCUBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0gICAgDQotLS0+DQotPCEtLSBUaGlzIGlzIHRoZSBkcml2ZXIgZmlsZSBmb3IgdmVyc2lvbiAxLjAgb2YgdGhlIFhIVE1MIE1vYmlsZSBEVEQuDQotDQotICAgICBUaGlzIERURCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgIFBVQkxJQzogIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iDQotICAgICBTWVNURU06ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iID4NCi0NCi08IS0tIFVzZSB0aGlzIFVSSSB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotDQotICAgICBTZWUgdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUgZm9yIGluZm9ybWF0aW9uDQotICAgICBvbiB0aGUgdXNlIG9mIG5hbWVzcGFjZSBwcmVmaXhlcyBpbiB0aGUgRFRELg0KLS0tPg0KLTwhRU5USVRZICUgTlMucHJlZml4ZWQgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ICAiIiA+DQotDQotPCEtLSBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBYSFRNTCBNb2JpbGUgMS4wIGRpcmVjdGx5LCB1c2UNCi0gICAgIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIHdpdGggdGhlIHhtbG5zIGF0dHJpYnV0ZQ0KLSAgICAgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiID4NCi0gICAgICAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0gICAgICAgICAgICAgICB4bWw6bGFuZz0iZW4iID4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotLS0+DQotDQotPCEtLSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzIC0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJvZmlsZSAgIiIgPg0KLQ0KLTwhLS0gSW5saW5lIFN0eWxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWlubHN0eWxlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3R5bGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJA0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlICdzdHlsZScgYXR0cmlidXRlLCB1c2VkIHRvIHN1cHBvcnQgaW5saW5lDQotICAgICBzdHlsZSBtYXJrdXAuIFRoaXMgbW9kdWxlIG11c3QgYmUgaW5zdGFudGlhdGVkIHByaW9yIHRvIHRoZSBYSFRNTA0KLSAgICAgQ29tbW9uIEF0dHJpYnV0ZXMgbW9kdWxlIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluICVDb3JlLmF0dHJpYjsuDQotLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRyaWINCi0gICAgICJzdHlsZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi0NCi08IUVOVElUWSAlIENvcmUuZXh0cmEuYXR0cmliDQotICAgICAiJXN0eWxlLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0eWxlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRG9jdW1lbnQgTW9kZWwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1vZGVsLm1vZA0KLSAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgWEhUTUwgTW9iaWxlIDEuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QiID4NCi0NCi08IS0tIFhIVE1MIEZyYW1ld29yayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgWEhUTUwuYmlkaSAgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgeGh0bWwtZnJhbWV3b3JrLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1mcmFtZXdvcmstMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtZnJhbWV3b3JrLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1mcmFtZXdvcmstMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTW9kdWxhciBGcmFtZXdvcmsNCi0NCi0gICAgIFRoaXMgcmVxdWlyZWQgbW9kdWxlIGluc3RhbnRpYXRlcyB0aGUgbW9kdWxlcyBuZWVkZWQNCi0gICAgIHRvIHN1cHBvcnQgdGhlIFhIVE1MIG1vZHVsYXJpemF0aW9uIG1vZGVsLCBpbmNsdWRpbmc6DQotDQotICAgICAgICArICBub3RhdGlvbnMNCi0gICAgICAgICsgIGRhdGF0eXBlcw0KLSAgICAgICAgKyAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcw0KLSAgICAgICAgKyAgY29tbW9uIGF0dHJpYnV0ZXMNCi0gICAgICAgICsgIGRvY3VtZW50IG1vZGVsDQotICAgICAgICArICBjaGFyYWN0ZXIgZW50aXRpZXMNCi0NCi0gICAgIFRoZSBJbnRyaW5zaWMgRXZlbnRzIG1vZHVsZSBpcyBpZ25vcmVkIGJ5IGRlZmF1bHQgYnV0DQotICAgICBvY2N1cnMgaW4gdGhpcyBtb2R1bGUgYmVjYXVzZSBpdCBtdXN0IGJlIGluc3RhbnRpYXRlZA0KLSAgICAgcHJpb3IgdG8gQXR0cmlidXRlcyBidXQgYWZ0ZXIgRGF0YXR5cGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYXJjaC5tb2R1bGUgIklHTk9SRSIgPg0KLTwhWyV4aHRtbC1hcmNoLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1hcmNoLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgQXJjaGl0ZWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWFyY2gtMS5tb2QiID4NCi0leGh0bWwtYXJjaC5tb2Q7XV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ub3RhdGlvbnMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLW5vdGF0aW9ucy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtbm90YXRpb25zLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtbm90YXRpb25zLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTm90YXRpb25zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW5vdGF0aW9ucy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBOb3RhdGlvbnMNCi0NCi0gICAgIGRlZmluZXMgdGhlIGZvbGxvd2luZyBub3RhdGlvbnMsIG1hbnkgb2YgdGhlc2UgaW1wb3J0ZWQgZnJvbQ0KLSAgICAgb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4gV2hlbiBhbiBleGlzdGluZyBGUEkgaXMNCi0gICAgIGtub3duLCBpdCBpcyBpbmNvcnBvcmF0ZWQgaGVyZS4NCi0tLT4NCi0NCi08IS0tIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFNHTUwgYW5kIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFczQyBYTUwgMS4wIFJlY29tbWVuZGF0aW9uIC0tPg0KLTwhTk9UQVRJT04gdzNjLXhtbA0KLSAgICAgUFVCTElDICJJU08gODg3OS8vTk9UQVRJT04gRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UgKFhNTCkgMS4wLy9FTiIgPg0KLQ0KLTwhLS0gWE1MIDEuMCBDREFUQSAtLT4NCi08IU5PVEFUSU9OIGNkYXRhDQotICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWE1MIDEuMDogQ0RBVEEvL0VOIiA+DQotDQotPCEtLSBTR01MIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllcnMgLS0+DQotPCFOT1RBVElPTiBmcGkNCi0gICAgIFBVQkxJQyAiSVNPIDg4Nzk6MTk4Ni8vTk9UQVRJT04gRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyLy9FTiIgPg0KLQ0KLTwhLS0gWEhUTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGVuZ3RoIGRlZmluZWQgZm9yIGNlbGxwYWRkaW5nL2NlbGxzcGFjaW5nIC0tPg0KLQ0KLTwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhTk9UQVRJT04gbGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGVuZ3RoLy9FTiIgPg0KLQ0KLTwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi08IU5PVEFUSU9OIGxpbmtUeXBlcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExpbmtUeXBlcy8vRU4iID4NCi0NCi08IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi08IU5PVEFUSU9OIG1lZGlhRGVzYw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE1lZGlhRGVzYy8vRU4iID4NCi0NCi08IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi08IU5PVEFUSU9OIG11bHRpTGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTXVsdGlMZW5ndGgvL0VOIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFOT1RBVElPTiBudW1iZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBOdW1iZXIvL0VOIiA+DQotDQotPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLTwhTk9UQVRJT04gcGl4ZWxzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogUGl4ZWxzLy9FTiIgPg0KLQ0KLTwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotPCFOT1RBVElPTiBzY3JpcHQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBTY3JpcHQvL0VOIiA+DQotDQotPCEtLSB0ZXh0dWFsIGNvbnRlbnQgLS0+DQotPCFOT1RBVElPTiB0ZXh0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVGV4dC8vRU4iID4NCi0NCi08IS0tIEltcG9ydGVkIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotPCFOT1RBVElPTiBjaGFyYWN0ZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyYWN0ZXIvL0VOIiA+DQotDQotPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJzZXQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0Ly9FTiIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY2hhcnNldHMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0cy8vRU4iID4NCi0NCi08IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENvbnRlbnRUeXBlLy9FTiIgPg0KLQ0KLTwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDb250ZW50VHlwZXMvL0VOIiA+DQotDQotPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotPCFOT1RBVElPTiBkYXRldGltZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IERhdGV0aW1lLy9FTiIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhTk9UQVRJT04gbGFuZ3VhZ2VDb2RlDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGFuZ3VhZ2VDb2RlLy9FTiIgPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbVVJJXSAtLT4NCi08IU5PVEFUSU9OIHVyaQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSS8vRU4iID4NCi0NCi08IS0tIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycywgc2VlIFtVUkldIC0tPg0KLTwhTk9UQVRJT04gdXJpcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSXMvL0VOIiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbm90YXRpb25zLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtZGF0YXR5cGVzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1kYXRhdHlwZXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWRhdGF0eXBlcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtZGF0YXR5cGVzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRGF0YXR5cGVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWRhdGF0eXBlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBEYXRhdHlwZXMNCi0NCi0gICAgIGRlZmluZXMgY29udGFpbmVycyBmb3IgdGhlIGZvbGxvd2luZyBkYXRhdHlwZXMsIG1hbnkgb2YNCi0gICAgIHRoZXNlIGltcG9ydGVkIGZyb20gb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4NCi0tLT4NCi0NCi08IS0tIExlbmd0aCBkZWZpbmVkIGZvciBjZWxscGFkZGluZy9jZWxsc3BhY2luZyAtLT4NCi0NCi08IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IUVOVElUWSAlIExlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSBMaW5rVHlwZXMuZGF0YXR5cGUgIk5NVE9LRU5TIiA+DQotDQotPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotPCFFTlRJVFkgJSBNZWRpYURlc2MuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotPCFFTlRJVFkgJSBQaXhlbHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi08IUVOVElUWSAlIFNjcmlwdC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHRleHR1YWwgY29udGVudCAtLT4NCi08IUVOVElUWSAlIFRleHQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBJbXBvcnRlZCBEYXRhdHlwZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLTwhRU5USVRZICUgQ2hhcmFjdGVyLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDaGFyc2V0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ2hhcnNldHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBDb2xvciBzcGVjaWZpY2F0aW9uIHVzaW5nIGNvbG9yIG5hbWUgb3Igc1JHQiAoI1JSR0dCQikgdmFsdWVzIC0tPg0KLTwhRU5USVRZICUgQ29sb3IuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ29udGVudFR5cGUuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlcy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi08IUVOVElUWSAlIERhdGV0aW1lLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyLCBhcyBwZXIgW0lTTzg4NzldIC0tPg0KLTwhRU5USVRZICUgRlBJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhRU5USVRZICUgTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlICJOTVRPS0VOIiA+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtVUkldIC0tPg0KLTwhRU5USVRZICUgVVJJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzLCBzZWUgW1VSSV0gLS0+DQotPCFFTlRJVFkgJSBVUklzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWRhdGF0eXBlcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IS0tIHBsYWNlaG9sZGVyIGZvciBYTGluayBzdXBwb3J0IG1vZHVsZSAtLT4NCi08IUVOVElUWSAlIHhodG1sLXhsaW5rLm1vZCAiIiA+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtcW5hbWUubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1xbmFtZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBRbmFtZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXFuYW1lLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcW5hbWUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotIzIwMDAtMTAtMjI6IGFkZGVkIHFuYW1lIGRlY2xhcmF0aW9ucyBmb3IgcnVieSBlbGVtZW50cw0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBYSFRNTCBRbmFtZSAoUXVhbGlmaWVkIE5hbWUpIE1vZHVsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgaXMgY29udGFpbmVkIGluIHR3byBwYXJ0cywgbGFiZWxlZCBTZWN0aW9uICdBJyBhbmQgJ0InOg0KLQ0KLSAgICAgICBTZWN0aW9uIEEgZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHRvIHN1cHBvcnQgbmFtZXNwYWNlLQ0KLSAgICAgICBxdWFsaWZpZWQgbmFtZXMsIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMsIGFuZCBuYW1lIHByZWZpeGluZw0KLSAgICAgICBmb3IgWEhUTUwgYW5kIGV4dGVuc2lvbnMuDQotDQotICAgICAgIFNlY3Rpb24gQiBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdXNlZCB0byBwcm92aWRlDQotICAgICAgIG5hbWVzcGFjZS1xdWFsaWZpZWQgbmFtZXMgZm9yIGFsbCBYSFRNTCBlbGVtZW50IHR5cGVzOg0KLQ0KLSAgICAgICAgICVhcHBsZXQucW5hbWU7ICAgdGhlIHhtbG5zLXF1YWxpZmllZCBuYW1lIGZvciA8YXBwbGV0Pg0KLSAgICAgICAgICViYXNlLnFuYW1lOyAgICAgdGhlIHhtbG5zLXF1YWxpZmllZCBuYW1lIGZvciA8YmFzZT4NCi0gICAgICAgICAuLi4NCi0NCi0gICAgIFhIVE1MIGV4dGVuc2lvbnMgd291bGQgY3JlYXRlIGEgbW9kdWxlIHNpbWlsYXIgdG8gdGhpcyBvbmUuDQotICAgICBJbmNsdWRlZCBpbiB0aGUgWEhUTUwgZGlzdHJpYnV0aW9uIGlzIGEgdGVtcGxhdGUgbW9kdWxlDQotICAgICAoJ3RlbXBsYXRlLXFuYW1lLTEubW9kJykgc3VpdGFibGUgZm9yIHRoaXMgcHVycG9zZS4NCi0tLT4NCi0NCi08IS0tIFNlY3Rpb24gQTogWEhUTUwgWE1MIE5hbWVzcGFjZSBGcmFtZXdvcmsgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSAxLiBEZWNsYXJlIGEgJVhIVE1MLnByZWZpeGVkOyBjb25kaXRpb25hbCBzZWN0aW9uIGtleXdvcmQsIHVzZWQNCi0gICAgICAgIHRvIGFjdGl2YXRlIG5hbWVzcGFjZSBwcmVmaXhpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZA0KLSAgICAgICAgaW5oZXJpdCAnJU5TLnByZWZpeGVkOycgZnJvbSB0aGUgRFREIGRyaXZlciwgc28gdGhhdCB1bmxlc3MNCi0gICAgICAgIG92ZXJyaWRkZW4sIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb2xsb3dzIHRoZSBvdmVyYWxsIERURA0KLSAgICAgICAgcHJlZml4aW5nIHNjaGVtZS4NCi0tLT4NCi08IUVOVElUWSAlIE5TLnByZWZpeGVkICJJR05PUkUiID4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeGVkICIlTlMucHJlZml4ZWQ7IiA+DQotDQotPCEtLSAyLiBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAoZWcuLCAlWEhUTUwueG1sbnM7KSBjb250YWluaW5nDQotICAgICAgICB0aGUgVVJJIHJlZmVyZW5jZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBYSFRNTCBuYW1lc3BhY2U6DQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucyAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiID4NCi0NCi08IS0tIDMuIERlY2xhcmUgcGFyYW1ldGVyIGVudGl0aWVzIChlZy4sICVYSFRNTC5wcmVmaXg7KSBjb250YWluaW5nDQotICAgICAgICB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgcHJlZml4IHN0cmluZyhzKSB0byB1c2Ugd2hlbiBwcmVmaXhpbmcNCi0gICAgICAgIGlzIGVuYWJsZWQuIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gaW4gdGhlIERURCBkcml2ZXIgb3IgdGhlDQotICAgICAgICBpbnRlcm5hbCBzdWJzZXQgb2YgYW4gZG9jdW1lbnQgaW5zdGFuY2UuIElmIG5vIGRlZmF1bHQgcHJlZml4DQotICAgICAgICBpcyBkZXNpcmVkLCB0aGlzIG1heSBiZSBkZWNsYXJlZCBhcyBhbiBlbXB0eSBzdHJpbmcuDQotDQotICAgICBOT1RFOiBBcyBzcGVjaWZpZWQgaW4gW1hNTE5BTUVTXSwgdGhlIG5hbWVzcGFjZSBwcmVmaXggc2VydmVzDQotICAgICBhcyBhIHByb3h5IGZvciB0aGUgVVJJIHJlZmVyZW5jZSwgYW5kIGlzIG5vdCBpbiBpdHNlbGYgc2lnbmlmaWNhbnQuDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXggICIiID4NCi0NCi08IS0tIDQuIERlY2xhcmUgcGFyYW1ldGVyIGVudGl0aWVzIChlZy4sICVYSFRNTC5wZng7KSBjb250YWluaW5nIHRoZQ0KLSAgICAgICAgY29sb25pemVkIHByZWZpeChlcykgKGVnLiwgJyVYSFRNTC5wcmVmaXg7OicpIHVzZWQgd2hlbg0KLSAgICAgICAgcHJlZml4aW5nIGlzIGFjdGl2ZSwgYW4gZW1wdHkgc3RyaW5nIHdoZW4gaXQgaXMgbm90Lg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBYSFRNTC5wZnggICIlWEhUTUwucHJlZml4OzoiID4NCi1dXT4NCi08IUVOVElUWSAlIFhIVE1MLnBmeCAgIiIgPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgbmFtZSBleHRlbnNpb25zIGhlcmUgLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUtZXh0cmEubW9kICIiID4NCi0NCi0NCi08IS0tIDUuIFRoZSBwYXJhbWV0ZXIgZW50aXR5ICVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7IG1heSBiZQ0KLSAgICAgICAgcmVkZWNsYXJlZCB0byBjb250YWluIGFueSBub24tWEhUTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uDQotICAgICAgICBhdHRyaWJ1dGVzIGZvciBuYW1lc3BhY2VzIGVtYmVkZGVkIGluIFhIVE1MLiBUaGUgZGVmYXVsdA0KLSAgICAgICAgaXMgYW4gZW1wdHkgc3RyaW5nLiAgWExpbmsgc2hvdWxkIGJlIGluY2x1ZGVkIGhlcmUgaWYgdXNlZA0KLSAgICAgICAgaW4gdGhlIERURC4NCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCEtLSBUaGUgcmVtYWluZGVyIG9mIFNlY3Rpb24gQSBpcyBvbmx5IGZvbGxvd2VkIGluIFhIVE1MLCBub3QgZXh0ZW5zaW9ucy4gLS0+DQotDQotPCEtLSBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAlTlMuZGVjbC5hdHRyaWI7IGNvbnRhaW5pbmcNCi0gICAgIGFsbCBYTUwgTmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB1c2VkIGluIHRoZSBEVEQsIHBsdXMgdGhlDQotICAgICB4bWxucyBkZWNsYXJhdGlvbiBmb3IgWEhUTUwsIGl0cyBmb3JtIGRlcGVuZGVudCBvbiB3aGV0aGVyDQotICAgICBwcmVmaXhpbmcgaXMgYWN0aXZlLg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBOUy5kZWNsLmF0dHJpYg0KLSAgICAgInhtbG5zOiVYSFRNTC5wcmVmaXg7ICAlVVJJLmRhdGF0eXBlOyAgICNGSVhFRCAnJVhIVE1MLnhtbG5zOycNCi0gICAgICAlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyINCi0+DQotXV0+DQotPCFFTlRJVFkgJSBOUy5kZWNsLmF0dHJpYg0KLSAgICAgIiVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIFhMaW5rIHN1cHBvcnQuDQotLS0+DQotPCFFTlRJVFkgJSBYTElOSy54bWxucy5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgJU5TLmRlY2wuYXR0cmliOyBjb250YWluaW5nIGFsbA0KLSAgICAgWE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIHVzZWQgYnkgWEhUTUwsIGluY2x1ZGluZw0KLSAgICAgYSBkZWZhdWx0IHhtbG5zIGF0dHJpYnV0ZSB3aGVuIHByZWZpeGluZyBpcyBpbmFjdGl2ZS4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuYXR0cmliDQotICAgICAiJU5TLmRlY2wuYXR0cmliOw0KLSAgICAgICVYTElOSy54bWxucy5hdHRyaWI7Ig0KLT4NCi1dXT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmF0dHJpYg0KLSAgICAgInhtbG5zICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwueG1sbnM7Jw0KLSAgICAgICVYTElOSy54bWxucy5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIHBsYWNlaG9sZGVyIGZvciBxdWFsaWZpZWQgbmFtZSByZWRlY2xhcmF0aW9ucyAtLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLnJlZGVjbCAiIiA+DQotDQotDQotPCEtLSBTZWN0aW9uIEI6IFhIVE1MIFF1YWxpZmllZCBOYW1lcyA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIDYuIFRoaXMgc2VjdGlvbiBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdXNlZCB0byBwcm92aWRlDQotICAgICAgICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzIGZvciBhbGwgWEhUTUwgZWxlbWVudCB0eXBlcy4NCi0tLT4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWFwcGxldC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFwcGxldC5xbmFtZSAgIiVYSFRNTC5wZng7YXBwbGV0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1iYXNlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYmFzZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtiYXNlIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1iZG8tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiZG8ucW5hbWUgICAgICIlWEhUTUwucGZ4O2JkbyIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrcGhyYXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhZGRyZXNzLnFuYW1lICIlWEhUTUwucGZ4O2FkZHJlc3MiID4NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUucW5hbWUgICIlWEhUTUwucGZ4O2Jsb2NrcXVvdGUiID4NCi08IUVOVElUWSAlIHByZS5xbmFtZSAgICAgIiVYSFRNTC5wZng7cHJlIiA+DQotPCFFTlRJVFkgJSBoMS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gxIiA+DQotPCFFTlRJVFkgJSBoMi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gyIiA+DQotPCFFTlRJVFkgJSBoMy5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gzIiA+DQotPCFFTlRJVFkgJSBoNC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g0IiA+DQotPCFFTlRJVFkgJSBoNS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g1IiA+DQotPCFFTlRJVFkgJSBoNi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g2IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtwcmVzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtociIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgZGl2LnFuYW1lICAgICAiJVhIVE1MLnBmeDtkaXYiID4NCi08IUVOVElUWSAlIHAucW5hbWUgICAgICAgIiVYSFRNTC5wZng7cCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtZWRpdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGlucy5xbmFtZSAgICAgIiVYSFRNTC5wZng7aW5zIiA+DQotPCFFTlRJVFkgJSBkZWwucW5hbWUgICAgICIlWEhUTUwucGZ4O2RlbCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtZm9ybS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGZvcm0ucW5hbWUgICAgIiVYSFRNTC5wZng7Zm9ybSIgPg0KLTwhRU5USVRZICUgbGFiZWwucW5hbWUgICAiJVhIVE1MLnBmeDtsYWJlbCIgPg0KLTwhRU5USVRZICUgaW5wdXQucW5hbWUgICAiJVhIVE1MLnBmeDtpbnB1dCIgPg0KLTwhRU5USVRZICUgc2VsZWN0LnFuYW1lICAiJVhIVE1MLnBmeDtzZWxlY3QiID4NCi08IUVOVElUWSAlIG9wdGdyb3VwLnFuYW1lICAiJVhIVE1MLnBmeDtvcHRncm91cCIgPg0KLTwhRU5USVRZICUgb3B0aW9uLnFuYW1lICAiJVhIVE1MLnBmeDtvcHRpb24iID4NCi08IUVOVElUWSAlIHRleHRhcmVhLnFuYW1lICAiJVhIVE1MLnBmeDt0ZXh0YXJlYSIgPg0KLTwhRU5USVRZICUgZmllbGRzZXQucW5hbWUgICIlWEhUTUwucGZ4O2ZpZWxkc2V0IiA+DQotPCFFTlRJVFkgJSBsZWdlbmQucW5hbWUgICIlWEhUTUwucGZ4O2xlZ2VuZCIgPg0KLTwhRU5USVRZICUgYnV0dG9uLnFuYW1lICAiJVhIVE1MLnBmeDtidXR0b24iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWh5cGVydGV4dC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGEucW5hbWUgICAgICAgIiVYSFRNTC5wZng7YSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW1hZ2UtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBpbWcucW5hbWUgICAgICIlWEhUTUwucGZ4O2ltZyIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5scGhyYXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhYmJyLnFuYW1lICAgICIlWEhUTUwucGZ4O2FiYnIiID4NCi08IUVOVElUWSAlIGFjcm9ueW0ucW5hbWUgIiVYSFRNTC5wZng7YWNyb255bSIgPg0KLTwhRU5USVRZICUgY2l0ZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtjaXRlIiA+DQotPCFFTlRJVFkgJSBjb2RlLnFuYW1lICAgICIlWEhUTUwucGZ4O2NvZGUiID4NCi08IUVOVElUWSAlIGRmbi5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGZuIiA+DQotPCFFTlRJVFkgJSBlbS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2VtIiA+DQotPCFFTlRJVFkgJSBrYmQucW5hbWUgICAgICIlWEhUTUwucGZ4O2tiZCIgPg0KLTwhRU5USVRZICUgcS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtxIiA+DQotPCFFTlRJVFkgJSBzYW1wLnFuYW1lICAgICIlWEhUTUwucGZ4O3NhbXAiID4NCi08IUVOVElUWSAlIHN0cm9uZy5xbmFtZSAgIiVYSFRNTC5wZng7c3Ryb25nIiA+DQotPCFFTlRJVFkgJSB2YXIucW5hbWUgICAgICIlWEhUTUwucGZ4O3ZhciIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGIucW5hbWUgICAgICAgIiVYSFRNTC5wZng7YiIgPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAgICAiJVhIVE1MLnBmeDtiaWciID4NCi08IUVOVElUWSAlIGkucW5hbWUgICAgICAgIiVYSFRNTC5wZng7aSIgPg0KLTwhRU5USVRZICUgc21hbGwucW5hbWUgICAiJVhIVE1MLnBmeDtzbWFsbCIgPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAgICAiJVhIVE1MLnBmeDtzdWIiID4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgICAgIiVYSFRNTC5wZng7c3VwIiA+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3R0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBici5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2JyIiA+DQotPCFFTlRJVFkgJSBzcGFuLnFuYW1lICAgICIlWEhUTUwucGZ4O3NwYW4iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlzbWFwLTEubW9kIChhbHNvIGNzaXNtYXAsIHNzaXNtYXApIC0tPg0KLTwhRU5USVRZICUgbWFwLnFuYW1lICAgICAiJVhIVE1MLnBmeDttYXAiID4NCi08IUVOVElUWSAlIGFyZWEucW5hbWUgICAgIiVYSFRNTC5wZng7YXJlYSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbGluay0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGxpbmsucW5hbWUgICAgIiVYSFRNTC5wZng7bGluayIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbGlzdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGRsLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZGwiID4NCi08IUVOVElUWSAlIGR0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZHQiID4NCi08IUVOVElUWSAlIGRkLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZGQiID4NCi08IUVOVElUWSAlIG9sLnFuYW1lICAgICAgIiVYSFRNTC5wZng7b2wiID4NCi08IUVOVElUWSAlIHVsLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dWwiID4NCi08IUVOVElUWSAlIGxpLnFuYW1lICAgICAgIiVYSFRNTC5wZng7bGkiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLW1ldGEtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBtZXRhLnFuYW1lICAgICIlWEhUTUwucGZ4O21ldGEiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXBhcmFtLTEubW9kIC0tPg0KLTwhRU5USVRZICUgcGFyYW0ucW5hbWUgICAiJVhIVE1MLnBmeDtwYXJhbSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtb2JqZWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgb2JqZWN0LnFuYW1lICAiJVhIVE1MLnBmeDtvYmplY3QiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXNjcmlwdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHNjcmlwdC5xbmFtZSAgIiVYSFRNTC5wZng7c2NyaXB0IiA+DQotPCFFTlRJVFkgJSBub3NjcmlwdC5xbmFtZSAgIiVYSFRNTC5wZng7bm9zY3JpcHQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXN0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICAgIiVYSFRNTC5wZng7aHRtbCIgPg0KLTwhRU5USVRZICUgaGVhZC5xbmFtZSAgICAiJVhIVE1MLnBmeDtoZWFkIiA+DQotPCFFTlRJVFkgJSB0aXRsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3RpdGxlIiA+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAgICIlWEhUTUwucGZ4O2JvZHkiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXN0eWxlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgc3R5bGUucW5hbWUgICAiJVhIVE1MLnBmeDtzdHlsZSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtdGFibGUtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3RhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICIlWEhUTUwucGZ4O2NhcHRpb24iID4NCi08IUVOVElUWSAlIHRoZWFkLnFuYW1lICAgIiVYSFRNTC5wZng7dGhlYWQiID4NCi08IUVOVElUWSAlIHRmb290LnFuYW1lICAgIiVYSFRNTC5wZng7dGZvb3QiID4NCi08IUVOVElUWSAlIHRib2R5LnFuYW1lICAgIiVYSFRNTC5wZng7dGJvZHkiID4NCi08IUVOVElUWSAlIGNvbGdyb3VwLnFuYW1lICAiJVhIVE1MLnBmeDtjb2xncm91cCIgPg0KLTwhRU5USVRZICUgY29sLnFuYW1lICAgICAiJVhIVE1MLnBmeDtjb2wiID4NCi08IUVOVElUWSAlIHRyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dHIiID4NCi08IUVOVElUWSAlIHRoLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dGgiID4NCi08IUVOVElUWSAlIHRkLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dGQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXJ1YnktMS5tb2QgLS0+DQotDQotPCFFTlRJVFkgJSBydWJ5LnFuYW1lICAgICIlWEhUTUwucGZ4O3J1YnkiID4NCi08IUVOVElUWSAlIHJiYy5xbmFtZSAgICAgIiVYSFRNTC5wZng7cmJjIiA+DQotPCFFTlRJVFkgJSBydGMucW5hbWUgICAgICIlWEhUTUwucGZ4O3J0YyIgPg0KLTwhRU5USVRZICUgcmIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtyYiIgPg0KLTwhRU5USVRZICUgcnQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtydCIgPg0KLTwhRU5USVRZICUgcnAucW5hbWUgICAgICAiJVhIVE1MLnBmeDtycCIgPg0KLQ0KLTwhLS0gUHJvdmlzaW9uYWwgWEhUTUwgMi4wIFF1YWxpZmllZCBOYW1lcyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWltYWdlLTIubW9kIC0tPg0KLTwhRU5USVRZICUgYWx0LnFuYW1lICAgICAiJVhIVE1MLnBmeDthbHQiID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1xbmFtZS0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWV2ZW50cy5tb2R1bGUgIklHTk9SRSIgPg0KLTwhWyV4aHRtbC1ldmVudHMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWV2ZW50cy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBJbnRyaW5zaWMgRXZlbnRzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWV2ZW50cy0xLm1vZCIgPg0KLSV4aHRtbC1ldmVudHMubW9kO11dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYXR0cmlicy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYXR0cmlicy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYXR0cmlicy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1hdHRyaWJzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWF0dHJpYnMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQ29tbW9uIEF0dHJpYnV0ZXMNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIG1hbnkgb2YgdGhlIGNvbW1vbiBhdHRyaWJ1dGVzIGZvciB0aGUgWEhUTUwgRFRELg0KLSAgICAgJU5TLmRlY2wuYXR0cmliOyBpcyBkZWNsYXJlZCBpbiB0aGUgWEhUTUwgUW5hbWUgbW9kdWxlLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaWQuYXR0cmliDQotICAgICAiaWQgICAgICAgICAgIElEICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBjbGFzcy5hdHRyaWINCi0gICAgICJjbGFzcyAgICAgICAgTk1UT0tFTlMgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmF0dHJpYg0KLSAgICAgInRpdGxlICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgJWNsYXNzLmF0dHJpYjsNCi0gICAgICAldGl0bGUuYXR0cmliOw0KLSAgICAgICVDb3JlLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhRU5USVRZICUgbGFuZy5hdHRyaWINCi0gICAgICJ4bWw6bGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEIg0KLT4NCi0NCi08IVslWEhUTUwuYmlkaTtbDQotPCFFTlRJVFkgJSBkaXIuYXR0cmliDQotICAgICAiZGlyICAgICAgICAgICggbHRyIHwgcnRsICkgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBJMThuLmF0dHJpYg0KLSAgICAgIiVkaXIuYXR0cmliOw0KLSAgICAgICVsYW5nLmF0dHJpYjsiDQotPg0KLQ0KLV1dPg0KLTwhRU5USVRZICUgSTE4bi5hdHRyaWINCi0gICAgICIlbGFuZy5hdHRyaWI7Ig0KLT4NCi0NCi08IUVOVElUWSAlIENvbW1vbi5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gaW50cmluc2ljIGV2ZW50IGF0dHJpYnV0ZXMgZGVjbGFyZWQgcHJldmlvdXNseQ0KLS0tPg0KLTwhRU5USVRZICUgRXZlbnRzLmF0dHJpYiAiIiA+DQotDQotPCFFTlRJVFkgJSBDb21tb24uYXR0cmliDQotICAgICAiJUNvcmUuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICAlRXZlbnRzLmF0dHJpYjsNCi0gICAgICAlQ29tbW9uLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWF0dHJpYnMtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBwbGFjZWhvbGRlciBmb3IgY29udGVudCBtb2RlbCByZWRlY2xhcmF0aW9ucyAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1vZGVsLnJlZGVjbCAiIiA+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1tb2RlbC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtbW9kZWwubW9kdWxlO1sNCi08IS0tIGluc3RhbnRpYXRlIHRoZSBEb2N1bWVudCBNb2RlbCBtb2R1bGUgZGVjbGFyZWQgaW4gdGhlIERURCBkcml2ZXINCi0tLT4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTW9iaWxlIDEuMCBEb2N1bWVudCBNb2RlbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIE1vYmlsZSwgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgCUBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0gICAgDQotLS0+DQotPCEtLSBYSFRNTCBNb2JpbGUgRG9jdW1lbnQgTW9kZWwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgZ3JvdXBpbmdzIG9mIGVsZW1lbnRzIHRoYXQgbWFrZSB1cA0KLSAgICAgY29tbW9uIGNvbnRlbnQgbW9kZWxzIGZvciBYSFRNTCBlbGVtZW50cy4NCi0tLT4NCi0NCi08IS0tIE9wdGlvbmFsIEVsZW1lbnRzIGluIGhlYWQgIC4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZE9wdHMubWl4DQotICAgICAiKCAlbWV0YS5xbmFtZTsgfCAlbGluay5xbmFtZTsgfCAlb2JqZWN0LnFuYW1lOyB8ICVzdHlsZS5xbmFtZTsgKSoiID4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgTWlzYy5jbGFzcyAiIiA+DQotDQotPCEtLSBJbmxpbmUgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIElubFN0cnVjdC5jbGFzcyAiJWJyLnFuYW1lOyB8ICVzcGFuLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sUGhyYXMuY2xhc3MNCi0gICAgICJ8ICVlbS5xbmFtZTsgfCAlc3Ryb25nLnFuYW1lOyB8ICVkZm4ucW5hbWU7IHwgJWNvZGUucW5hbWU7DQotICAgICAgfCAlc2FtcC5xbmFtZTsgfCAla2JkLnFuYW1lOyB8ICV2YXIucW5hbWU7IHwgJWNpdGUucW5hbWU7DQotICAgICAgfCAlYWJici5xbmFtZTsgfCAlYWNyb255bS5xbmFtZTsgfCAlcS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFByZXMuY2xhc3MNCi0gICAgICJ8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyB8ICViaWcucW5hbWU7IHwgJXNtYWxsLnFuYW1lOyAiID4NCi0NCi0NCi08IUVOVElUWSAlIEkxOG4uY2xhc3MgIiIgPg0KLQ0KLTwhRU5USVRZICUgQW5jaG9yLmNsYXNzICJ8ICVhLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sU3BlY2lhbC5jbGFzcyAifCAlaW1nLnFuYW1lOyB8ICVvYmplY3QucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxGb3JtLmNsYXNzDQotICAgICAifCAlaW5wdXQucW5hbWU7IHwgJXNlbGVjdC5xbmFtZTsgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgfCAlbGFiZWwucW5hbWU7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubGluZS5leHRyYSAiIiA+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUuY2xhc3MNCi0gICAgICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLmNsYXNzDQotICAgICAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IubWl4DQotICAgICAiJUlubE5vQW5jaG9yLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUubWl4DQotICAgICAiJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gQmxvY2sgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkaW5nLmNsYXNzDQotICAgICAiJWgxLnFuYW1lOyB8ICVoMi5xbmFtZTsgfCAlaDMucW5hbWU7DQotICAgICAgfCAlaDQucW5hbWU7IHwgJWg1LnFuYW1lOyB8ICVoNi5xbmFtZTsiDQotPg0KLTwhRU5USVRZICUgTGlzdC5jbGFzcyAgIiV1bC5xbmFtZTsgfCAlb2wucW5hbWU7IHwgJWRsLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgVGFibGUuY2xhc3MgInwgJXRhYmxlLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgRm9ybS5jbGFzcyAgInwgJWZvcm0ucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBGaWVsZHNldC5jbGFzcyAgInwgJWZpZWxkc2V0LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrU3RydWN0LmNsYXNzICIlcC5xbmFtZTsgfCAlZGl2LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrUGhyYXMuY2xhc3MNCi0gICAgICJ8ICVwcmUucW5hbWU7IHwgJWJsb2NrcXVvdGUucW5hbWU7IHwgJWFkZHJlc3MucW5hbWU7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsa1ByZXMuY2xhc3MgInwgJWhyLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrU3BlY2lhbC5jbGFzcw0KLSAgICAgIiVUYWJsZS5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlRmllbGRzZXQuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsb2NrLmV4dHJhICIiID4NCi0NCi08IUVOVElUWSAlIEJsb2NrLmNsYXNzDQotICAgICAiJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJUJsa1NwZWNpYWwuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVUYWJsZS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsb2NrLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIEFsbCBDb250ZW50IEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gZGVjbGFyZXMgYWxsIGNvbnRlbnQgZXhjZXB0IHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgRmxvd05vVGFibGUubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi0NCi08IUVOVElUWSAlIEZsb3cubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWNoYXJlbnQubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWNoYXJlbnQtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWNoYXJlbnQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIENoYXJhY3RlciBFbnRpdGllcyBmb3IgWEhUTUwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzZXQgb2YgY2hhcmFjdGVyIGVudGl0aWVzIGZvciBYSFRNTCwNCi0gICAgIGluY2x1ZGluZyB0aGUgTGF0aW4gMSwgU3ltYm9sIGFuZCBTcGVjaWFsIGNoYXJhY3RlciBjb2xsZWN0aW9ucy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1sYXQxLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhNTC1jb21wYXRpYmxlIElTTyBMYXRpbiAxIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1sYXQxLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLWxhdDEuZW50IiA+DQotICAgICAgICV4aHRtbC1sYXQxOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1sYXQxLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotLS0+DQotDQotPCFFTlRJVFkgbmJzcCAgICImIzE2MDsiID48IS0tIG5vLWJyZWFrIHNwYWNlID0gbm9uLWJyZWFraW5nIHNwYWNlLCBVKzAwQTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGlleGNsICAiJiMxNjE7IiA+PCEtLSBpbnZlcnRlZCBleGNsYW1hdGlvbiBtYXJrLCBVKzAwQTEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGNlbnQgICAiJiMxNjI7IiA+PCEtLSBjZW50IHNpZ24sIFUrMDBBMiBJU09udW0gLS0+DQotPCFFTlRJVFkgcG91bmQgICImIzE2MzsiID48IS0tIHBvdW5kIHNpZ24sIFUrMDBBMyBJU09udW0gLS0+DQotPCFFTlRJVFkgY3VycmVuICImIzE2NDsiID48IS0tIGN1cnJlbmN5IHNpZ24sIFUrMDBBNCBJU09udW0gLS0+DQotPCFFTlRJVFkgeWVuICAgICImIzE2NTsiID48IS0tIHllbiBzaWduID0geXVhbiBzaWduLCBVKzAwQTUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGJydmJhciAiJiMxNjY7IiA+PCEtLSBicm9rZW4gYmFyID0gYnJva2VuIHZlcnRpY2FsIGJhciwgVSswMEE2IElTT251bSAtLT4NCi08IUVOVElUWSBzZWN0ICAgIiYjMTY3OyIgPjwhLS0gc2VjdGlvbiBzaWduLCBVKzAwQTcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVtbCAgICAiJiMxNjg7IiA+PCEtLSBkaWFlcmVzaXMgPSBzcGFjaW5nIGRpYWVyZXNpcywgVSswMEE4IElTT2RpYSAtLT4NCi08IUVOVElUWSBjb3B5ICAgIiYjMTY5OyIgPjwhLS0gY29weXJpZ2h0IHNpZ24sIFUrMDBBOSBJU09udW0gLS0+DQotPCFFTlRJVFkgb3JkZiAgICImIzE3MDsiID48IS0tIGZlbWluaW5lIG9yZGluYWwgaW5kaWNhdG9yLCBVKzAwQUEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGxhcXVvICAiJiMxNzE7IiA+PCEtLSBsZWZ0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IGxlZnQgcG9pbnRpbmcgZ3VpbGxlbWV0LCBVKzAwQUIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG5vdCAgICAiJiMxNzI7IiA+PCEtLSBub3Qgc2lnbiwgVSswMEFDIElTT251bSAtLT4NCi08IUVOVElUWSBzaHkgICAgIiYjMTczOyIgPjwhLS0gc29mdCBoeXBoZW4gPSBkaXNjcmV0aW9uYXJ5IGh5cGhlbiwgVSswMEFEIElTT251bSAtLT4NCi08IUVOVElUWSByZWcgICAgIiYjMTc0OyIgPjwhLS0gcmVnaXN0ZXJlZCBzaWduID0gcmVnaXN0ZXJlZCB0cmFkZSBtYXJrIHNpZ24sIFUrMDBBRSBJU09udW0gLS0+DQotPCFFTlRJVFkgbWFjciAgICImIzE3NTsiID48IS0tIG1hY3JvbiA9IHNwYWNpbmcgbWFjcm9uID0gb3ZlcmxpbmUgPSBBUEwgb3ZlcmJhciwgVSswMEFGIElTT2RpYSAtLT4NCi08IUVOVElUWSBkZWcgICAgIiYjMTc2OyIgPjwhLS0gZGVncmVlIHNpZ24sIFUrMDBCMCBJU09udW0gLS0+DQotPCFFTlRJVFkgcGx1c21uICImIzE3NzsiID48IS0tIHBsdXMtbWludXMgc2lnbiA9IHBsdXMtb3ItbWludXMgc2lnbiwgVSswMEIxIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAyICAgIiYjMTc4OyIgPjwhLS0gc3VwZXJzY3JpcHQgdHdvID0gc3VwZXJzY3JpcHQgZGlnaXQgdHdvID0gc3F1YXJlZCwgVSswMEIyIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAzICAgIiYjMTc5OyIgPjwhLS0gc3VwZXJzY3JpcHQgdGhyZWUgPSBzdXBlcnNjcmlwdCBkaWdpdCB0aHJlZSA9IGN1YmVkLCBVKzAwQjMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFjdXRlICAiJiMxODA7IiA+PCEtLSBhY3V0ZSBhY2NlbnQgPSBzcGFjaW5nIGFjdXRlLCBVKzAwQjQgSVNPZGlhIC0tPg0KLTwhRU5USVRZIG1pY3JvICAiJiMxODE7IiA+PCEtLSBtaWNybyBzaWduLCBVKzAwQjUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBhcmEgICAiJiMxODI7IiA+PCEtLSBwaWxjcm93IHNpZ24gPSBwYXJhZ3JhcGggc2lnbiwgVSswMEI2IElTT251bSAtLT4NCi08IUVOVElUWSBtaWRkb3QgIiYjMTgzOyIgPjwhLS0gbWlkZGxlIGRvdCA9IEdlb3JnaWFuIGNvbW1hID0gR3JlZWsgbWlkZGxlIGRvdCwgVSswMEI3IElTT251bSAtLT4NCi08IUVOVElUWSBjZWRpbCAgIiYjMTg0OyIgPjwhLS0gY2VkaWxsYSA9IHNwYWNpbmcgY2VkaWxsYSwgVSswMEI4IElTT2RpYSAtLT4NCi08IUVOVElUWSBzdXAxICAgIiYjMTg1OyIgPjwhLS0gc3VwZXJzY3JpcHQgb25lID0gc3VwZXJzY3JpcHQgZGlnaXQgb25lLCBVKzAwQjkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9yZG0gICAiJiMxODY7IiA+PCEtLSBtYXNjdWxpbmUgb3JkaW5hbCBpbmRpY2F0b3IsIFUrMDBCQSBJU09udW0gLS0+DQotPCFFTlRJVFkgcmFxdW8gICImIzE4NzsiID48IS0tIHJpZ2h0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IHJpZ2h0IHBvaW50aW5nIGd1aWxsZW1ldCwgVSswMEJCIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMTQgIiYjMTg4OyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyID0gZnJhY3Rpb24gb25lIHF1YXJ0ZXIsIFUrMDBCQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzEyICImIzE4OTsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiA9IGZyYWN0aW9uIG9uZSBoYWxmLCBVKzAwQkQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMzNCAiJiMxOTA7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMgPSBmcmFjdGlvbiB0aHJlZSBxdWFydGVycywgVSswMEJFIElTT251bSAtLT4NCi08IUVOVElUWSBpcXVlc3QgIiYjMTkxOyIgPjwhLS0gaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyayA9IHR1cm5lZCBxdWVzdGlvbiBtYXJrLCBVKzAwQkYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIEFncmF2ZSAiJiMxOTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBncmF2ZSA9IGxhdGluIGNhcGl0YWwgQSBncmF2ZSwgVSswMEMwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQWFjdXRlICImIzE5MzsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGFjdXRlLCBVKzAwQzEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBY2lyYyAgIiYjMTk0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggY2lyY3VtZmxleCwgVSswMEMyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXRpbGRlICImIzE5NTsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIHRpbGRlLCBVKzAwQzMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBdW1sICAgIiYjMTk2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggZGlhZXJlc2lzLCBVKzAwQzQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBcmluZyAgIiYjMTk3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIGNhcGl0YWwgQSByaW5nLCBVKzAwQzUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBRWxpZyAgIiYjMTk4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBRSA9IGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgQUUsIFUrMDBDNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIENjZWRpbCAiJiMxOTk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEMgd2l0aCBjZWRpbGxhLCBVKzAwQzcgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFZ3JhdmUgIiYjMjAwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggZ3JhdmUsIFUrMDBDOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVhY3V0ZSAiJiMyMDE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBhY3V0ZSwgVSswMEM5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWNpcmMgICImIzIwMjsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEV1bWwgICAiJiMyMDM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBkaWFlcmVzaXMsIFUrMDBDQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIElncmF2ZSAiJiMyMDQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBncmF2ZSwgVSswMENDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWFjdXRlICImIzIwNTsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGFjdXRlLCBVKzAwQ0QgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJY2lyYyAgIiYjMjA2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggY2lyY3VtZmxleCwgVSswMENFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSXVtbCAgICImIzIwNzsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGRpYWVyZXNpcywgVSswMENGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRVRIICAgICImIzIwODsiID48IS0tIGxhdGluIGNhcGl0YWwgRVRILCBVKzAwRDAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBOdGlsZGUgIiYjMjA5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBOIHdpdGggdGlsZGUsIFUrMDBEMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9ncmF2ZSAiJiMyMTA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBncmF2ZSwgVSswMEQyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2FjdXRlICImIzIxMTsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGFjdXRlLCBVKzAwRDMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPY2lyYyAgIiYjMjEyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggY2lyY3VtZmxleCwgVSswMEQ0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT3RpbGRlICImIzIxMzsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIHRpbGRlLCBVKzAwRDUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPdW1sICAgIiYjMjE0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggZGlhZXJlc2lzLCBVKzAwRDYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB0aW1lcyAgIiYjMjE1OyIgPjwhLS0gbXVsdGlwbGljYXRpb24gc2lnbiwgVSswMEQ3IElTT251bSAtLT4NCi08IUVOVElUWSBPc2xhc2ggIiYjMjE2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggc3Ryb2tlID0gbGF0aW4gY2FwaXRhbCBPIHNsYXNoLCBVKzAwRDggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVZ3JhdmUgIiYjMjE3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggZ3JhdmUsIFUrMDBEOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVhY3V0ZSAiJiMyMTg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBhY3V0ZSwgVSswMERBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWNpcmMgICImIzIxOTsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBEQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFV1bWwgICAiJiMyMjA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBkaWFlcmVzaXMsIFUrMDBEQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFlhY3V0ZSAiJiMyMjE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFkgd2l0aCBhY3V0ZSwgVSswMEREIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVEhPUk4gICImIzIyMjsiID48IS0tIGxhdGluIGNhcGl0YWwgVEhPUk4sIFUrMDBERSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHN6bGlnICAiJiMyMjM7IiA+PCEtLSBsYXRpbiBzbWFsbCBzaGFycCBzID0gZXNzLXplZCwgVSswMERGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWdyYXZlICImIzIyNDsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBncmF2ZSA9IGxhdGluIHNtYWxsIGEgZ3JhdmUsIFUrMDBFMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFhY3V0ZSAiJiMyMjU7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggYWN1dGUsIFUrMDBFMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFjaXJjICAiJiMyMjY7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggY2lyY3VtZmxleCwgVSswMEUyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXRpbGRlICImIzIyNzsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCB0aWxkZSwgVSswMEUzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXVtbCAgICImIzIyODsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBkaWFlcmVzaXMsIFUrMDBFNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFyaW5nICAiJiMyMjk7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIHNtYWxsIGEgcmluZywgVSswMEU1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWVsaWcgICImIzIzMDsiID48IS0tIGxhdGluIHNtYWxsIGFlID0gbGF0aW4gc21hbGwgbGlnYXR1cmUgYWUsIFUrMDBFNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGNjZWRpbCAiJiMyMzE7IiA+PCEtLSBsYXRpbiBzbWFsbCBjIHdpdGggY2VkaWxsYSwgVSswMEU3IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWdyYXZlICImIzIzMjsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBncmF2ZSwgVSswMEU4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWFjdXRlICImIzIzMzsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBhY3V0ZSwgVSswMEU5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWNpcmMgICImIzIzNDsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBldW1sICAgIiYjMjM1OyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGRpYWVyZXNpcywgVSswMEVCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWdyYXZlICImIzIzNjsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBncmF2ZSwgVSswMEVDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWFjdXRlICImIzIzNzsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBhY3V0ZSwgVSswMEVEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWNpcmMgICImIzIzODsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpdW1sICAgIiYjMjM5OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGRpYWVyZXNpcywgVSswMEVGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZXRoICAgICImIzI0MDsiID48IS0tIGxhdGluIHNtYWxsIGV0aCwgVSswMEYwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgbnRpbGRlICImIzI0MTsiID48IS0tIGxhdGluIHNtYWxsIG4gd2l0aCB0aWxkZSwgVSswMEYxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2dyYXZlICImIzI0MjsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBncmF2ZSwgVSswMEYyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2FjdXRlICImIzI0MzsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBhY3V0ZSwgVSswMEYzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2NpcmMgICImIzI0NDsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBjaXJjdW1mbGV4LCBVKzAwRjQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdGlsZGUgIiYjMjQ1OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIHRpbGRlLCBVKzAwRjUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdW1sICAgIiYjMjQ2OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGRpYWVyZXNpcywgVSswMEY2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZGl2aWRlICImIzI0NzsiID48IS0tIGRpdmlzaW9uIHNpZ24sIFUrMDBGNyBJU09udW0gLS0+DQotPCFFTlRJVFkgb3NsYXNoICImIzI0ODsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBzdHJva2UsID0gbGF0aW4gc21hbGwgbyBzbGFzaCwgVSswMEY4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWdyYXZlICImIzI0OTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBncmF2ZSwgVSswMEY5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWFjdXRlICImIzI1MDsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBhY3V0ZSwgVSswMEZBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWNpcmMgICImIzI1MTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRkIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1dW1sICAgIiYjMjUyOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGRpYWVyZXNpcywgVSswMEZDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgeWFjdXRlICImIzI1MzsiID48IS0tIGxhdGluIHNtYWxsIHkgd2l0aCBhY3V0ZSwgVSswMEZEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdGhvcm4gICImIzI1NDsiID48IS0tIGxhdGluIHNtYWxsIHRob3JuIHdpdGgsIFUrMDBGRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHl1bWwgICAiJiMyNTU7IiA+PCEtLSBsYXRpbiBzbWFsbCB5IHdpdGggZGlhZXJlc2lzLCBVKzAwRkYgSVNPbGF0MSAtLT4NCi08IS0tIGVuZCBvZiB4aHRtbC1sYXQxLmVudCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLXN5bWJvbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBJU08gTWF0aCwgR3JlZWsgYW5kIFN5bWJvbGljIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3ltYm9sLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtc3ltYm9sLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3ltYm9sOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zeW1ib2wuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0tLT4NCi0NCi08IS0tIFJlbGV2YW50IElTTyBlbnRpdHkgc2V0IGlzIGdpdmVuIHVubGVzcyBuYW1lcyBhcmUgbmV3bHkgaW50cm9kdWNlZC4NCi0gICAgIE5ldyBuYW1lcyAoaS5lLiwgbm90IGluIElTTyA4ODc5IFtTR01MXSBsaXN0KSBkbyBub3QgY2xhc2ggd2l0aA0KLSAgICAgYW55IGV4aXN0aW5nIElTTyA4ODc5IGVudGl0eSBuYW1lcy4gSVNPIDEwNjQ2IFtJU08xMDY0Nl0gY2hhcmFjdGVyDQotICAgICBudW1iZXJzIGFyZSBnaXZlbiBmb3IgZWFjaCBjaGFyYWN0ZXIsIGluIGhleC4gRW50aXR5IHZhbHVlcyBhcmUNCi0gICAgIGRlY2ltYWwgY29udmVyc2lvbnMgb2YgdGhlIElTTyAxMDY0NiB2YWx1ZXMgYW5kIHJlZmVyIHRvIHRoZQ0KLSAgICAgZG9jdW1lbnQgY2hhcmFjdGVyIHNldC4gTmFtZXMgYXJlIFVuaWNvZGUgW1VOSUNPREVdIG5hbWVzLg0KLS0tPg0KLQ0KLTwhLS0gTGF0aW4gRXh0ZW5kZWQtQiAtLT4NCi08IUVOVElUWSBmbm9mICAgICAiJiM0MDI7IiA+PCEtLSBsYXRpbiBzbWFsbCBmIHdpdGggaG9vayA9IGZ1bmN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmbG9yaW4sIFUrMDE5MiBJU090ZWNoIC0tPg0KLQ0KLTwhLS0gR3JlZWsgLS0+DQotPCFFTlRJVFkgQWxwaGEgICAgIiYjOTEzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgYWxwaGEsIFUrMDM5MSAtLT4NCi08IUVOVElUWSBCZXRhICAgICAiJiM5MTQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBiZXRhLCBVKzAzOTIgLS0+DQotPCFFTlRJVFkgR2FtbWEgICAgIiYjOTE1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZ2FtbWEsIFUrMDM5MyBJU09ncmszIC0tPg0KLTwhRU5USVRZIERlbHRhICAgICImIzkxNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGRlbHRhLCBVKzAzOTQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBFcHNpbG9uICAiJiM5MTc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBlcHNpbG9uLCBVKzAzOTUgLS0+DQotPCFFTlRJVFkgWmV0YSAgICAgIiYjOTE4OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgemV0YSwgVSswMzk2IC0tPg0KLTwhRU5USVRZIEV0YSAgICAgICImIzkxOTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGV0YSwgVSswMzk3IC0tPg0KLTwhRU5USVRZIFRoZXRhICAgICImIzkyMDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHRoZXRhLCBVKzAzOTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBJb3RhICAgICAiJiM5MjE7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBpb3RhLCBVKzAzOTkgLS0+DQotPCFFTlRJVFkgS2FwcGEgICAgIiYjOTIyOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIga2FwcGEsIFUrMDM5QSAtLT4NCi08IUVOVElUWSBMYW1iZGEgICAiJiM5MjM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBsYW1iZGEsIFUrMDM5QiBJU09ncmszIC0tPg0KLTwhRU5USVRZIE11ICAgICAgICImIzkyNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG11LCBVKzAzOUMgLS0+DQotPCFFTlRJVFkgTnUgICAgICAgIiYjOTI1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbnUsIFUrMDM5RCAtLT4NCi08IUVOVElUWSBYaSAgICAgICAiJiM5MjY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB4aSwgVSswMzlFIElTT2dyazMgLS0+DQotPCFFTlRJVFkgT21pY3JvbiAgIiYjOTI3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgb21pY3JvbiwgVSswMzlGIC0tPg0KLTwhRU5USVRZIFBpICAgICAgICImIzkyODsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBpLCBVKzAzQTAgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBSaG8gICAgICAiJiM5Mjk7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciByaG8sIFUrMDNBMSAtLT4NCi08IS0tIHRoZXJlIGlzIG5vIFNpZ21hZiwgYW5kIG5vIFUrMDNBMiBjaGFyYWN0ZXIgZWl0aGVyIC0tPg0KLTwhRU5USVRZIFNpZ21hICAgICImIzkzMTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hLCBVKzAzQTMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBUYXUgICAgICAiJiM5MzI7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB0YXUsIFUrMDNBNCAtLT4NCi08IUVOVElUWSBVcHNpbG9uICAiJiM5MzM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB1cHNpbG9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUrMDNBNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIFBoaSAgICAgICImIzkzNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBoaSwgVSswM0E2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgQ2hpICAgICAgIiYjOTM1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgY2hpLCBVKzAzQTcgLS0+DQotPCFFTlRJVFkgUHNpICAgICAgIiYjOTM2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcHNpLCBVKzAzQTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBPbWVnYSAgICAiJiM5Mzc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBvbWVnYSwgVSswM0E5IElTT2dyazMgLS0+DQotPCFFTlRJVFkgYWxwaGEgICAgIiYjOTQ1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGFscGhhLCBVKzAzQjEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBiZXRhICAgICAiJiM5NDY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgYmV0YSwgVSswM0IyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgZ2FtbWEgICAgIiYjOTQ3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGdhbW1hLCBVKzAzQjMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBkZWx0YSAgICAiJiM5NDg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZGVsdGEsIFUrMDNCNCBJU09ncmszIC0tPg0KLTwhRU5USVRZIGVwc2lsb24gICImIzk0OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBlcHNpbG9uLCBVKzAzQjUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB6ZXRhICAgICAiJiM5NTA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgemV0YSwgVSswM0I2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgZXRhICAgICAgIiYjOTUxOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGV0YSwgVSswM0I3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGhldGEgICAgIiYjOTUyOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRoZXRhLCBVKzAzQjggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBpb3RhICAgICAiJiM5NTM7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgaW90YSwgVSswM0I5IElTT2dyazMgLS0+DQotPCFFTlRJVFkga2FwcGEgICAgIiYjOTU0OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGthcHBhLCBVKzAzQkEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBsYW1iZGEgICAiJiM5NTU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbGFtYmRhLCBVKzAzQkIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBtdSAgICAgICAiJiM5NTY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbXUsIFUrMDNCQyBJU09ncmszIC0tPg0KLTwhRU5USVRZIG51ICAgICAgICImIzk1NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBudSwgVSswM0JEIElTT2dyazMgLS0+DQotPCFFTlRJVFkgeGkgICAgICAgIiYjOTU4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHhpLCBVKzAzQkUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBvbWljcm9uICAiJiM5NTk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgb21pY3JvbiwgVSswM0JGIE5FVyAtLT4NCi08IUVOVElUWSBwaSAgICAgICAiJiM5NjA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcGksIFUrMDNDMCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHJobyAgICAgICImIzk2MTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciByaG8sIFUrMDNDMSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHNpZ21hZiAgICImIzk2MjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBmaW5hbCBzaWdtYSwgVSswM0MyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgc2lnbWEgICAgIiYjOTYzOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHNpZ21hLCBVKzAzQzMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0YXUgICAgICAiJiM5NjQ7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGF1LCBVKzAzQzQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB1cHNpbG9uICAiJiM5NjU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdXBzaWxvbiwgVSswM0M1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcGhpICAgICAgIiYjOTY2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBoaSwgVSswM0M2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgY2hpICAgICAgIiYjOTY3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGNoaSwgVSswM0M3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcHNpICAgICAgIiYjOTY4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBzaSwgVSswM0M4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgb21lZ2EgICAgIiYjOTY5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG9tZWdhLCBVKzAzQzkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0aGV0YXN5bSAiJiM5Nzc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGhldGEgc3ltYm9sLCBVKzAzRDEgTkVXIC0tPg0KLTwhRU5USVRZIHVwc2loICAgICImIzk3ODsiID48IS0tIGdyZWVrIHVwc2lsb24gd2l0aCBob29rIHN5bWJvbCwgVSswM0QyIE5FVyAtLT4NCi08IUVOVElUWSBwaXYgICAgICAiJiM5ODI7IiA+PCEtLSBncmVlayBwaSBzeW1ib2wsIFUrMDNENiBJU09ncmszIC0tPg0KLQ0KLTwhLS0gR2VuZXJhbCBQdW5jdHVhdGlvbiAtLT4NCi08IUVOVElUWSBidWxsICAgICAiJiM4MjI2OyIgPjwhLS0gYnVsbGV0ID0gYmxhY2sgc21hbGwgY2lyY2xlLCBVKzIwMjIgSVNPcHViICAtLT4NCi08IS0tIGJ1bGxldCBpcyBOT1QgdGhlIHNhbWUgYXMgYnVsbGV0IG9wZXJhdG9yLCBVKzIyMTkgLS0+DQotPCFFTlRJVFkgaGVsbGlwICAgIiYjODIzMDsiID48IS0tIGhvcml6b250YWwgZWxsaXBzaXMgPSB0aHJlZSBkb3QgbGVhZGVyLCBVKzIwMjYgSVNPcHViICAtLT4NCi08IUVOVElUWSBwcmltZSAgICAiJiM4MjQyOyIgPjwhLS0gcHJpbWUgPSBtaW51dGVzID0gZmVldCwgVSsyMDMyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgUHJpbWUgICAgIiYjODI0MzsiID48IS0tIGRvdWJsZSBwcmltZSA9IHNlY29uZHMgPSBpbmNoZXMsIFUrMjAzMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9saW5lICAgICImIzgyNTQ7IiA+PCEtLSBvdmVybGluZSA9IHNwYWNpbmcgb3ZlcnNjb3JlLCBVKzIwM0UgTkVXIC0tPg0KLTwhRU5USVRZIGZyYXNsICAgICImIzgyNjA7IiA+PCEtLSBmcmFjdGlvbiBzbGFzaCwgVSsyMDQ0IE5FVyAtLT4NCi0NCi08IS0tIExldHRlcmxpa2UgU3ltYm9scyAtLT4NCi08IUVOVElUWSB3ZWllcnAgICAiJiM4NDcyOyIgPjwhLS0gc2NyaXB0IGNhcGl0YWwgUCA9IHBvd2VyIHNldCA9IFdlaWVyc3RyYXNzIHAsIFUrMjExOCBJU09hbXNvIC0tPg0KLTwhRU5USVRZIGltYWdlICAgICImIzg0NjU7IiA+PCEtLSBibGFja2xldHRlciBjYXBpdGFsIEkgPSBpbWFnaW5hcnkgcGFydCwgVSsyMTExIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgcmVhbCAgICAgIiYjODQ3NjsiID48IS0tIGJsYWNrbGV0dGVyIGNhcGl0YWwgUiA9IHJlYWwgcGFydCBzeW1ib2wsIFUrMjExQyBJU09hbXNvIC0tPg0KLTwhRU5USVRZIHRyYWRlICAgICImIzg0ODI7IiA+PCEtLSB0cmFkZSBtYXJrIHNpZ24sIFUrMjEyMiBJU09udW0gLS0+DQotPCFFTlRJVFkgYWxlZnN5bSAgIiYjODUwMTsiID48IS0tIGFsZWYgc3ltYm9sID0gZmlyc3QgdHJhbnNmaW5pdGUgY2FyZGluYWwsIFUrMjEzNSBORVcgLS0+DQotPCEtLSBhbGVmIHN5bWJvbCBpcyBOT1QgdGhlIHNhbWUgYXMgaGVicmV3IGxldHRlciBhbGVmLCBVKzA1RDAgYWx0aG91Z2gNCi0gICAgIHRoZSBzYW1lIGdseXBoIGNvdWxkIGJlIHVzZWQgdG8gZGVwaWN0IGJvdGggY2hhcmFjdGVycyAtLT4NCi0NCi08IS0tIEFycm93cyAtLT4NCi08IUVOVElUWSBsYXJyICAgICAiJiM4NTkyOyIgPjwhLS0gbGVmdHdhcmRzIGFycm93LCBVKzIxOTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVhcnIgICAgICImIzg1OTM7IiA+PCEtLSB1cHdhcmRzIGFycm93LCBVKzIxOTEgSVNPbnVtLS0+DQotPCFFTlRJVFkgcmFyciAgICAgIiYjODU5NDsiID48IS0tIHJpZ2h0d2FyZHMgYXJyb3csIFUrMjE5MiBJU09udW0gLS0+DQotPCFFTlRJVFkgZGFyciAgICAgIiYjODU5NTsiID48IS0tIGRvd253YXJkcyBhcnJvdywgVSsyMTkzIElTT251bSAtLT4NCi08IUVOVElUWSBoYXJyICAgICAiJiM4NTk2OyIgPjwhLS0gbGVmdCByaWdodCBhcnJvdywgVSsyMTk0IElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgY3JhcnIgICAgIiYjODYyOTsiID48IS0tIGRvd253YXJkcyBhcnJvdyB3aXRoIGNvcm5lciBsZWZ0d2FyZHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjYXJyaWFnZSByZXR1cm4sIFUrMjFCNSBORVcgLS0+DQotPCFFTlRJVFkgbEFyciAgICAgIiYjODY1NjsiID48IS0tIGxlZnR3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMCBJU090ZWNoIC0tPg0KLTwhLS0gVW5pY29kZSBkb2VzIG5vdCBzYXkgdGhhdCBsQXJyIGlzIHRoZSBzYW1lIGFzIHRoZSAnaXMgaW1wbGllZCBieScgYXJyb3cNCi0gICAgYnV0IGFsc28gZG9lcyBub3QgaGF2ZSBhbnkgb3RoZXIgY2hhcmFjdGVyIGZvciB0aGF0IGZ1bmN0aW9uLiBTbyA/IGxBcnIgY2FuDQotICAgIGJlIHVzZWQgZm9yICdpcyBpbXBsaWVkIGJ5JyBhcyBJU090ZWNoIHN1Z2dlc3RzIC0tPg0KLTwhRU5USVRZIHVBcnIgICAgICImIzg2NTc7IiA+PCEtLSB1cHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQxIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgckFyciAgICAgIiYjODY1ODsiID48IS0tIHJpZ2h0d2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDIgSVNPdGVjaCAtLT4NCi08IS0tIFVuaWNvZGUgZG9lcyBub3Qgc2F5IHRoaXMgaXMgdGhlICdpbXBsaWVzJyBjaGFyYWN0ZXIgYnV0IGRvZXMgbm90IGhhdmUNCi0gICAgIGFub3RoZXIgY2hhcmFjdGVyIHdpdGggdGhpcyBmdW5jdGlvbiBzbyA/DQotICAgICByQXJyIGNhbiBiZSB1c2VkIGZvciAnaW1wbGllcycgYXMgSVNPdGVjaCBzdWdnZXN0cyAtLT4NCi08IUVOVElUWSBkQXJyICAgICAiJiM4NjU5OyIgPjwhLS0gZG93bndhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQzIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgaEFyciAgICAgIiYjODY2MDsiID48IS0tIGxlZnQgcmlnaHQgZG91YmxlIGFycm93LCBVKzIxRDQgSVNPYW1zYSAtLT4NCi0NCi08IS0tIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMgLS0+DQotPCFFTlRJVFkgZm9yYWxsICAgIiYjODcwNDsiID48IS0tIGZvciBhbGwsIFUrMjIwMCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHBhcnQgICAgICImIzg3MDY7IiA+PCEtLSBwYXJ0aWFsIGRpZmZlcmVudGlhbCwgVSsyMjAyIElTT3RlY2ggIC0tPg0KLTwhRU5USVRZIGV4aXN0ICAgICImIzg3MDc7IiA+PCEtLSB0aGVyZSBleGlzdHMsIFUrMjIwMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVtcHR5ICAgICImIzg3MDk7IiA+PCEtLSBlbXB0eSBzZXQgPSBudWxsIHNldCA9IGRpYW1ldGVyLCBVKzIyMDUgSVNPYW1zbyAtLT4NCi08IUVOVElUWSBuYWJsYSAgICAiJiM4NzExOyIgPjwhLS0gbmFibGEgPSBiYWNrd2FyZCBkaWZmZXJlbmNlLCBVKzIyMDcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpc2luICAgICAiJiM4NzEyOyIgPjwhLS0gZWxlbWVudCBvZiwgVSsyMjA4IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbm90aW4gICAgIiYjODcxMzsiID48IS0tIG5vdCBhbiBlbGVtZW50IG9mLCBVKzIyMDkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBuaSAgICAgICAiJiM4NzE1OyIgPjwhLS0gY29udGFpbnMgYXMgbWVtYmVyLCBVKzIyMEIgSVNPdGVjaCAtLT4NCi08IS0tIHNob3VsZCB0aGVyZSBiZSBhIG1vcmUgbWVtb3JhYmxlIG5hbWUgdGhhbiAnbmknPyAtLT4NCi08IUVOVElUWSBwcm9kICAgICAiJiM4NzE5OyIgPjwhLS0gbi1hcnkgcHJvZHVjdCA9IHByb2R1Y3Qgc2lnbiwgVSsyMjBGIElTT2Ftc2IgLS0+DQotPCEtLSBwcm9kIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswM0EwICdncmVlayBjYXBpdGFsIGxldHRlciBwaScgdGhvdWdoDQotICAgICB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIGZvciBib3RoIC0tPg0KLTwhRU5USVRZIHN1bSAgICAgICImIzg3MjE7IiA+PCEtLSBuLWFyeSBzdW1hdGlvbiwgVSsyMjExIElTT2Ftc2IgLS0+DQotPCEtLSBzdW0gaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAzQTMgJ2dyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hJw0KLSAgICAgdGhvdWdoIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgZm9yIGJvdGggLS0+DQotPCFFTlRJVFkgbWludXMgICAgIiYjODcyMjsiID48IS0tIG1pbnVzIHNpZ24sIFUrMjIxMiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxvd2FzdCAgICImIzg3Mjc7IiA+PCEtLSBhc3RlcmlzayBvcGVyYXRvciwgVSsyMjE3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcmFkaWMgICAgIiYjODczMDsiID48IS0tIHNxdWFyZSByb290ID0gcmFkaWNhbCBzaWduLCBVKzIyMUEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBwcm9wICAgICAiJiM4NzMzOyIgPjwhLS0gcHJvcG9ydGlvbmFsIHRvLCBVKzIyMUQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpbmZpbiAgICAiJiM4NzM0OyIgPjwhLS0gaW5maW5pdHksIFUrMjIxRSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGFuZyAgICAgICImIzg3MzY7IiA+PCEtLSBhbmdsZSwgVSsyMjIwIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgYW5kICAgICAgIiYjODc0MzsiID48IS0tIGxvZ2ljYWwgYW5kID0gd2VkZ2UsIFUrMjIyNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9yICAgICAgICImIzg3NDQ7IiA+PCEtLSBsb2dpY2FsIG9yID0gdmVlLCBVKzIyMjggSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjYXAgICAgICAiJiM4NzQ1OyIgPjwhLS0gaW50ZXJzZWN0aW9uID0gY2FwLCBVKzIyMjkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjdXAgICAgICAiJiM4NzQ2OyIgPjwhLS0gdW5pb24gPSBjdXAsIFUrMjIyQSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGludCAgICAgICImIzg3NDc7IiA+PCEtLSBpbnRlZ3JhbCwgVSsyMjJCIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgdGhlcmU0ICAgIiYjODc1NjsiID48IS0tIHRoZXJlZm9yZSwgVSsyMjM0IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc2ltICAgICAgIiYjODc2NDsiID48IS0tIHRpbGRlIG9wZXJhdG9yID0gdmFyaWVzIHdpdGggPSBzaW1pbGFyIHRvLCBVKzIyM0MgSVNPdGVjaCAtLT4NCi08IS0tIHRpbGRlIG9wZXJhdG9yIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgdGhlIHRpbGRlLCBVKzAwN0UsDQotICAgICBhbHRob3VnaCB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIHRvIHJlcHJlc2VudCBib3RoICAtLT4NCi08IUVOVElUWSBjb25nICAgICAiJiM4NzczOyIgPjwhLS0gYXBwcm94aW1hdGVseSBlcXVhbCB0bywgVSsyMjQ1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgYXN5bXAgICAgIiYjODc3NjsiID48IS0tIGFsbW9zdCBlcXVhbCB0byA9IGFzeW1wdG90aWMgdG8sIFUrMjI0OCBJU09hbXNyIC0tPg0KLTwhRU5USVRZIG5lICAgICAgICImIzg4MDA7IiA+PCEtLSBub3QgZXF1YWwgdG8sIFUrMjI2MCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVxdWl2ICAgICImIzg4MDE7IiA+PCEtLSBpZGVudGljYWwgdG8sIFUrMjI2MSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxlICAgICAgICImIzg4MDQ7IiA+PCEtLSBsZXNzLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGdlICAgICAgICImIzg4MDU7IiA+PCEtLSBncmVhdGVyLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1YiAgICAgICImIzg4MzQ7IiA+PCEtLSBzdWJzZXQgb2YsIFUrMjI4MiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1cCAgICAgICImIzg4MzU7IiA+PCEtLSBzdXBlcnNldCBvZiwgVSsyMjgzIElTT3RlY2ggLS0+DQotPCEtLSBub3RlIHRoYXQgbnN1cCwgJ25vdCBhIHN1cGVyc2V0IG9mLCBVKzIyODMnIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBTeW1ib2wNCi0gICAgIGZvbnQgZW5jb2RpbmcgYW5kIGlzIG5vdCBpbmNsdWRlZC4gU2hvdWxkIGl0IGJlLCBmb3Igc3ltbWV0cnk/DQotICAgICBJdCBpcyBpbiBJU09hbXNuICAtLT4NCi08IUVOVElUWSBuc3ViICAgICAiJiM4ODM2OyIgPjwhLS0gbm90IGEgc3Vic2V0IG9mLCBVKzIyODQgSVNPYW1zbiAtLT4NCi08IUVOVElUWSBzdWJlICAgICAiJiM4ODM4OyIgPjwhLS0gc3Vic2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODYgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdXBlICAgICAiJiM4ODM5OyIgPjwhLS0gc3VwZXJzZXQgb2Ygb3IgZXF1YWwgdG8sIFUrMjI4NyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9wbHVzICAgICImIzg4NTM7IiA+PCEtLSBjaXJjbGVkIHBsdXMgPSBkaXJlY3Qgc3VtLCBVKzIyOTUgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBvdGltZXMgICAiJiM4ODU1OyIgPjwhLS0gY2lyY2xlZCB0aW1lcyA9IHZlY3RvciBwcm9kdWN0LCBVKzIyOTcgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBwZXJwICAgICAiJiM4ODY5OyIgPjwhLS0gdXAgdGFjayA9IG9ydGhvZ29uYWwgdG8gPSBwZXJwZW5kaWN1bGFyLCBVKzIyQTUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzZG90ICAgICAiJiM4OTAxOyIgPjwhLS0gZG90IG9wZXJhdG9yLCBVKzIyQzUgSVNPYW1zYiAtLT4NCi08IS0tIGRvdCBvcGVyYXRvciBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDBCNyBtaWRkbGUgZG90IC0tPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBUZWNobmljYWwgLS0+DQotPCFFTlRJVFkgbGNlaWwgICAgIiYjODk2ODsiID48IS0tIGxlZnQgY2VpbGluZyA9IGFwbCB1cHN0aWxlLCBVKzIzMDggSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgcmNlaWwgICAgIiYjODk2OTsiID48IS0tIHJpZ2h0IGNlaWxpbmcsIFUrMjMwOSBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsZmxvb3IgICAiJiM4OTcwOyIgPjwhLS0gbGVmdCBmbG9vciA9IGFwbCBkb3duc3RpbGUsIFUrMjMwQSBJU09hbXNjICAtLT4NCi08IUVOVElUWSByZmxvb3IgICAiJiM4OTcxOyIgPjwhLS0gcmlnaHQgZmxvb3IsIFUrMjMwQiBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsYW5nICAgICAiJiM5MDAxOyIgPjwhLS0gbGVmdC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0gYnJhLCBVKzIzMjkgSVNPdGVjaCAtLT4NCi08IS0tIGxhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0MgJ2xlc3MgdGhhbicNCi0gICAgIG9yIFUrMjAzOSAnc2luZ2xlIGxlZnQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmsnIC0tPg0KLTwhRU5USVRZIHJhbmcgICAgICImIzkwMDI7IiA+PCEtLSByaWdodC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0ga2V0LCBVKzIzMkEgSVNPdGVjaCAtLT4NCi08IS0tIHJhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0UgJ2dyZWF0ZXIgdGhhbicNCi0gICAgIG9yIFUrMjAzQSAnc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrJyAtLT4NCi0NCi08IS0tIEdlb21ldHJpYyBTaGFwZXMgLS0+DQotPCFFTlRJVFkgbG96ICAgICAgIiYjOTY3NDsiID48IS0tIGxvemVuZ2UsIFUrMjVDQSBJU09wdWIgLS0+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIFN5bWJvbHMgLS0+DQotPCFFTlRJVFkgc3BhZGVzICAgIiYjOTgyNDsiID48IS0tIGJsYWNrIHNwYWRlIHN1aXQsIFUrMjY2MCBJU09wdWIgLS0+DQotPCEtLSBibGFjayBoZXJlIHNlZW1zIHRvIG1lYW4gZmlsbGVkIGFzIG9wcG9zZWQgdG8gaG9sbG93IC0tPg0KLTwhRU5USVRZIGNsdWJzICAgICImIzk4Mjc7IiA+PCEtLSBibGFjayBjbHViIHN1aXQgPSBzaGFtcm9jaywgVSsyNjYzIElTT3B1YiAtLT4NCi08IUVOVElUWSBoZWFydHMgICAiJiM5ODI5OyIgPjwhLS0gYmxhY2sgaGVhcnQgc3VpdCA9IHZhbGVudGluZSwgVSsyNjY1IElTT3B1YiAtLT4NCi08IUVOVElUWSBkaWFtcyAgICAiJiM5ODMwOyIgPjwhLS0gYmxhY2sgZGlhbW9uZCBzdWl0LCBVKzI2NjYgSVNPcHViIC0tPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN5bWJvbC5lbnQgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtc3BlY2lhbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYTUwtY29tcGF0aWJsZSBJU08gU3BlY2lhbCBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3BlY2lhbC5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1zcGVjaWFsLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3BlY2lhbDsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3BlY2lhbC5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLTIwMDAtMTAtMjg6IGFkZGVkICZhcG9zOyBhbmQgYWx0ZXJlZCBYTUwgUHJlZGVmaW5lZCBFbnRpdGllcyBmb3IgY29tcGF0aWJpbGl0eQ0KLS0tPg0KLQ0KLTwhLS0gUmVsZXZhbnQgSVNPIGVudGl0eSBzZXQgaXMgZ2l2ZW4gdW5sZXNzIG5hbWVzIGFyZSBuZXdseSBpbnRyb2R1Y2VkLg0KLSAgICAgTmV3IG5hbWVzIChpLmUuLCBub3QgaW4gSVNPIDg4NzkgW1NHTUxdIGxpc3QpIGRvIG5vdCBjbGFzaCB3aXRoDQotICAgICBhbnkgZXhpc3RpbmcgSVNPIDg4NzkgZW50aXR5IG5hbWVzLiBJU08gMTA2NDYgW0lTTzEwNjQ2XSBjaGFyYWN0ZXINCi0gICAgIG51bWJlcnMgYXJlIGdpdmVuIGZvciBlYWNoIGNoYXJhY3RlciwgaW4gaGV4LiBFbnRpdHkgdmFsdWVzIGFyZQ0KLSAgICAgZGVjaW1hbCBjb252ZXJzaW9ucyBvZiB0aGUgSVNPIDEwNjQ2IHZhbHVlcyBhbmQgcmVmZXIgdG8gdGhlDQotICAgICBkb2N1bWVudCBjaGFyYWN0ZXIgc2V0LiBOYW1lcyBhcmUgVW5pY29kZSBbVU5JQ09ERV0gbmFtZXMuDQotLS0+DQotDQotPCEtLSBDMCBDb250cm9scyBhbmQgQmFzaWMgTGF0aW4gLS0+DQotPCFFTlRJVFkgbHQgICAgICAiJiMzODsmIzYwOyIgPjwhLS0gbGVzcy10aGFuIHNpZ24sIFUrMDAzQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZ3QgICAgICAiJiM2MjsiID48IS0tIGdyZWF0ZXItdGhhbiBzaWduLCBVKzAwM0UgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFtcCAgICAgIiYjMzg7JiMzODsiID48IS0tIGFtcGVyc2FuZCwgVSswMDI2IElTT251bSAtLT4NCi08IUVOVElUWSBhcG9zICAgICImIzM5OyIgPjwhLS0gYXBvc3Ryb3BoZSwgVSswMDI3IElTT251bSAtLT4NCi08IUVOVElUWSBxdW90ICAgICImIzM0OyIgPjwhLS0gcXVvdGF0aW9uIG1hcmsgPSBBUEwgcXVvdGUsIFUrMDAyMiBJU09udW0gLS0+DQotDQotPCEtLSBMYXRpbiBFeHRlbmRlZC1BIC0tPg0KLTwhRU5USVRZIE9FbGlnICAgIiYjMzM4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBPRSwgVSswMTUyIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgb2VsaWcgICAiJiMzMzk7IiA+PCEtLSBsYXRpbiBzbWFsbCBsaWdhdHVyZSBvZSwgVSswMTUzIElTT2xhdDIgLS0+DQotDQotPCEtLSBsaWdhdHVyZSBpcyBhIG1pc25vbWVyLCB0aGlzIGlzIGEgc2VwYXJhdGUgY2hhcmFjdGVyIGluIHNvbWUgbGFuZ3VhZ2VzIC0tPg0KLTwhRU5USVRZIFNjYXJvbiAgIiYjMzUyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgUyB3aXRoIGNhcm9uLCBVKzAxNjAgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBzY2Fyb24gICImIzM1MzsiID48IS0tIGxhdGluIHNtYWxsIGxldHRlciBzIHdpdGggY2Fyb24sIFUrMDE2MSBJU09sYXQyIC0tPg0KLTwhRU5USVRZIFl1bWwgICAgIiYjMzc2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgWSB3aXRoIGRpYWVyZXNpcywgVSswMTc4IElTT2xhdDIgLS0+DQotDQotPCEtLSBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMgLS0+DQotPCFFTlRJVFkgY2lyYyAgICAiJiM3MTA7IiA+PCEtLSBtb2RpZmllciBsZXR0ZXIgY2lyY3VtZmxleCBhY2NlbnQsIFUrMDJDNiBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGlsZGUgICAiJiM3MzI7IiA+PCEtLSBzbWFsbCB0aWxkZSwgVSswMkRDIElTT2RpYSAtLT4NCi0NCi08IS0tIEdlbmVyYWwgUHVuY3R1YXRpb24gLS0+DQotPCFFTlRJVFkgZW5zcCAgICAiJiM4MTk0OyIgPjwhLS0gZW4gc3BhY2UsIFUrMjAwMiBJU09wdWIgLS0+DQotPCFFTlRJVFkgZW1zcCAgICAiJiM4MTk1OyIgPjwhLS0gZW0gc3BhY2UsIFUrMjAwMyBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGhpbnNwICAiJiM4MjAxOyIgPjwhLS0gdGhpbiBzcGFjZSwgVSsyMDA5IElTT3B1YiAtLT4NCi08IUVOVElUWSB6d25qICAgICImIzgyMDQ7IiA+PCEtLSB6ZXJvIHdpZHRoIG5vbi1qb2luZXIsIFUrMjAwQyBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgendqICAgICAiJiM4MjA1OyIgPjwhLS0gemVybyB3aWR0aCBqb2luZXIsIFUrMjAwRCBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgbHJtICAgICAiJiM4MjA2OyIgPjwhLS0gbGVmdC10by1yaWdodCBtYXJrLCBVKzIwMEUgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIHJsbSAgICAgIiYjODIwNzsiID48IS0tIHJpZ2h0LXRvLWxlZnQgbWFyaywgVSsyMDBGIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBuZGFzaCAgICImIzgyMTE7IiA+PCEtLSBlbiBkYXNoLCBVKzIwMTMgSVNPcHViIC0tPg0KLTwhRU5USVRZIG1kYXNoICAgIiYjODIxMjsiID48IS0tIGVtIGRhc2gsIFUrMjAxNCBJU09wdWIgLS0+DQotPCFFTlRJVFkgbHNxdW8gICAiJiM4MjE2OyIgPjwhLS0gbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxOCBJU09udW0gLS0+DQotPCFFTlRJVFkgcnNxdW8gICAiJiM4MjE3OyIgPjwhLS0gcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMTkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNicXVvICAgIiYjODIxODsiID48IS0tIHNpbmdsZSBsb3ctOSBxdW90YXRpb24gbWFyaywgVSsyMDFBIE5FVyAtLT4NCi08IUVOVElUWSBsZHF1byAgICImIzgyMjA7IiA+PCEtLSBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyaywgVSsyMDFDIElTT251bSAtLT4NCi08IUVOVElUWSByZHF1byAgICImIzgyMjE7IiA+PCEtLSByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxRCBJU09udW0gLS0+DQotPCFFTlRJVFkgYmRxdW8gICAiJiM4MjIyOyIgPjwhLS0gZG91YmxlIGxvdy05IHF1b3RhdGlvbiBtYXJrLCBVKzIwMUUgTkVXIC0tPg0KLTwhRU5USVRZIGRhZ2dlciAgIiYjODIyNDsiID48IS0tIGRhZ2dlciwgVSsyMDIwIElTT3B1YiAtLT4NCi08IUVOVElUWSBEYWdnZXIgICImIzgyMjU7IiA+PCEtLSBkb3VibGUgZGFnZ2VyLCBVKzIwMjEgSVNPcHViIC0tPg0KLTwhRU5USVRZIHBlcm1pbCAgIiYjODI0MDsiID48IS0tIHBlciBtaWxsZSBzaWduLCBVKzIwMzAgSVNPdGVjaCAtLT4NCi0NCi08IS0tIGxzYXF1byBpcyBwcm9wb3NlZCBidXQgbm90IHlldCBJU08gc3RhbmRhcmRpemVkIC0tPg0KLTwhRU5USVRZIGxzYXF1byAgIiYjODI0OTsiID48IS0tIHNpbmdsZSBsZWZ0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMzkgSVNPIHByb3Bvc2VkIC0tPg0KLTwhLS0gcnNhcXVvIGlzIHByb3Bvc2VkIGJ1dCBub3QgeWV0IElTTyBzdGFuZGFyZGl6ZWQgLS0+DQotPCFFTlRJVFkgcnNhcXVvICAiJiM4MjUwOyIgPjwhLS0gc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwM0EgSVNPIHByb3Bvc2VkIC0tPg0KLTwhRU5USVRZIGV1cm8gICAgIiYjODM2NDsiID48IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zcGVjaWFsLmVudCAtLT4NCi0NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1jaGFyZW50LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWZyYW1ld29yay0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFhIVE1MIENvcmUgTW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgKSoiDQotPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtdGV4dC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXRleHQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBUZXh0dWFsIENvbnRlbnQNCi0NCi0gICAgIFRoZSBUZXh0IG1vZHVsZSBpbmNsdWRlcyBkZWNsYXJhdGlvbnMgZm9yIGFsbCBjb3JlDQotICAgICB0ZXh0IGNvbnRhaW5lciBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWlubHN0cnVjdC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtaW5sc3RydWN0Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtaW5sc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHN0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHJ1Y3R1cmFsDQotDQotICAgICAgICBiciwgc3Bhbg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzDQotICAgICB1c2VkIHRvIHN1cHBvcnQgaW5saW5lLWxldmVsIHN0cnVjdHVyYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhLS0gYnI6IGZvcmNlZCBsaW5lIGJyZWFrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYnIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYnIuZWxlbWVudDtbDQotDQotPCFFTlRJVFkgJSBici5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGJyLnFuYW1lICAiYnIiID4NCi08IUVMRU1FTlQgJWJyLnFuYW1lOyAgJWJyLmNvbnRlbnQ7ID4NCi0NCi08IS0tIGVuZCBvZiBici5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYnIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYnIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVici5xbmFtZTsNCi0gICAgICAlQ29yZS5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBzcGFuOiBnZW5lcmljIGlubGluZSBjb250YWluZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzcGFuLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNwYW4uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzcGFuLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3Bhbi5xbmFtZSAgInNwYW4iID4NCi08IUVMRU1FTlQgJXNwYW4ucW5hbWU7ICAlc3Bhbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3Bhbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Bhbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzcGFuLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3Bhbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3Bhbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0cnVjdC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWlubHBocmFzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1pbmxwaHJhcy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtaW5scGhyYXMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtaW5scGhyYXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgUGhyYXNhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5scGhyYXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHBocmFzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBQaHJhc2FsDQotDQotICAgICAgICBhYmJyLCBhY3JvbnltLCBjaXRlLCBjb2RlLCBkZm4sIGVtLCBrYmQsIHEsIHNhbXAsIHN0cm9uZywgdmFyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBpbmxpbmUtbGV2ZWwgcGhyYXNhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBhYmJyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFiYnIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhYmJyLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYWJici5xbmFtZSAgImFiYnIiID4NCi08IUVMRU1FTlQgJWFiYnIucW5hbWU7ICAlYWJici5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWJici5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWJici5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhYmJyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWJici5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWJici5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWNyb255bS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhY3JvbnltLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWNyb255bS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGFjcm9ueW0ucW5hbWUgICJhY3JvbnltIiA+DQotPCFFTEVNRU5UICVhY3JvbnltLnFuYW1lOyAgJWFjcm9ueW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFjcm9ueW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFjcm9ueW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWNyb255bS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFjcm9ueW0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFjcm9ueW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNpdGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2l0ZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNpdGUuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBjaXRlLnFuYW1lICAiY2l0ZSIgPg0KLTwhRUxFTUVOVCAlY2l0ZS5xbmFtZTsgICVjaXRlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjaXRlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjaXRlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNpdGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjaXRlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjaXRlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjb2RlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNvZGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjb2RlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgY29kZS5xbmFtZSAgImNvZGUiID4NCi08IUVMRU1FTlQgJWNvZGUucW5hbWU7ICAlY29kZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY29kZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY29kZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjb2RlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY29kZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY29kZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGZuLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRmbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRmbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGRmbi5xbmFtZSAgImRmbiIgPg0KLTwhRUxFTUVOVCAlZGZuLnFuYW1lOyAgJWRmbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGZuLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZm4uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGZuLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGZuLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkZm4uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGVtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWVtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZW0uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBlbS5xbmFtZSAgImVtIiA+DQotPCFFTEVNRU5UICVlbS5xbmFtZTsgICVlbS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGVtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWVtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZW0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGVtLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBrYmQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsla2JkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUga2JkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUga2JkLnFuYW1lICAia2JkIiA+DQotPCFFTEVNRU5UICVrYmQucW5hbWU7ICAla2JkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBrYmQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGtiZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVrYmQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVrYmQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGtiZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVxLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHEucW5hbWUgICJxIiA+DQotPCFFTEVNRU5UICVxLnFuYW1lOyAgJXEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2l0ZSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBxLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzYW1wLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNhbXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzYW1wLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc2FtcC5xbmFtZSAgInNhbXAiID4NCi08IUVMRU1FTlQgJXNhbXAucW5hbWU7ICAlc2FtcC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc2FtcC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2FtcC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzYW1wLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc2FtcC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc2FtcC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Ryb25nLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN0cm9uZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN0cm9uZy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN0cm9uZy5xbmFtZSAgInN0cm9uZyIgPg0KLTwhRUxFTUVOVCAlc3Ryb25nLnFuYW1lOyAgJXN0cm9uZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3Ryb25nLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHJvbmcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3Ryb25nLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3Ryb25nLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdHJvbmcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHZhci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV2YXIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB2YXIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB2YXIucW5hbWUgICJ2YXIiID4NCi08IUVMRU1FTlQgJXZhci5xbmFtZTsgICV2YXIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHZhci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdmFyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXZhci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXZhci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdmFyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scGhyYXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtzdHJ1Y3QubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWJsa3N0cnVjdC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYmxrc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYmxrc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgU3RydWN0dXJhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3N0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtzdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgU3RydWN0dXJhbA0KLQ0KLSAgICAgICAgZGl2LCBwDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBzdHJ1Y3R1cmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGRpdi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkaXYuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkaXYuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZGl2LnFuYW1lICAiZGl2IiA+DQotPCFFTEVNRU5UICVkaXYucW5hbWU7ICAlZGl2LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkaXYuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRpdi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkaXYuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkaXYucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRpdi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotPCFFTlRJVFkgJSBwLnFuYW1lICAicCIgPg0KLTwhRUxFTUVOVCAlcC5xbmFtZTsgICVwLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBwLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrc3RydWN0LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYmxrcGhyYXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWJsa3BocmFzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwaHJhcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWJsa3BocmFzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgUGhyYXNhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3BocmFzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3BocmFzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFBocmFzYWwNCi0NCi0gICAgICAgIGFkZHJlc3MsIGJsb2NrcXVvdGUsIHByZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgcGhyYXNhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBhZGRyZXNzLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFkZHJlc3MuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhZGRyZXNzLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi08IUVOVElUWSAlIGFkZHJlc3MucW5hbWUgICJhZGRyZXNzIiA+DQotPCFFTEVNRU5UICVhZGRyZXNzLnFuYW1lOyAgJWFkZHJlc3MuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFkZHJlc3MuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFkZHJlc3MuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWRkcmVzcy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFkZHJlc3MucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFkZHJlc3MuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmxvY2txdW90ZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuY29udGVudA0KLSAgICAgIiggJUJsb2NrLm1peDsgKSsiDQotPg0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5xbmFtZSAgImJsb2NrcXVvdGUiID4NCi08IUVMRU1FTlQgJWJsb2NrcXVvdGUucW5hbWU7ICAlYmxvY2txdW90ZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVibG9ja3F1b3RlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmxvY2txdW90ZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaXRlICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHByZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwcmUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwcmUuY29udGVudA0KLSAgICAgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgfCAldHQucW5hbWU7IHwgJWkucW5hbWU7IHwgJWIucW5hbWU7DQotICAgICAgJUkxOG4uY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICB8ICVzY3JpcHQucW5hbWU7IHwgJW1hcC5xbmFtZTsNCi0gICAgICAlSW5saW5lLmV4dHJhOyApKiINCi0+DQotPCFFTlRJVFkgJSBwcmUucW5hbWUgICJwcmUiID4NCi08IUVMRU1FTlQgJXByZS5xbmFtZTsgICVwcmUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHByZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcHJlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXByZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXByZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICB4bWw6c3BhY2UgICAgKCBwcmVzZXJ2ZSApICAgICAgICAgICAgICNGSVhFRCAncHJlc2VydmUnDQotPg0KLTwhLS0gZW5kIG9mIHByZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLiAgSGVhZGluZyBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRpbmcuY29udGVudCAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLQ0KLTwhRU5USVRZICUgaDEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMS5xbmFtZSAgImgxIiA+DQotPCFFTEVNRU5UICVoMS5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDIucW5hbWUgICJoMiIgPg0KLTwhRUxFTUVOVCAlaDIucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgyLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgzLnFuYW1lICAiaDMiID4NCi08IUVMRU1FTlQgJWgzLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgzLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgzLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNC5xbmFtZSAgImg0IiA+DQotPCFFTEVNRU5UICVoNC5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg1LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg1LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDUucW5hbWUgICJoNSIgPg0KLTwhRUxFTUVOVCAlaDUucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg1LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg1LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg1LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg2LnFuYW1lICAiaDYiID4NCi08IUVMRU1FTlQgJWg2LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg2LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg2LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3BocmFzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXRleHQtMS5tb2QgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1oeXBlcnRleHQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBIeXBlcnRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaHlwZXJ0ZXh0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEh5cGVydGV4dA0KLQ0KLSAgICAgICAgYQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGFuY2hvciAoJ2EnKSBlbGVtZW50IHR5cGUsIHdoaWNoDQotICAgICBkZWZpbmVzIHRoZSBzb3VyY2Ugb2YgYSBoeXBlcnRleHQgbGluay4gVGhlIGRlc3RpbmF0aW9uDQotICAgICAob3IgbGluayAndGFyZ2V0JykgaXMgaWRlbnRpZmllZCB2aWEgaXRzICdpZCcgYXR0cmlidXRlDQotICAgICByYXRoZXIgdGhhbiB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBhcyB3YXMgdXNlZCBpbiBIVE1MLg0KLS0tPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uICBBbmNob3IgRWxlbWVudCAgLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYS5xbmFtZSAgImEiID4NCi08IUVMRU1FTlQgJWEucW5hbWU7ICAlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hhcnNldCAgICAgICVDaGFyc2V0LmRhdGF0eXBlOyAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBocmVmbGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaHlwZXJ0ZXh0LTEubW9kIC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIExpc3RzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1saXN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpc3RzDQotDQotICAgICAgICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbGlzdC1vcmllbnRlZCBlbGVtZW50IHR5cGVzDQotICAgICBhbmQgdGhlaXIgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGRsLnFuYW1lICAiZGwiID4NCi08IUVOVElUWSAlIGR0LnFuYW1lICAiZHQiID4NCi08IUVOVElUWSAlIGRkLnFuYW1lICAiZGQiID4NCi08IUVOVElUWSAlIG9sLnFuYW1lICAib2wiID4NCi08IUVOVElUWSAlIHVsLnFuYW1lICAidWwiID4NCi08IUVOVElUWSAlIGxpLnFuYW1lICAibGkiID4NCi0NCi08IS0tIGRsOiBEZWZpbml0aW9uIExpc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGRsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGwuY29udGVudCAgIiggJWR0LnFuYW1lOyB8ICVkZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJWRsLnFuYW1lOyAgJWRsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGR0OiBEZWZpbml0aW9uIFRlcm0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVkdC5xbmFtZTsgICVkdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBkZDogRGVmaW5pdGlvbiBEZXNjcmlwdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWRkLnFuYW1lOyAgJWRkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIG9sOiBPcmRlcmVkIExpc3QgKG51bWJlcmVkIHN0eWxlcykgLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9sLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb2wuY29udGVudCAgIiggJWxpLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlb2wucW5hbWU7ICAlb2wuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9sLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBvbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdWw6IFVub3JkZXJlZCBMaXN0IChidWxsZXQgc3R5bGVzKSAuLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB1bC5jb250ZW50ICAiKCAlbGkucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICV1bC5xbmFtZTsgICV1bC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHVsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXVsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldWwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHVsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBsaTogTGlzdCBJdGVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsaS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGxpLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWxpLnFuYW1lOyAgJWxpLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsaS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgbGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saXN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gRXh0ZW5kIGxpc3RzIHdpdGggdmFsdWUgYW5kIHN0YXJ0IGF0dHJpYnV0ZXMgLS0+IA0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgdmFsdWUgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAgI0lNUExJRUQNCi0+DQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICBzdGFydCAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS0gOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEltYWdlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbWFnZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJvdmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEltYWdlcw0KLQ0KLSAgICAgICAgaW1nDQotDQotICAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBtYXJrdXAgdG8gc3VwcG9ydCBiYXNpYyBpbWFnZSBlbWJlZGRpbmcuDQotLS0+DQotDQotPCEtLSBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHRleHQtb25seSBVQXMgYXMgd2VsbCBhcyB0byBtYWtlDQotICAgICBpbWFnZSBjb250ZW50IHVuZGVyc3RhbmRhYmxlIGFuZCBuYXZpZ2FibGUgdG8gdXNlcnMgb2YNCi0gICAgIG5vbi12aXN1YWwgVUFzLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24gd2l0aA0KLSAgICAgdGhlICdhbHQnIGF0dHJpYnV0ZSwgYW5kIGF2b2lkIHNlcnZlci1zaWRlIGltYWdlIG1hcHMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBpbWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW1nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW1nLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAiaW1nIiA+DQotPCFFTEVNRU5UICVpbWcucW5hbWU7ICAlaW1nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGltZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVpbWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBhbHQgICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGxvbmdkZXNjICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBpbWcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbWFnZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFRhYmxlcyBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC10YWJsZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2ljIFRhYmxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtdGFibGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgQmFzaWMsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2ljIFRhYmxlcw0KLQ0KLSAgICAgICAgdGFibGUsIGNhcHRpb24sIHRyLCB0aCwgdGQNCi0NCi0gICAgIFRoaXMgdGFibGUgbW9kdWxlIGRlY2xhcmVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluaW5nDQotICAgICBhIHRhYmxlIG1vZGVsIGJhc2VkIGZ1bmRhbWVudGFsbHkgb24gZmVhdHVyZXMgZm91bmQgaW4gdGhlDQotICAgICB3aWRlbHktZGVwbG95ZWQgSFRNTCAzLjIgdGFibGUgbW9kZWwuICBXaGlsZSB0aGlzIG1vZHVsZQ0KLSAgICAgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCB0YWJsZSBhdHRyaWJ1dGVzIG9mIEhUTUwgMy4yDQotICAgICB0YWJsZXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGVzIGFsbA0KLSAgICAgSFRNTCA0IGNvbW1vbiBhbmQgbW9zdCBvZiB0aGUgSFRNTCA0IHRhYmxlIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgInRhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICAiY2FwdGlvbiIgPg0KLTwhRU5USVRZICUgdHIucW5hbWUgICJ0ciIgPg0KLTwhRU5USVRZICUgdGgucW5hbWUgICJ0aCIgPg0KLTwhRU5USVRZICUgdGQucW5hbWUgICJ0ZCIgPg0KLQ0KLTwhLS0gaG9yaXpvbnRhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbEhBbGlnbi5hdHRyaWINCi0gICAgICJhbGlnbiAgICAgICAgKCBsZWZ0DQotICAgICAgICAgICAgICAgICAgIHwgY2VudGVyDQotICAgICAgICAgICAgICAgICAgIHwgcmlnaHQgKSAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB2ZXJ0aWNhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbFZBbGlnbi5hdHRyaWINCi0gICAgICJ2YWxpZ24gICAgICAgKCB0b3ANCi0gICAgICAgICAgICAgICAgICAgfCBtaWRkbGUNCi0gICAgICAgICAgICAgICAgICAgfCBib3R0b20gKSAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHNjb3BlIGlzIHNpbXBsZXIgdGhhbiBheGVzIGF0dHJpYnV0ZSBmb3IgY29tbW9uIHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgc2NvcGUuYXR0cmliDQotICAgICAic2NvcGUgICAgICAgICggcm93IHwgY29sICApICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB0YWJsZTogVGFibGUgRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRhYmxlLmNvbnRlbnQNCi0gICAgICIoICVjYXB0aW9uLnFuYW1lOz8sICV0ci5xbmFtZTsrICkiDQotPg0KLTwhRUxFTUVOVCAldGFibGUucW5hbWU7ICAldGFibGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRhYmxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHN1bW1hcnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGFibGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGNhcHRpb246IFRhYmxlIENhcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNhcHRpb24uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVjYXB0aW9uLnFuYW1lOyAgJWNhcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNhcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRyOiBUYWJsZSBSb3cgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHIuY29udGVudCAgIiggJXRoLnFuYW1lOyB8ICV0ZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXRyLnFuYW1lOyAgJXRyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldHIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0ci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGg6IFRhYmxlIEhlYWRlciBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gdGggaXMgZm9yIGhlYWRlciBjZWxscywgdGQgZm9yIGRhdGEsDQotICAgICBidXQgZm9yIGNlbGxzIGFjdGluZyBhcyBib3RoIHVzZSB0ZA0KLS0tPg0KLQ0KLTwhRU5USVRZICUgdGguZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGguZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0aC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3dOb1RhYmxlLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAldGgucW5hbWU7ICAldGguY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRoLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRoLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFiYnIgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBheGlzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVhZGVycyAgICAgIElEUkVGUyAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICVzY29wZS5hdHRyaWI7DQotICAgICAgcm93c3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICBjb2xzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRoLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZDogVGFibGUgRGF0YSBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvd05vVGFibGUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICV0ZC5xbmFtZTsgICV0ZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWJiciAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGF4aXMgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWFkZXJzICAgICAgSURSRUZTICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgJXNjb3BlLmF0dHJpYjsNCi0gICAgICByb3dzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgIGNvbHNwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy10YWJsZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gDQotCVhIVE1MIGJhc2ljIGZvcm1zIG1vZHVsZSBleHRlbmRlZCB3aXRoIG9wdGdyb3VwIGFuZCBmaWVsZHNldA0KLS0tPg0KLTwhRUxFTUVOVCAlb3B0Z3JvdXAucW5hbWU7ICglb3B0aW9uLnFuYW1lOykrPg0KLTwhQVRUTElTVCAlb3B0Z3JvdXAucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICIoICVvcHRncm91cC5xbmFtZTsgfCAlb3B0aW9uLnFuYW1lOyApKyI+DQotPCFFTEVNRU5UICVmaWVsZHNldC5xbmFtZTsgKCNQQ0RBVEEgfCAlRmxvdy5taXg7KSo+DQotPCFBVFRMSVNUICVmaWVsZHNldC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCAlQmxrTm9Gb3JtLm1peDsgfCAlZmllbGRzZXQucW5hbWU7ICkrIj4NCi08IUVOVElUWSAlIHhodG1sLWZvcm0ubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTaW1wbGlmaWVkIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtZm9ybS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBCYXNpYywgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIiAgDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzaWMgRm9ybXMNCi0NCi0gICAgIFRoaXMgZm9ybXMgbW9kdWxlIGlzIGJhc2VkIG9uIHRoZSBIVE1MIDMuMiBmb3JtcyBtb2RlbCwgd2l0aA0KLSAgICAgdGhlIFdBSS1yZXF1ZXN0ZWQgYWRkaXRpb24gb2YgdGhlIGxhYmVsIGVsZW1lbnQuIFdoaWxlIHRoaXMgDQotICAgICBtb2R1bGUgZXNzZW50aWFsbHkgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCBhdHRyaWJ1dGVzIG9mIA0KLSAgICAgSFRNTCAzLjIgZm9ybXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGUNCi0gICAgIGFsbCBIVE1MIDQgY29tbW9uIGF0dHJpYnV0ZXMuDQotDQotICAgICAgICBmb3JtLCBsYWJlbCwgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCB0ZXh0YXJlYQ0KLS0tPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgZWxlbWVudCB0eXBlIG5hbWVzOg0KLS0tPg0KLTwhRU5USVRZICUgZm9ybS5xbmFtZSAgImZvcm0iID4NCi08IUVOVElUWSAlIGxhYmVsLnFuYW1lICAibGFiZWwiID4NCi08IUVOVElUWSAlIGlucHV0LnFuYW1lICAiaW5wdXQiID4NCi08IUVOVElUWSAlIHNlbGVjdC5xbmFtZSAgInNlbGVjdCIgPg0KLTwhRU5USVRZICUgb3B0aW9uLnFuYW1lICAib3B0aW9uIiA+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5xbmFtZSAgInRleHRhcmVhIiA+DQotDQotPCEtLSAlQmxrTm9Gb3JtLm1peDsgaW5jbHVkZXMgYWxsIG5vbi1mb3JtIGJsb2NrIGVsZW1lbnRzLA0KLSAgICAgcGx1cyAlTWlzYy5jbGFzczsNCi0tLT4NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgfCAldGFibGUucW5hbWU7IA0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gZm9ybTogRm9ybSBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZm9ybS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVmb3JtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50DQotICAgICAiKCAlQmxrTm9Gb3JtLm1peDsgKSsiDQotPg0KLTwhRUxFTUVOVCAlZm9ybS5xbmFtZTsgICVmb3JtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBmb3JtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWZvcm0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVmb3JtLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFjdGlvbiAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgbWV0aG9kICAgICAgICggZ2V0IHwgcG9zdCApICAgICAgICAgICAnZ2V0Jw0KLSAgICAgIGVuY3R5cGUgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcNCi0+DQotPCEtLSBlbmQgb2YgZm9ybS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gbGFiZWw6IEZvcm0gRmllbGQgTGFiZWwgVGV4dCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGFiZWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGFiZWwuZWxlbWVudDtbDQotPCEtLSBFYWNoIGxhYmVsIG11c3Qgbm90IGNvbnRhaW4gbW9yZSB0aGFuIE9ORSBmaWVsZA0KLS0tPg0KLTwhRU5USVRZICUgbGFiZWwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSANCi0gICAgICB8ICVpbnB1dC5xbmFtZTsgfCAlc2VsZWN0LnFuYW1lOyB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJMThuLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyApKiINCi0+DQotPCFFTEVNRU5UICVsYWJlbC5xbmFtZTsgICVsYWJlbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGFiZWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxhYmVsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxhYmVsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGFiZWwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgZm9yICAgICAgICAgIElEUkVGICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbGFiZWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGlucHV0OiBGb3JtIENvbnRyb2wgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGlucHV0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWlucHV0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW5wdXQuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTEVNRU5UICVpbnB1dC5xbmFtZTsgICVpbnB1dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaW5wdXQuZWxlbWVudCAtLT5dXT4NCi0NCi08IS0tIEJhc2ljIEZvcm1zIHJlbW92ZXMgJ2ltYWdlJyBhbmQgJ2ZpbGUnIGlucHV0IHR5cGVzLg0KLS0tPg0KLTwhRU5USVRZICUgaW5wdXQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaW5wdXQuYXR0bGlzdDtbDQotPCFFTlRJVFkgJSBJbnB1dFR5cGUuY2xhc3MNCi0gICAgICIoIHRleHQgfCBwYXNzd29yZCB8IGNoZWNrYm94IHwgcmFkaW8gDQotICAgICAgfCBzdWJtaXQgfCByZXNldCB8IGhpZGRlbiApIg0KLT4NCi08IS0tIGF0dHJpYnV0ZSBuYW1lIHJlcXVpcmVkIGZvciBhbGwgYnV0IHN1Ym1pdCAmIHJlc2V0DQotLS0+DQotPCFBVFRMSVNUICVpbnB1dC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICB0eXBlICAgICAgICAgJUlucHV0VHlwZS5jbGFzczsgICAgICAgICd0ZXh0Jw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hlY2tlZCAgICAgICggY2hlY2tlZCApICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNpemUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBtYXhsZW5ndGggICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGlucHV0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBzZWxlY3Q6IE9wdGlvbiBTZWxlY3RvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzZWxlY3QuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc2VsZWN0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgICIoICVvcHRpb24ucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVzZWxlY3QucW5hbWU7ICAlc2VsZWN0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzZWxlY3QuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNlbGVjdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzZWxlY3QuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzZWxlY3QucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNpemUgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBtdWx0aXBsZSAgICAgKCBtdWx0aXBsZSApICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBzZWxlY3QuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIG9wdGlvbjogU2VsZWN0YWJsZSBDaG9pY2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9wdGlvbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvcHRpb24uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvcHRpb24uY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTEVNRU5UICVvcHRpb24ucW5hbWU7ICAlb3B0aW9uLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9wdGlvbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvcHRpb24uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc2VsZWN0ZWQgICAgICggc2VsZWN0ZWQgKSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygb3B0aW9uLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZXh0YXJlYTogTXVsdGktTGluZSBUZXh0IEZpZWxkIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZXh0YXJlYS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRleHRhcmVhLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRUxFTUVOVCAldGV4dGFyZWEucW5hbWU7ICAldGV4dGFyZWEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRleHRhcmVhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ZXh0YXJlYS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICByb3dzICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGNvbHMgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI1JFUVVJUkVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGV4dGFyZWEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy1mb3JtLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpbmsubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxpbmstMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpbmsgZWxlbWVudA0KLQ0KLSAgICAgICAgbGluaw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpbmsgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHdoaWNoIGNvdWxkIChpbiBwcmluY2lwbGUpIGJlIHVzZWQgdG8gZGVmaW5lIGRvY3VtZW50LWxldmVsIGxpbmtzDQotICAgICB0byBleHRlcm5hbCByZXNvdXJjZXMgc3VjaCBhczoNCi0NCi0gICAgIGEpIGZvciBkb2N1bWVudCBzcGVjaWZpYyB0b29sYmFycy9tZW51cywgZS5nLiBzdGFydCwgY29udGVudHMsDQotICAgICAgICBwcmV2aW91cywgbmV4dCwgaW5kZXgsIGVuZCwgaGVscA0KLSAgICAgYikgdG8gbGluayB0byBhIHNlcGFyYXRlIHN0eWxlIHNoZWV0IChyZWw9InN0eWxlc2hlZXQiKQ0KLSAgICAgYykgdG8gbWFrZSBhIGxpbmsgdG8gYSBzY3JpcHQgKHJlbD0ic2NyaXB0IikNCi0gICAgIGQpIGJ5IHN0eWxlIHNoZWV0cyB0byBjb250cm9sIGhvdyBjb2xsZWN0aW9ucyBvZiBodG1sIG5vZGVzIGFyZQ0KLSAgICAgICAgcmVuZGVyZWQgaW50byBwcmludGVkIGRvY3VtZW50cw0KLSAgICAgZSkgdG8gbWFrZSBhIGxpbmsgdG8gYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50DQotICAgICAgICBlLmcuIGEgcG9zdHNjcmlwdCBvciBwZGYgdmVyc2lvbiAocmVsPSJhbHRlcm5hdGUiIG1lZGlhPSJwcmludCIpDQotLS0+DQotDQotPCEtLSBsaW5rOiBNZWRpYS1JbmRlcGVuZGVudCBMaW5rIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaW5rLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxpbmsuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaW5rLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgbGluay5xbmFtZSAgImxpbmsiID4NCi08IUVMRU1FTlQgJWxpbmsucW5hbWU7ICAlbGluay5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGluay5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGluay5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsaW5rLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGluay5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaGFyc2V0ICAgICAgJUNoYXJzZXQuZGF0YXR5cGU7ICAgICAgICNJTVBMSUVEDQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhyZWZsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGxpbmsuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saW5rLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1ldGEtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIE1ldGEgSW5mb3JtYXRpb24NCi0NCi0gICAgICAgIG1ldGENCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBtZXRhIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIHByb3ZpZGUgZGVjbGFyYXRpdmUgZG9jdW1lbnQgbWV0YWluZm9ybWF0aW9uLg0KLS0tPg0KLQ0KLTwhLS0gbWV0YTogR2VuZXJpYyBNZXRhaW5mb3JtYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbWV0YS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVtZXRhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbWV0YS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIG1ldGEucW5hbWUgICJtZXRhIiA+DQotPCFFTEVNRU5UICVtZXRhLnFuYW1lOyAgJW1ldGEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG1ldGEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG1ldGEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbWV0YS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW1ldGEucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgaHR0cC1lcXVpdiAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIG5hbWUgICAgICAgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjb250ZW50ICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHNjaGVtZSAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbWV0YS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW1ldGEtMS5tb2QgLS0+DQotDQotDQotPCEtLSBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzZSBlbGVtZW50DQotDQotICAgICAgICBiYXNlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgYmFzZSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBkZWZpbmUgYSBiYXNlIFVSSSBhZ2FpbnN0IHdoaWNoIHJlbGF0aXZlIFVSSXMgaW4gdGhlDQotICAgICBkb2N1bWVudCB3aWxsIGJlIHJlc29sdmVkLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGFsc28gcmVkZWNsYXJlcyB0aGUgY29udGVudCBtb2RlbCBmb3INCi0gICAgIHRoZSBoZWFkIGVsZW1lbnQgdG8gaW5jbHVkZSB0aGUgYmFzZSBlbGVtZW50Lg0KLS0tPg0KLQ0KLTwhLS0gYmFzZTogRG9jdW1lbnQgQmFzZSBVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYmFzZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViYXNlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmFzZS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGJhc2UucW5hbWUgICJiYXNlIiA+DQotPCFFTEVNRU5UICViYXNlLnFuYW1lOyAgJWJhc2UuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJhc2UuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJhc2UuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmFzZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJhc2UucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi08IS0tIGVuZCBvZiBiYXNlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmNvbnRlbnQNCi0gICAgIiggJUhlYWRPcHRzLm1peDssDQotICAgICAoICggJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDssICggJWJhc2UucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApPyApDQotICAgICB8ICggJWJhc2UucW5hbWU7LCAlSGVhZE9wdHMubWl4OywgKCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApKSkpIg0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gU3R5bGVzaGVldHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRG9jdW1lbnQgU3R5bGUgU2hlZXQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN0eWxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFN0eWxlIFNoZWV0cw0KLQ0KLSAgICAgICAgc3R5bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzdHlsZSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBlbWJlZCBzdHlsZSBzaGVldCBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgaGVhZCBlbGVtZW50Lg0KLS0tPg0KLQ0KLTwhLS0gc3R5bGU6IFN0eWxlIFNoZWV0IEluZm9ybWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3R5bGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdHlsZS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVOVElUWSAlIHN0eWxlLnFuYW1lICAic3R5bGUiID4NCi08IUVMRU1FTlQgJXN0eWxlLnFuYW1lOyAgJXN0eWxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdHlsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3R5bGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdHlsZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICV0aXRsZS5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI1JFUVVJUkVEDQotICAgICAgbWVkaWEgICAgICAgICVNZWRpYURlc2MuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHhtbDpzcGFjZSAgICAoIHByZXNlcnZlICkgICAgICAgICAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0+DQotPCEtLSBlbmQgb2Ygc3R5bGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zdHlsZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtcGFyYW0tMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gUGFyYW1ldGVycyBmb3IgSmF2YSBBcHBsZXRzIGFuZCBFbWJlZGRlZCBPYmplY3RzDQotDQotICAgICAgICBwYXJhbQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGVjbGFyYXRpb25zIGZvciB0aGUgcGFyYW0gZWxlbWVudCwNCi0gICAgIHVzZWQgdG8gcHJvdmlkZSBuYW1lZCBwcm9wZXJ0eSB2YWx1ZXMgZm9yIHRoZSBhcHBsZXQNCi0gICAgIGFuZCBvYmplY3QgZWxlbWVudHMuDQotLS0+DQotDQotPCEtLSBwYXJhbTogTmFtZWQgUHJvcGVydHkgVmFsdWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBwYXJhbS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwYXJhbS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHBhcmFtLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgcGFyYW0ucW5hbWUgICJwYXJhbSIgPg0KLTwhRUxFTUVOVCAlcGFyYW0ucW5hbWU7ICAlcGFyYW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHBhcmFtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwYXJhbS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwYXJhbS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXBhcmFtLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJWlkLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZXR5cGUgICAgKCBkYXRhIHwgcmVmIHwgb2JqZWN0ICkgICdkYXRhJw0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgcGFyYW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1wYXJhbS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1vYmplY3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtb2JqZWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdHMNCi0NCi0gICAgICAgIG9iamVjdA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIG9iamVjdCBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLCB1c2VkDQotICAgICB0byBlbWJlZCBleHRlcm5hbCBvYmplY3RzIGFzIHBhcnQgb2YgWEhUTUwgcGFnZXMuIEluIHRoZSBkb2N1bWVudCwNCi0gICAgIHBsYWNlIHBhcmFtIGVsZW1lbnRzIHByaW9yIHRvIG90aGVyIGNvbnRlbnQgd2l0aGluIHRoZSBvYmplY3QgZWxlbWVudC4NCi0NCi0gICAgIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBtb2R1bGUgcmVxdWlyZXMgaW5zdGFudGlhdGlvbiBvZiB0aGUgUGFyYW0NCi0gICAgIEVsZW1lbnQgTW9kdWxlLg0KLS0tPg0KLQ0KLTwhLS0gb2JqZWN0OiBHZW5lcmljIEVtYmVkZGVkIE9iamVjdCAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb2JqZWN0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9iamVjdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9iamVjdC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyB8ICVwYXJhbS5xbmFtZTsgKSoiDQotPg0KLTwhRU5USVRZICUgb2JqZWN0LnFuYW1lICAib2JqZWN0IiA+DQotPCFFTEVNRU5UICVvYmplY3QucW5hbWU7ICAlb2JqZWN0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvYmplY3QuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9iamVjdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvYmplY3QuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvYmplY3QucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgZGVjbGFyZSAgICAgICggZGVjbGFyZSApICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNsYXNzaWQgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjb2RlYmFzZSAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgZGF0YSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBjb2RldHlwZSAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgYXJjaGl2ZSAgICAgICVVUklzLmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHN0YW5kYnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG9iamVjdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW9iamVjdC0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTdHJ1Y3R1cmUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZQ0KLQ0KLSAgICAgICAgdGl0bGUsIGhlYWQsIGJvZHksIGh0bWwNCi0NCi0gICAgIFRoZSBTdHJ1Y3R1cmUgTW9kdWxlIGRlZmluZXMgdGhlIG1ham9yIHN0cnVjdHVyYWwgZWxlbWVudHMgYW5kDQotICAgICB0aGVpciBhdHRyaWJ1dGVzLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoZSBjb250ZW50IG1vZGVsIG9mIHRoZSBoZWFkIGVsZW1lbnQgdHlwZSBpcyByZWRlY2xhcmVkDQotICAgICB3aGVuIHRoZSBCYXNlIE1vZHVsZSBpcyBpbmNsdWRlZCBpbiB0aGUgRFRELg0KLQ0KLSAgICAgVGhlIHBhcmFtZXRlciBlbnRpdHkgY29udGFpbmluZyB0aGUgWE1MIG5hbWVzcGFjZSBVUkkgdmFsdWUgdXNlZA0KLSAgICAgZm9yIFhIVE1MIGlzICclWEhUTUwueG1sbnM7JywgZGVmaW5lZCBpbiB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZS4NCi0tLT4NCi0NCi08IS0tIHRpdGxlOiBEb2N1bWVudCBUaXRsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRoZSB0aXRsZSBlbGVtZW50IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZsb3cgb2YgdGV4dC4NCi0gICAgIEl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGZvciBleGFtcGxlIGFzIHRoZSBwYWdlIGhlYWRlciBvcg0KLSAgICAgd2luZG93IHRpdGxlLiBFeGFjdGx5IG9uZSB0aXRsZSBpcyByZXF1aXJlZCBwZXIgZG9jdW1lbnQuDQotLS0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRpdGxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICJ0aXRsZSIgPg0KLTwhRUxFTUVOVCAldGl0bGUucW5hbWU7ICAldGl0bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRpdGxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRpdGxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0aXRsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaGVhZDogRG9jdW1lbnQgSGVhZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoZWFkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaGVhZC5jb250ZW50DQotICAgICIoICVIZWFkT3B0cy5taXg7LCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApIg0KLT4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICJoZWFkIiA+DQotPCFFTEVNRU5UICVoZWFkLnFuYW1lOyAgJWhlYWQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhlYWQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaGVhZC5hdHRsaXN0O1sNCi08IS0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMNCi0tLT4NCi08IUVOVElUWSAlIHByb2ZpbGUuYXR0cmliDQotICAgICAicHJvZmlsZSAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAnJVhIVE1MLnByb2ZpbGU7JyINCi0+DQotDQotPCFBVFRMSVNUICVoZWFkLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgICVwcm9maWxlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaGVhZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gYm9keTogRG9jdW1lbnQgQm9keSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYm9keS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVib2R5LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYm9keS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAiYm9keSIgPg0KLTwhRUxFTUVOVCAlYm9keS5xbmFtZTsgICVib2R5LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBib2R5LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBib2R5LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJvZHkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVib2R5LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBib2R5LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBodG1sOiBYSFRNTCBEb2N1bWVudCBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBodG1sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWh0bWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgICIoICVoZWFkLnFuYW1lOywgJWJvZHkucW5hbWU7ICkiID4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICJodG1sIiA+DQotPCFFTEVNRU5UICVodG1sLnFuYW1lOyAgJWh0bWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGh0bWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGh0bWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaHRtbC5hdHRsaXN0O1sNCi08IS0tIHZlcnNpb24gYXR0cmlidXRlIHZhbHVlIGRlZmluZWQgaW4gZHJpdmVyDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uLmF0dHJpYg0KLSAgICAgInZlcnNpb24gICAgICAlRlBJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwudmVyc2lvbjsnIg0KLT4NCi0NCi08IS0tIHNlZSB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZSBmb3IgaW5mb3JtYXRpb24NCi0gICAgIG9uIGhvdyB0byBleHRlbmQgWEhUTUwgdXNpbmcgWE1MIG5hbWVzcGFjZXMNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlWEhUTUwudmVyc2lvbi5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBodG1sLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3RydWN0LTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcHJlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGhyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwcmVzZW50YXRpb25hbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBoci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoci5lbGVtZW50O1sNCi08IUVOVElUWSAlIGhyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICJociIgPg0KLTwhRUxFTUVOVCAlaHIucW5hbWU7ICAlaHIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWhyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3ByZXMtMS5tb2QgLS0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JSW5saW5lIFByZXNlbnRhdGlvbjogYiwgYmlnLCBpLCBzbWFsbAkJDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHByZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGIsIGJpZywgaSwgc21hbGwsIHN1Yiwgc3VwLCB0dA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgaW5saW5lLWxldmVsIHByZXNlbnRhdGlvbmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAiYiIgPg0KLTwhRUxFTUVOVCAlYi5xbmFtZTsgICViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBiLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiaWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmlnLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmlnLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAiYmlnIiA+DQotPCFFTEVNRU5UICViaWcucW5hbWU7ICAlYmlnLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiaWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJpZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViaWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViaWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJpZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGkucW5hbWUgICJpIiA+DQotPCFFTEVNRU5UICVpLnFuYW1lOyAgJWkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc21hbGwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzbWFsbC5xbmFtZSAgInNtYWxsIiA+DQotPCFFTEVNRU5UICVzbWFsbC5xbmFtZTsgICVzbWFsbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc21hbGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc21hbGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNtYWxsLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3ViLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3ViLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAic3ViIiA+DQotPCFFTEVNRU5UICVzdWIucW5hbWU7ICAlc3ViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdWIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdWIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN1Yi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN1cC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN1cC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgInN1cCIgPg0KLTwhRUxFTUVOVCAlc3VwLnFuYW1lOyAgJXN1cC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3VwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3VwLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3VwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdXAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgInR0IiA+DQotPCFFTEVNRU5UICV0dC5xbmFtZTsgICV0dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIGVuZCBvZiBYSFRNTCBNb2JpbGUgMS4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODBlMjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBNb2JpbGUgMS4wIERvY3VtZW50IE1vZGVsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgTW9iaWxlLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICAJQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLSAgICANCi0tLT4NCi08IS0tIFhIVE1MIE1vYmlsZSBEb2N1bWVudCBNb2RlbA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVzY3JpYmVzIHRoZSBncm91cGluZ3Mgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwDQotICAgICBjb21tb24gY29udGVudCBtb2RlbHMgZm9yIFhIVE1MIGVsZW1lbnRzLg0KLS0tPg0KLQ0KLTwhLS0gT3B0aW9uYWwgRWxlbWVudHMgaW4gaGVhZCAgLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkT3B0cy5taXgNCi0gICAgICIoICVtZXRhLnFuYW1lOyB8ICVsaW5rLnFuYW1lOyB8ICVvYmplY3QucW5hbWU7IHwgJXN0eWxlLnFuYW1lOyApKiIgPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBNaXNjLmNsYXNzICIiID4NCi0NCi08IS0tIElubGluZSBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSW5sU3RydWN0LmNsYXNzICIlYnIucW5hbWU7IHwgJXNwYW4ucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxQaHJhcy5jbGFzcw0KLSAgICAgInwgJWVtLnFuYW1lOyB8ICVzdHJvbmcucW5hbWU7IHwgJWRmbi5xbmFtZTsgfCAlY29kZS5xbmFtZTsNCi0gICAgICB8ICVzYW1wLnFuYW1lOyB8ICVrYmQucW5hbWU7IHwgJXZhci5xbmFtZTsgfCAlY2l0ZS5xbmFtZTsNCi0gICAgICB8ICVhYmJyLnFuYW1lOyB8ICVhY3JvbnltLnFuYW1lOyB8ICVxLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sUHJlcy5jbGFzcw0KLSAgICAgInwgJWkucW5hbWU7IHwgJWIucW5hbWU7IHwgJWJpZy5xbmFtZTsgfCAlc21hbGwucW5hbWU7ICIgPg0KLQ0KLQ0KLTwhRU5USVRZICUgSTE4bi5jbGFzcyAiIiA+DQotDQotPCFFTlRJVFkgJSBBbmNob3IuY2xhc3MgInwgJWEucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxTcGVjaWFsLmNsYXNzICJ8ICVpbWcucW5hbWU7IHwgJW9iamVjdC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubEZvcm0uY2xhc3MNCi0gICAgICJ8ICVpbnB1dC5xbmFtZTsgfCAlc2VsZWN0LnFuYW1lOyB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICB8ICVsYWJlbC5xbmFtZTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLmV4dHJhICIiID4NCi0NCi08IUVOVElUWSAlIElubGluZS5jbGFzcw0KLSAgICAgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IuY2xhc3MNCi0gICAgICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5taXgNCi0gICAgICIlSW5sTm9BbmNob3IuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubGluZS5taXgNCi0gICAgICIlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBCbG9jayBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRpbmcuY2xhc3MNCi0gICAgICIlaDEucW5hbWU7IHwgJWgyLnFuYW1lOyB8ICVoMy5xbmFtZTsNCi0gICAgICB8ICVoNC5xbmFtZTsgfCAlaDUucW5hbWU7IHwgJWg2LnFuYW1lOyINCi0+DQotPCFFTlRJVFkgJSBMaXN0LmNsYXNzICAiJXVsLnFuYW1lOyB8ICVvbC5xbmFtZTsgfCAlZGwucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBUYWJsZS5jbGFzcyAifCAldGFibGUucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBGb3JtLmNsYXNzICAifCAlZm9ybS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEZpZWxkc2V0LmNsYXNzICAifCAlZmllbGRzZXQucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtTdHJ1Y3QuY2xhc3MgIiVwLnFuYW1lOyB8ICVkaXYucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtQaHJhcy5jbGFzcw0KLSAgICAgInwgJXByZS5xbmFtZTsgfCAlYmxvY2txdW90ZS5xbmFtZTsgfCAlYWRkcmVzcy5xbmFtZTsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxrUHJlcy5jbGFzcyAifCAlaHIucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtTcGVjaWFsLmNsYXNzDQotICAgICAiJVRhYmxlLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVGaWVsZHNldC5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxvY2suZXh0cmEgIiIgPg0KLQ0KLTwhRU5USVRZICUgQmxvY2suY2xhc3MNCi0gICAgICIlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlQmxrU3BlY2lhbC5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJVRhYmxlLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxvY2subWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gQWxsIENvbnRlbnQgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBkZWNsYXJlcyBhbGwgY29udGVudCBleGNlcHQgdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBGbG93Tm9UYWJsZS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLQ0KLTwhRU5USVRZICUgRmxvdy5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIC0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWViNmIyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPCEtLSBYSFRNTCBNb2JpbGUgMS4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbW9iaWxlMTAuZHRkIC0tPg0KLTwhLS0gDQotICAgICBUaGlzIGlzIFhIVE1MIE1vYmlsZSBwcm9maWxlLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICANCi0gICAgIAlAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotICAgIA0KLS0tPg0KLTwhLS0gVGhpcyBpcyB0aGUgZHJpdmVyIGZpbGUgZm9yIHZlcnNpb24gMS4wIG9mIHRoZSBYSFRNTCBNb2JpbGUgRFRELg0KLQ0KLSAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICBQVUJMSUM6ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIg0KLSAgICAgU1lTVEVNOiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCINCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24gICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiA+DQotDQotPCEtLSBVc2UgdGhpcyBVUkkgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLQ0KLSAgICAgU2VlIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlIGZvciBpbmZvcm1hdGlvbg0KLSAgICAgb24gdGhlIHVzZSBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgaW4gdGhlIERURC4NCi0tLT4NCi08IUVOVElUWSAlIE5TLnByZWZpeGVkICJJR05PUkUiID4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeCAgIiIgPg0KLQ0KLTwhLS0gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgWEhUTUwgTW9iaWxlIDEuMCBkaXJlY3RseSwgdXNlDQotICAgICB0aGUgRlBJIGluIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLCB3aXRoIHRoZSB4bWxucyBhdHRyaWJ1dGUNCi0gICAgIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50IHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIiA+DQotICAgICAgICAgPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotICAgICAgICAgICAgICAgeG1sOmxhbmc9ImVuIiA+DQotICAgICAgICAgLi4uDQotICAgICAgICAgPC9odG1sPg0KLS0tPg0KLQ0KLTwhLS0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcyAtLT4NCi08IUVOVElUWSAlIFhIVE1MLnByb2ZpbGUgICIiID4NCi0NCi08IS0tIElubGluZSBTdHlsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHlsZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIiA+DQotJXhodG1sLWlubHN0eWxlLm1vZDsNCi0NCi08IS0tIERvY3VtZW50IE1vZGVsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tb2RlbC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFhIVE1MIE1vYmlsZSAxLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIiA+DQotDQotPCEtLSBYSFRNTCBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIFhIVE1MLmJpZGkgICJJR05PUkUiID4NCi08IUVOVElUWSAlIHhodG1sLWZyYW1ld29yay5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZnJhbWV3b3JrLTEubW9kIiA+DQotJXhodG1sLWZyYW1ld29yay5tb2Q7DQotDQotPCEtLSBYSFRNTCBDb3JlIE1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7ICkqIg0KLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCIgPg0KLSV4aHRtbC10ZXh0Lm1vZDsNCi0NCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCIgPg0KLSV4aHRtbC1oeXBlcnRleHQubW9kOw0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCIgPg0KLSV4aHRtbC1saXN0Lm1vZDsNCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gSW1hZ2UgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWltYWdlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiID4NCi0leGh0bWwtaW1hZ2UubW9kOw0KLQ0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiID4NCi0leGh0bWwtdGFibGUubW9kOw0KLQ0KLTwhLS0gRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiANCi0JWEhUTUwgYmFzaWMgZm9ybXMgbW9kdWxlIGV4dGVuZGVkIHdpdGggb3B0Z3JvdXAgYW5kIGZpZWxkc2V0DQotLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQlsYWJlbCAlVGV4dC5kYXRhdHlwZTsgI1JFUVVJUkVEDQotPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4OyB8ICVmaWVsZHNldC5xbmFtZTsgKSsiPg0KLTwhRU5USVRZICUgeGh0bWwtZm9ybS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCIgPg0KLSV4aHRtbC1mb3JtLm1vZDsNCi0NCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCIgPg0KLSV4aHRtbC1saW5rLm1vZDsNCi0NCi08IS0tIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tZXRhLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCIgPg0KLSV4aHRtbC1tZXRhLm1vZDsNCi0NCi08IS0tIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCIgPg0KLSV4aHRtbC1iYXNlLm1vZDsNCi0NCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1zdHlsZS5tb2Q7DQotDQotPCEtLSBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcGFyYW0ubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiID4NCi0leGh0bWwtcGFyYW0ubW9kOw0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW9iamVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCIgPg0KLSV4aHRtbC1vYmplY3QubW9kOw0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCIgPg0KLSV4aHRtbC1zdHJ1Y3QubW9kOw0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi0leGh0bWwtYmxrcHJlcy5tb2Q7DQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JSW5saW5lIFByZXNlbnRhdGlvbjogYiwgYmlnLCBpLCBzbWFsbAkJDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCI+DQotJXhodG1sLWlubHByZXMubW9kOw0KLQ0KLTwhLS0gZW5kIG9mIFhIVE1MIE1vYmlsZSAxLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd21sMjBfZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93bWwyMF9kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1N2U5NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93bWwyMF9kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4NCi08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDM3KWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwyMC5kdGQgLS0+DQotPEhUTUw+PEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+DQotPE1FVEEgY29udGVudD0iTVNIVE1MIDUuNTAuNDkxMi4zMDAiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4NCi08Qk9EWT48WE1QPjwhLS0gV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLQlUaGlzIGlzIHRoZSBXTUwgMi4wIERURCBkcml2ZXIgZmlsZS4gUGxlYXNlIHVzZSB0aGlzIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoNCi0NCi0gICAgICAgICAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgCSAgICAgICAgICANCi0gICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFdNTCAyLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgICAgICB4bWxuczp3bWw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlWZXJzaW9uLCBYTUwgTmFtZXNwYWNlcywgYW5kIHByb2ZpbGUgaW5mb3JtYXRpb24gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCVZhbHVlIG9mIFhIVE1MIHZlcnNpb24gYXR0cmlidXRlIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiI+DQotPCEtLSANCi0JVmFsdWUgb2YgWEhUTUwgcHJvZmlsZSBhdHRyaWJ1dGUNCi0JDQotCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICIiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJTW9kdWxhcmlzYXRpb24gZnJhbWV3b3JrIHNldHVwDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IUVOVElUWSAlIHdtbC1mcmFtZXdvcmsubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWZyYW1ld29yay0xLm1vZCI+DQotJXdtbC1mcmFtZXdvcmsubW9kOw0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJWEhUTUwgbW9kdWxlcyANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgDQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgDQotCXwgJWdldHZhci5xbmFtZTsNCi0JfCAlaW5wdXQucW5hbWU7fCAlc2VsZWN0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHAuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7IHwgJXRhYmxlLnFuYW1lOyB8ICVmaWVsZHNldC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCI+DQotJXhodG1sLXRleHQubW9kOw0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiPg0KLSV4aHRtbC1oeXBlcnRleHQubW9kOw0KLTwhLS0gTGlzdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIj4NCi0leGh0bWwtbGlzdC5tb2Q7DQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIj4NCi0leGh0bWwtaW1hZ2UubW9kOw0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiPg0KLSV4aHRtbC1wYXJhbS5tb2Q7DQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiPg0KLSV4aHRtbC1vYmplY3QubW9kOw0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCI+DQotJXhodG1sLXRhYmxlLm1vZDsNCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IAkNCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICIoICNQQ0RBVEEgfCAlb25ldmVudC5xbmFtZTt8ICVnZXR2YXIucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAiKCAjUENEQVRBIHwgJWdldHZhci5xbmFtZTsgKSoiPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4Ow0KLSAgICAgIHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNpYy1mb3JtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiPg0KLSV4aHRtbC1iYXNpYy1mb3JtLm1vZDsNCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIj4NCi0leGh0bWwtbGluay5tb2Q7DQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCI+DQotJXhodG1sLW1ldGEubW9kOw0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiPg0KLSV4aHRtbC1iYXNlLm1vZDsNCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1zdHlsZS5tb2Q7DQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICIoICVoZWFkLnFuYW1lOywgJVRlbXBsYXRlLm1peDssICglYm9keS5xbmFtZTsgfCAoJWNhcmQucW5hbWU7KykpKSI+DQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQgIiglQ2FyZEJvZHkubWl4OykiPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiPg0KLSV4aHRtbC1zdHJ1Y3QubW9kOw0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi0leGh0bWwtYmxrcHJlcy5tb2Q7DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlXTUwgRGVjbGFyYXRpb25zDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFNwZWNpYWwgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1zcGVjaWFsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXNwZWNpYWwtMS5tb2QiPg0KLSV3bWwtc3BlY2lhbC5tb2Q7DQotPCEtLSBEZXByZWNhdGVkIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtZGVwcmVjYXRlZC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZGVwcmVjYXRlZC0xLm1vZCI+DQotJXdtbC1kZXByZWNhdGVkLm1vZDsNCi08IS0tIGVuZCBvZiBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08L1hNUD48L0JPRFk+PC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGExOTU3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy9UZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4NCi08aHRtbD4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08IS0tICBUZXN0IC0tPg0KLQ0KLTwvYm9keT4NCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzMjFjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDExOTYgKzAsMCBAQAotPCEtLQ0KLSAgIEV4dGVuc2libGUgSFRNTCB2ZXJzaW9uIDEuMCBUcmFuc2l0aW9uYWwgRFREDQotDQotICAgVGhpcyBpcyB0aGUgc2FtZSBhcyBIVE1MIDQuMCBUcmFuc2l0aW9uYWwgZXhjZXB0IGZvcg0KLSAgIGNoYW5nZXMgZHVlIHRvIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFhNTCBhbmQgU0dNTC4NCi0NCi0gICBOYW1lc3BhY2UgPSBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sDQotDQotICAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHNlZTogaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxDQotDQotICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAgVzNDIChNSVQsIElOUklBLCBLZWlvKSwNCi0gICBBbGwgUmlnaHRzIFJlc2VydmVkLiANCi0NCi0gICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiINCi0gICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiDQotDQotICAgJFJldmlzaW9uOiAxLjEgJA0KLSAgICREYXRlOiAyMDAwLzAxLzI2IDE0OjA4OjU2ICQNCi0NCi0tLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBDaGFyYWN0ZXIgbW5lbW9uaWMgZW50aXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgSFRNTGxhdDEgUFVCTElDDQotICAgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICJ4aHRtbC1sYXQxLmVudCI+DQotJUhUTUxsYXQxOw0KLQ0KLTwhRU5USVRZICUgSFRNTHN5bWJvbCBQVUJMSUMNCi0gICAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgInhodG1sLXN5bWJvbC5lbnQiPg0KLSVIVE1Mc3ltYm9sOw0KLQ0KLTwhRU5USVRZICUgSFRNTHNwZWNpYWwgUFVCTElDDQotICAgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICJ4aHRtbC1zcGVjaWFsLmVudCI+DQotJUhUTUxzcGVjaWFsOw0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gSW1wb3J0ZWQgTmFtZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBDb250ZW50VHlwZSAiQ0RBVEEiPg0KLSAgICA8IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBDb250ZW50VHlwZXMgIkNEQVRBIj4NCi0gICAgPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIENoYXJzZXQgIkNEQVRBIj4NCi0gICAgPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIENoYXJzZXRzICJDREFUQSI+DQotICAgIDwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLQ0KLTwhRU5USVRZICUgTGFuZ3VhZ2VDb2RlICJOTVRPS0VOIj4NCi0gICAgPCEtLSBhIGxhbmd1YWdlIGNvZGUsIGFzIHBlciBbUkZDMTc2Nl0gLS0+DQotDQotPCFFTlRJVFkgJSBDaGFyYWN0ZXIgIkNEQVRBIj4NCi0gICAgPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLQ0KLTwhRU5USVRZICUgTnVtYmVyICJDREFUQSI+DQotICAgIDwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIC0tPg0KLQ0KLTwhRU5USVRZICUgTGlua1R5cGVzICJDREFUQSI+DQotICAgIDwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi0NCi08IUVOVElUWSAlIE1lZGlhRGVzYyAiQ0RBVEEiPg0KLSAgICA8IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi0NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBzZWUgW1JGQzIzOTZdIC0tPg0KLQ0KLTwhRU5USVRZICUgVXJpTGlzdCAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycyAtLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+DQotICAgIDwhLS0gZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbi4gSVNPIGRhdGUgZm9ybWF0IC0tPg0KLQ0KLTwhRU5USVRZICUgU2NyaXB0ICJDREFUQSI+DQotICAgIDwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotDQotPCFFTlRJVFkgJSBTdHlsZVNoZWV0ICJDREFUQSI+DQotICAgIDwhLS0gc3R5bGUgc2hlZXQgZGF0YSAtLT4NCi0NCi08IUVOVElUWSAlIFRleHQgIkNEQVRBIj4NCi0gICAgPCEtLSB1c2VkIGZvciB0aXRsZXMgZXRjLiAtLT4NCi0NCi08IUVOVElUWSAlIEZyYW1lVGFyZ2V0ICJOTVRPS0VOIj4NCi0gICAgPCEtLSByZW5kZXIgaW4gdGhpcyBmcmFtZSAtLT4NCi0NCi08IUVOVElUWSAlIExlbmd0aCAiQ0RBVEEiPg0KLSAgICA8IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi0NCi08IUVOVElUWSAlIE11bHRpTGVuZ3RoICJDREFUQSI+DQotICAgIDwhLS0gcGl4ZWwsIHBlcmNlbnRhZ2UsIG9yIHJlbGF0aXZlIC0tPg0KLQ0KLTwhRU5USVRZICUgTXVsdGlMZW5ndGhzICJDREFUQSI+DQotICAgIDwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgTXVsdGlMZW5ndGggLS0+DQotDQotPCFFTlRJVFkgJSBQaXhlbHMgIkNEQVRBIj4NCi0gICAgPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLQ0KLTwhLS0gdGhlc2UgYXJlIHVzZWQgZm9yIGltYWdlIG1hcHMgLS0+DQotDQotPCFFTlRJVFkgJSBTaGFwZSAiKHJlY3R8Y2lyY2xlfHBvbHl8ZGVmYXVsdCkiPg0KLQ0KLTwhRU5USVRZICUgQ29vcmRzICJDREFUQSI+DQotICAgIDwhLS0gY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbGVuZ3RocyAtLT4NCi0NCi08IS0tIHVzZWQgZm9yIG9iamVjdCwgYXBwbGV0LCBpbWcsIGlucHV0IGFuZCBpZnJhbWUgLS0+DQotPCFFTlRJVFkgJSBJbWdBbGlnbiAiKHRvcHxtaWRkbGV8Ym90dG9tfGxlZnR8cmlnaHQpIj4NCi0NCi08IS0tIGEgY29sb3IgdXNpbmcgc1JHQjogI1JSR0dCQiBhcyBIZXggdmFsdWVzIC0tPg0KLTwhRU5USVRZICUgQ29sb3IgIkNEQVRBIj4NCi0NCi08IS0tIFRoZXJlIGFyZSBhbHNvIDE2IHdpZGVseSBrbm93biBjb2xvciBuYW1lcyB3aXRoIHRoZWlyIHNSR0IgdmFsdWVzOg0KLQ0KLSAgICBCbGFjayAgPSAjMDAwMDAwICAgIEdyZWVuICA9ICMwMDgwMDANCi0gICAgU2lsdmVyID0gI0MwQzBDMCAgICBMaW1lICAgPSAjMDBGRjAwDQotICAgIEdyYXkgICA9ICM4MDgwODAgICAgT2xpdmUgID0gIzgwODAwMA0KLSAgICBXaGl0ZSAgPSAjRkZGRkZGICAgIFllbGxvdyA9ICNGRkZGMDANCi0gICAgTWFyb29uID0gIzgwMDAwMCAgICBOYXZ5ICAgPSAjMDAwMDgwDQotICAgIFJlZCAgICA9ICNGRjAwMDAgICAgQmx1ZSAgID0gIzAwMDBGRg0KLSAgICBQdXJwbGUgPSAjODAwMDgwICAgIFRlYWwgICA9ICMwMDgwODANCi0gICAgRnVjaHNpYT0gI0ZGMDBGRiAgICBBcXVhICAgPSAjMDBGRkZGDQotLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gR2VuZXJpYyBBdHRyaWJ1dGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGNvcmUgYXR0cmlidXRlcyBjb21tb24gdG8gbW9zdCBlbGVtZW50cw0KLSAgaWQgICAgICAgZG9jdW1lbnQtd2lkZSB1bmlxdWUgaWQNCi0gIGNsYXNzICAgIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMNCi0gIHN0eWxlICAgIGFzc29jaWF0ZWQgc3R5bGUgaW5mbw0KLSAgdGl0bGUgICAgYWR2aXNvcnkgdGl0bGUvYW1wbGlmaWNhdGlvbg0KLS0tPg0KLTwhRU5USVRZICUgY29yZWF0dHJzDQotICJpZCAgICAgICAgICBJRCAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY2xhc3MgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHN0eWxlICAgICAgICVTdHlsZVNoZWV0OyAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIGludGVybmF0aW9uYWxpemF0aW9uIGF0dHJpYnV0ZXMNCi0gIGxhbmcgICAgICAgIGxhbmd1YWdlIGNvZGUgKGJhY2t3YXJkcyBjb21wYXRpYmxlKQ0KLSAgeG1sOmxhbmcgICAgbGFuZ3VhZ2UgY29kZSAoYXMgcGVyIFhNTCAxLjAgc3BlYykNCi0gIGRpciAgICAgICAgIGRpcmVjdGlvbiBmb3Igd2Vhay9uZXV0cmFsIHRleHQNCi0tLT4NCi08IUVOVElUWSAlIGkxOG4NCi0gImxhbmcgICAgICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgZGlyICAgICAgICAgKGx0cnxydGwpICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBhdHRyaWJ1dGVzIGZvciBjb21tb24gVUkgZXZlbnRzDQotICBvbmNsaWNrICAgICBhIHBvaW50ZXIgYnV0dG9uIHdhcyBjbGlja2VkDQotICBvbmRibGNsaWNrICBhIHBvaW50ZXIgYnV0dG9uIHdhcyBkb3VibGUgY2xpY2tlZA0KLSAgb25tb3VzZWRvd24gYSBwb2ludGVyIGJ1dHRvbiB3YXMgcHJlc3NlZCBkb3duDQotICBvbm1vdXNldXAgICBhIHBvaW50ZXIgYnV0dG9uIHdhcyByZWxlYXNlZA0KLSAgb25tb3VzZW1vdmUgYSBwb2ludGVyIHdhcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50DQotICBvbm1vdXNlb3V0ICBhIHBvaW50ZXIgd2FzIG1vdmVkIGF3YXkgZnJvbSB0aGUgZWxlbWVudA0KLSAgb25rZXlwcmVzcyAgYSBrZXkgd2FzIHByZXNzZWQgYW5kIHJlbGVhc2VkDQotICBvbmtleWRvd24gICBhIGtleSB3YXMgcHJlc3NlZCBkb3duDQotICBvbmtleXVwICAgICBhIGtleSB3YXMgcmVsZWFzZWQNCi0tLT4NCi08IUVOVElUWSAlIGV2ZW50cw0KLSAib25jbGljayAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uZGJsY2xpY2sgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlZG93biAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZXVwICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2VvdmVyICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlbW92ZSAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZW91dCAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ua2V5cHJlc3MgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmtleWRvd24gICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25rZXl1cCAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBhdHRyaWJ1dGVzIGZvciBlbGVtZW50cyB0aGF0IGNhbiBnZXQgdGhlIGZvY3VzDQotICBhY2Nlc3NrZXkgICBhY2Nlc3NpYmlsaXR5IGtleSBjaGFyYWN0ZXINCi0gIHRhYmluZGV4ICAgIHBvc2l0aW9uIGluIHRhYmJpbmcgb3JkZXINCi0gIG9uZm9jdXMgICAgIHRoZSBlbGVtZW50IGdvdCB0aGUgZm9jdXMNCi0gIG9uYmx1ciAgICAgIHRoZSBlbGVtZW50IGxvc3QgdGhlIGZvY3VzDQotLS0+DQotPCFFTlRJVFkgJSBmb2N1cw0KLSAiYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCFFTlRJVFkgJSBhdHRycyAiJWNvcmVhdHRyczsgJWkxOG47ICVldmVudHM7Ij4NCi0NCi08IS0tIHRleHQgYWxpZ25tZW50IGZvciBwLCBkaXYsIGgxLWg2LiBUaGUgZGVmYXVsdCBpcw0KLSAgICAgYWxpZ249ImxlZnQiIGZvciBsdHIgaGVhZGluZ3MsICJyaWdodCIgZm9yIHJ0bCAtLT4NCi0NCi08IUVOVElUWSAlIFRleHRBbGlnbiAiYWxpZ24gKGxlZnR8Y2VudGVyfHJpZ2h0KSAjSU1QTElFRCI+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gVGV4dCBFbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIHNwZWNpYWwNCi0gICAiYnIgfCBzcGFuIHwgYmRvIHwgb2JqZWN0IHwgYXBwbGV0IHwgaW1nIHwgbWFwIHwgaWZyYW1lIj4NCi0NCi08IUVOVElUWSAlIGZvbnRzdHlsZSAidHQgfCBpIHwgYiB8IGJpZyB8IHNtYWxsIHwgdQ0KLSAgICAgICAgICAgICAgICAgICAgICB8IHMgfCBzdHJpa2UgfGZvbnQgfCBiYXNlZm9udCI+DQotDQotPCFFTlRJVFkgJSBwaHJhc2UgImVtIHwgc3Ryb25nIHwgZGZuIHwgY29kZSB8IHEgfCBzdWIgfCBzdXAgfA0KLSAgICAgICAgICAgICAgICAgICBzYW1wIHwga2JkIHwgdmFyIHwgY2l0ZSB8IGFiYnIgfCBhY3JvbnltIj4NCi0NCi08IUVOVElUWSAlIGlubGluZS5mb3JtcyAiaW5wdXQgfCBzZWxlY3QgfCB0ZXh0YXJlYSB8IGxhYmVsIHwgYnV0dG9uIj4NCi0NCi08IS0tIHRoZXNlIGNhbiBvY2N1ciBhdCBibG9jayBvciBpbmxpbmUgbGV2ZWwgLS0+DQotPCFFTlRJVFkgJSBtaXNjICJpbnMgfCBkZWwgfCBzY3JpcHQgfCBub3NjcmlwdCI+DQotDQotPCFFTlRJVFkgJSBpbmxpbmUgImEgfCAlc3BlY2lhbDsgfCAlZm9udHN0eWxlOyB8ICVwaHJhc2U7IHwgJWlubGluZS5mb3JtczsiPg0KLQ0KLTwhLS0gJUlubGluZTsgY292ZXJzIGlubGluZSBvciAidGV4dC1sZXZlbCIgZWxlbWVudHMgLS0+DQotPCFFTlRJVFkgJSBJbmxpbmUgIigjUENEQVRBIHwgJWlubGluZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBCbG9jayBsZXZlbCBlbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIGhlYWRpbmcgImgxfGgyfGgzfGg0fGg1fGg2Ij4NCi08IUVOVElUWSAlIGxpc3RzICJ1bCB8IG9sIHwgZGwgfCBtZW51IHwgZGlyIj4NCi08IUVOVElUWSAlIGJsb2NrdGV4dCAicHJlIHwgaHIgfCBibG9ja3F1b3RlIHwgYWRkcmVzcyB8IGNlbnRlciB8IG5vZnJhbWVzIj4NCi0NCi08IUVOVElUWSAlIGJsb2NrDQotICAgICJwIHwgJWhlYWRpbmc7IHwgZGl2IHwgJWxpc3RzOyB8ICVibG9ja3RleHQ7IHwgaXNpbmRleCB8ZmllbGRzZXQgfCB0YWJsZSI+DQotDQotPCFFTlRJVFkgJSBCbG9jayAiKCVibG9jazsgfCBmb3JtIHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS0gJUZsb3c7IG1peGVzIEJsb2NrIGFuZCBJbmxpbmUgYW5kIGlzIHVzZWQgZm9yIGxpc3QgaXRlbXMgZXRjLiAtLT4NCi08IUVOVElUWSAlIEZsb3cgIigjUENEQVRBIHwgJWJsb2NrOyB8IGZvcm0gfCAlaW5saW5lOyB8ICVtaXNjOykqIj4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IENvbnRlbnQgbW9kZWxzIGZvciBleGNsdXNpb25zID09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gYSBlbGVtZW50cyB1c2UgJUlubGluZTsgZXhjbHVkaW5nIGEgLS0+DQotDQotPCFFTlRJVFkgJSBhLmNvbnRlbnQNCi0gICAiKCNQQ0RBVEEgfCAlc3BlY2lhbDsgfCAlZm9udHN0eWxlOyB8ICVwaHJhc2U7IHwgJWlubGluZS5mb3JtczsgfCAlbWlzYzspKiI+DQotDQotPCEtLSBwcmUgdXNlcyAlSW5saW5lIGV4Y2x1ZGluZyBpbWcsIG9iamVjdCwgYXBwbGV0LCBiaWcsIHNtYWxsLA0KLSAgICAgc3ViLCBzdXAsIGZvbnQsIG9yIGJhc2Vmb250IC0tPg0KLQ0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAiKCNQQ0RBVEEgfCBhIHwgYnIgfCBzcGFuIHwgYmRvIHwgbWFwIHwgdHQgfCBpIHwgYiB8IHUgfCBzIHwNCi0gICAgICAlcGhyYXNlOyB8ICVpbmxpbmUuZm9ybXM7KSoiPg0KLQ0KLTwhLS0gZm9ybSB1c2VzICVGbG93OyBleGNsdWRpbmcgZm9ybSAtLT4NCi0NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCNQQ0RBVEEgfCAlYmxvY2s7IHwgJWlubGluZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLSBidXR0b24gdXNlcyAlRmxvdzsgYnV0IGV4Y2x1ZGVzIGEsIGZvcm0sIGZvcm0gY29udHJvbHMsIGlmcmFtZSAtLT4NCi0NCi08IUVOVElUWSAlIGJ1dHRvbi5jb250ZW50DQotICAgIigjUENEQVRBIHwgcCB8ICVoZWFkaW5nOyB8IGRpdiB8ICVsaXN0czsgfCAlYmxvY2t0ZXh0OyB8DQotICAgICAgdGFibGUgfCBiciB8IHNwYW4gfCBiZG8gfCBvYmplY3QgfCBhcHBsZXQgfCBpbWcgfCBtYXAgfA0KLSAgICAgICVmb250c3R5bGU7IHwgJXBocmFzZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRG9jdW1lbnQgU3RydWN0dXJlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIHRoZSBuYW1lc3BhY2UgVVJJIGRlc2lnbmF0ZXMgdGhlIGRvY3VtZW50IHByb2ZpbGUgLS0+DQotDQotPCFFTEVNRU5UIGh0bWwgKGhlYWQsIGJvZHkpPg0KLTwhQVRUTElTVCBodG1sDQotICAlaTE4bjsNCi0gIHhtbG5zICAgICAgICVVUkk7ICAgICAgICAgICNGSVhFRCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBEb2N1bWVudCBIZWFkID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5taXNjICIoc2NyaXB0fHN0eWxlfG1ldGF8bGlua3xvYmplY3R8aXNpbmRleCkqIj4NCi0NCi08IS0tIGNvbnRlbnQgbW9kZWwgaXMgJWhlYWQubWlzYzsgY29tYmluZWQgd2l0aCBhIHNpbmdsZQ0KLSAgICAgdGl0bGUgYW5kIGFuIG9wdGlvbmFsIGJhc2UgZWxlbWVudCBpbiBhbnkgb3JkZXIgLS0+DQotDQotPCFFTEVNRU5UIGhlYWQgKCVoZWFkLm1pc2M7LA0KLSAgICAgKCh0aXRsZSwgJWhlYWQubWlzYzssIChiYXNlLCAlaGVhZC5taXNjOyk/KSB8DQotICAgICAgKGJhc2UsICVoZWFkLm1pc2M7LCAodGl0bGUsICVoZWFkLm1pc2M7KSkpKT4NCi0NCi08IUFUVExJU1QgaGVhZA0KLSAgJWkxOG47DQotICBwcm9maWxlICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gVGhlIHRpdGxlIGVsZW1lbnQgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgZmxvdyBvZiB0ZXh0Lg0KLSAgICAgICBJdCBzaG91bGQgYmUgZGlzcGxheWVkLCBmb3IgZXhhbXBsZSBhcyB0aGUgcGFnZSBoZWFkZXIgb3INCi0gICAgICAgd2luZG93IHRpdGxlLiBFeGFjdGx5IG9uZSB0aXRsZSBpcyByZXF1aXJlZCBwZXIgZG9jdW1lbnQuDQotICAgIC0tPg0KLTwhRUxFTUVOVCB0aXRsZSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIHRpdGxlICVpMThuOz4NCi0NCi08IS0tIGRvY3VtZW50IGJhc2UgVVJJIC0tPg0KLQ0KLTwhRUxFTUVOVCBiYXNlIEVNUFRZPg0KLTwhQVRUTElTVCBiYXNlDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIGdlbmVyaWMgbWV0YWluZm9ybWF0aW9uIC0tPg0KLTwhRUxFTUVOVCBtZXRhIEVNUFRZPg0KLTwhQVRUTElTVCBtZXRhDQotICAlaTE4bjsNCi0gIGh0dHAtZXF1aXYgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY29udGVudCAgICAgQ0RBVEEgICAgICAgICAgI1JFUVVJUkVEDQotICBzY2hlbWUgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIFJlbGF0aW9uc2hpcCB2YWx1ZXMgY2FuIGJlIHVzZWQgaW4gcHJpbmNpcGxlOg0KLQ0KLSAgIGEpIGZvciBkb2N1bWVudCBzcGVjaWZpYyB0b29sYmFycy9tZW51cyB3aGVuIHVzZWQNCi0gICAgICB3aXRoIHRoZSBsaW5rIGVsZW1lbnQgaW4gZG9jdW1lbnQgaGVhZCBlLmcuDQotICAgICAgICBzdGFydCwgY29udGVudHMsIHByZXZpb3VzLCBuZXh0LCBpbmRleCwgZW5kLCBoZWxwDQotICAgYikgdG8gbGluayB0byBhIHNlcGFyYXRlIHN0eWxlIHNoZWV0IChyZWw9InN0eWxlc2hlZXQiKQ0KLSAgIGMpIHRvIG1ha2UgYSBsaW5rIHRvIGEgc2NyaXB0IChyZWw9InNjcmlwdCIpDQotICAgZCkgYnkgc3R5bGVzaGVldHMgdG8gY29udHJvbCBob3cgY29sbGVjdGlvbnMgb2YNCi0gICAgICBodG1sIG5vZGVzIGFyZSByZW5kZXJlZCBpbnRvIHByaW50ZWQgZG9jdW1lbnRzDQotICAgZSkgdG8gbWFrZSBhIGxpbmsgdG8gYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50DQotICAgICAgZS5nLiBhIFBvc3RTY3JpcHQgb3IgUERGIHZlcnNpb24gKHJlbD0iYWx0ZXJuYXRlIiBtZWRpYT0icHJpbnQiKQ0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBsaW5rIEVNUFRZPg0KLTwhQVRUTElTVCBsaW5rDQotICAlYXR0cnM7DQotICBjaGFyc2V0ICAgICAlQ2hhcnNldDsgICAgICAjSU1QTElFRA0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGhyZWZsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgcmVsICAgICAgICAgJUxpbmtUeXBlczsgICAgI0lNUExJRUQNCi0gIHJldiAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICBtZWRpYSAgICAgICAlTWVkaWFEZXNjOyAgICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHN0eWxlIGluZm8sIHdoaWNoIG1heSBpbmNsdWRlIENEQVRBIHNlY3Rpb25zIC0tPg0KLTwhRUxFTUVOVCBzdHlsZSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIHN0eWxlDQotICAlaTE4bjsNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNSRVFVSVJFRA0KLSAgbWVkaWEgICAgICAgJU1lZGlhRGVzYzsgICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICB4bWw6c3BhY2UgICAocHJlc2VydmUpICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLSAgPg0KLQ0KLTwhLS0gc2NyaXB0IHN0YXRlbWVudHMsIHdoaWNoIG1heSBpbmNsdWRlIENEQVRBIHNlY3Rpb25zIC0tPg0KLTwhRUxFTUVOVCBzY3JpcHQgKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBzY3JpcHQNCi0gIGNoYXJzZXQgICAgICVDaGFyc2V0OyAgICAgICNJTVBMSUVEDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjUkVRVUlSRUQNCi0gIGxhbmd1YWdlICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZGVmZXIgICAgICAgKGRlZmVyKSAgICAgICAgI0lNUExJRUQNCi0gIHhtbDpzcGFjZSAgIChwcmVzZXJ2ZSkgICAgICNGSVhFRCAncHJlc2VydmUnDQotICA+DQotDQotPCEtLSBhbHRlcm5hdGUgY29udGVudCBjb250YWluZXIgZm9yIG5vbiBzY3JpcHQtYmFzZWQgcmVuZGVyaW5nIC0tPg0KLQ0KLTwhRUxFTUVOVCBub3NjcmlwdCAlRmxvdzs+DQotPCFBVFRMSVNUIG5vc2NyaXB0DQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT09IEZyYW1lcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGlubGluZSBzdWJ3aW5kb3cgLS0+DQotDQotPCFFTEVNRU5UIGlmcmFtZSAlRmxvdzs+DQotPCFBVFRMSVNUIGlmcmFtZQ0KLSAgJWNvcmVhdHRyczsNCi0gIGxvbmdkZXNjICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgc3JjICAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGZyYW1lYm9yZGVyICgxfDApICAgICAgICAgICIxIg0KLSAgbWFyZ2lud2lkdGggJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIG1hcmdpbmhlaWdodCAlUGl4ZWxzOyAgICAgICNJTVBMSUVEDQotICBzY3JvbGxpbmcgICAoeWVzfG5vfGF1dG8pICAiYXV0byINCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIGFsdGVybmF0ZSBjb250ZW50IGNvbnRhaW5lciBmb3Igbm9uIGZyYW1lLWJhc2VkIHJlbmRlcmluZyAtLT4NCi0NCi08IUVMRU1FTlQgbm9mcmFtZXMgJUZsb3c7Pg0KLTwhQVRUTElTVCBub2ZyYW1lcw0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IERvY3VtZW50IEJvZHkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGJvZHkgJUZsb3c7Pg0KLTwhQVRUTElTVCBib2R5DQotICAlYXR0cnM7DQotICBvbmxvYWQgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb251bmxvYWQgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIGJhY2tncm91bmQgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgdGV4dCAgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGxpbmsgICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB2bGluayAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgYWxpbmsgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgZGl2ICVGbG93Oz4gIDwhLS0gZ2VuZXJpYyBsYW5ndWFnZS9zdHlsZSBjb250YWluZXIgLS0+DQotPCFBVFRMSVNUIGRpdg0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBQYXJhZ3JhcGhzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBwICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBwDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEhlYWRpbmdzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLQ0KLSAgVGhlcmUgYXJlIHNpeCBsZXZlbHMgb2YgaGVhZGluZ3MgZnJvbSBoMSAodGhlIG1vc3QgaW1wb3J0YW50KQ0KLSAgdG8gaDYgKHRoZSBsZWFzdCBpbXBvcnRhbnQpLg0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBoMSAgJUlubGluZTs+DQotPCFBVFRMSVNUIGgxDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoMiAlSW5saW5lOz4NCi08IUFUVExJU1QgaDINCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGgzICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoMw0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDQgJUlubGluZTs+DQotPCFBVFRMSVNUIGg0DQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoNSAlSW5saW5lOz4NCi08IUFUVExJU1QgaDUNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGg2ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoNg0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBMaXN0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gVW5vcmRlcmVkIGxpc3QgYnVsbGV0IHN0eWxlcyAtLT4NCi0NCi08IUVOVElUWSAlIFVMU3R5bGUgIihkaXNjfHNxdWFyZXxjaXJjbGUpIj4NCi0NCi08IS0tIFVub3JkZXJlZCBsaXN0IC0tPg0KLQ0KLTwhRUxFTUVOVCB1bCAobGkpKz4NCi08IUFUVExJU1QgdWwNCi0gICVhdHRyczsNCi0gIHR5cGUgICAgICAgICVVTFN0eWxlOyAgICAgI0lNUExJRUQNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIE9yZGVyZWQgbGlzdCBudW1iZXJpbmcgc3R5bGUNCi0NCi0gICAgMSAgIGFyYWJpYyBudW1iZXJzICAgICAgMSwgMiwgMywgLi4uDQotICAgIGEgICBsb3dlciBhbHBoYSAgICAgICAgIGEsIGIsIGMsIC4uLg0KLSAgICBBICAgdXBwZXIgYWxwaGEgICAgICAgICBBLCBCLCBDLCAuLi4NCi0gICAgaSAgIGxvd2VyIHJvbWFuICAgICAgICAgaSwgaWksIGlpaSwgLi4uDQotICAgIEkgICB1cHBlciByb21hbiAgICAgICAgIEksIElJLCBJSUksIC4uLg0KLQ0KLSAgICBUaGUgc3R5bGUgaXMgYXBwbGllZCB0byB0aGUgc2VxdWVuY2UgbnVtYmVyIHdoaWNoIGJ5IGRlZmF1bHQNCi0gICAgaXMgcmVzZXQgdG8gMSBmb3IgdGhlIGZpcnN0IGxpc3QgaXRlbSBpbiBhbiBvcmRlcmVkIGxpc3QuDQotLS0+DQotPCFFTlRJVFkgJSBPTFN0eWxlICJDREFUQSI+DQotDQotPCEtLSBPcmRlcmVkIChudW1iZXJlZCkgbGlzdCAtLT4NCi0NCi08IUVMRU1FTlQgb2wgKGxpKSs+DQotPCFBVFRMSVNUIG9sDQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlT0xTdHlsZTsgICAgICAjSU1QTElFRA0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAgI0lNUExJRUQNCi0gIHN0YXJ0ICAgICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBzaW5nbGUgY29sdW1uIGxpc3QgKERFUFJFQ0FURUQpIC0tPiANCi08IUVMRU1FTlQgbWVudSAobGkpKz4NCi08IUFUVExJU1QgbWVudQ0KLSAgJWF0dHJzOw0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gbXVsdGlwbGUgY29sdW1uIGxpc3QgKERFUFJFQ0FURUQpIC0tPiANCi08IUVMRU1FTlQgZGlyIChsaSkrPg0KLTwhQVRUTElTVCBkaXINCi0gICVhdHRyczsNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIExJU3R5bGUgaXMgY29uc3RyYWluZWQgdG86ICIoJVVMU3R5bGU7fCVPTFN0eWxlOykiIC0tPg0KLTwhRU5USVRZICUgTElTdHlsZSAiQ0RBVEEiPg0KLQ0KLTwhLS0gbGlzdCBpdGVtIC0tPg0KLQ0KLTwhRUxFTUVOVCBsaSAlRmxvdzs+DQotPCFBVFRMSVNUIGxpDQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlTElTdHlsZTsgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIGRlZmluaXRpb24gbGlzdHMgLSBkdCBmb3IgdGVybSwgZGQgZm9yIGl0cyBkZWZpbml0aW9uIC0tPg0KLQ0KLTwhRUxFTUVOVCBkbCAoZHR8ZGQpKz4NCi08IUFUVExJU1QgZGwNCi0gICVhdHRyczsNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGR0ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBkdA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkZCAlRmxvdzs+DQotPCFBVFRMSVNUIGRkDQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gQWRkcmVzcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGluZm9ybWF0aW9uIG9uIGF1dGhvciAtLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyAlSW5saW5lOz4NCi08IUFUVExJU1QgYWRkcmVzcw0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEhvcml6b250YWwgUnVsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGhyIEVNUFRZPg0KLTwhQVRUTElTVCBocg0KLSAgJWF0dHJzOw0KLSAgYWxpZ24gICAgICAgKGxlZnR8Y2VudGVyfHJpZ2h0KSAjSU1QTElFRA0KLSAgbm9zaGFkZSAgICAgKG5vc2hhZGUpICAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFByZWZvcm1hdHRlZCBUZXh0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjb250ZW50IGlzICVJbmxpbmU7IGV4Y2x1ZGluZyANCi0gICAgICAgICJpbWd8b2JqZWN0fGFwcGxldHxiaWd8c21hbGx8c3VifHN1cHxmb250fGJhc2Vmb250IiAtLT4NCi0NCi08IUVMRU1FTlQgcHJlICVwcmUuY29udGVudDs+DQotPCFBVFRMSVNUIHByZQ0KLSAgJWF0dHJzOw0KLSAgd2lkdGggICAgICAgJU51bWJlcjsgICAgICAjSU1QTElFRA0KLSAgeG1sOnNwYWNlICAgKHByZXNlcnZlKSAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEJsb2NrLWxpa2UgUXVvdGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGJsb2NrcXVvdGUgJUZsb3c7Pg0KLTwhQVRUTElTVCBibG9ja3F1b3RlDQotICAlYXR0cnM7DQotICBjaXRlICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFRleHQgYWxpZ25tZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjZW50ZXIgY29udGVudCAtLT4NCi08IUVMRU1FTlQgY2VudGVyICVGbG93Oz4NCi08IUFUVExJU1QgY2VudGVyDQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSW5zZXJ0ZWQvRGVsZXRlZCBUZXh0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tDQotICBpbnMvZGVsIGFyZSBhbGxvd2VkIGluIGJsb2NrIGFuZCBpbmxpbmUgY29udGVudCwgYnV0IGl0cw0KLSAgaW5hcHByb3ByaWF0ZSB0byBpbmNsdWRlIGJsb2NrIGNvbnRlbnQgd2l0aGluIGFuIGlucyBlbGVtZW50DQotICBvY2N1cnJpbmcgaW4gaW5saW5lIGNvbnRlbnQuDQotLS0+DQotPCFFTEVNRU5UIGlucyAlRmxvdzs+DQotPCFBVFRMSVNUIGlucw0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRhdGV0aW1lICAgICVEYXRldGltZTsgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGRlbCAlRmxvdzs+DQotPCFBVFRMSVNUIGRlbA0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRhdGV0aW1lICAgICVEYXRldGltZTsgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBUaGUgQW5jaG9yIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGNvbnRlbnQgaXMgJUlubGluZTsgZXhjZXB0IHRoYXQgYW5jaG9ycyBzaG91bGRuJ3QgYmUgbmVzdGVkIC0tPg0KLQ0KLTwhRUxFTUVOVCBhICVhLmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCBhDQotICAlYXR0cnM7DQotICBjaGFyc2V0ICAgICAlQ2hhcnNldDsgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgaHJlZmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIHJlbCAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICByZXYgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIHNoYXBlICAgICAgICVTaGFwZTsgICAgICAgICJyZWN0Ig0KLSAgY29vcmRzICAgICAgJUNvb3JkczsgICAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBJbmxpbmUgRWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgc3BhbiAlSW5saW5lOz4gPCEtLSBnZW5lcmljIGxhbmd1YWdlL3N0eWxlIGNvbnRhaW5lciAtLT4NCi08IUFUVExJU1Qgc3Bhbg0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiZG8gJUlubGluZTs+ICA8IS0tIEkxOE4gQmlEaSBvdmVyLXJpZGUgLS0+DQotPCFBVFRMSVNUIGJkbw0KLSAgJWNvcmVhdHRyczsNCi0gICVldmVudHM7DQotICBsYW5nICAgICAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIGRpciAgICAgICAgIChsdHJ8cnRsKSAgICAgICNSRVFVSVJFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiciBFTVBUWT4gICA8IS0tIGZvcmNlZCBsaW5lIGJyZWFrIC0tPg0KLTwhQVRUTElTVCBicg0KLSAgJWNvcmVhdHRyczsNCi0gIGNsZWFyICAgICAgIChsZWZ0fGFsbHxyaWdodHxub25lKSAibm9uZSINCi0gID4NCi0NCi08IUVMRU1FTlQgZW0gJUlubGluZTs+ICAgPCEtLSBlbXBoYXNpcyAtLT4NCi08IUFUVExJU1QgZW0gJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc3Ryb25nICVJbmxpbmU7PiAgIDwhLS0gc3Ryb25nIGVtcGhhc2lzIC0tPg0KLTwhQVRUTElTVCBzdHJvbmcgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgZGZuICVJbmxpbmU7PiAgIDwhLS0gZGVmaW5pdGlvbmFsIC0tPg0KLTwhQVRUTElTVCBkZm4gJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgY29kZSAlSW5saW5lOz4gICA8IS0tIHByb2dyYW0gY29kZSAtLT4NCi08IUFUVExJU1QgY29kZSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzYW1wICVJbmxpbmU7PiAgIDwhLS0gc2FtcGxlIC0tPg0KLTwhQVRUTElTVCBzYW1wICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGtiZCAlSW5saW5lOz4gIDwhLS0gc29tZXRoaW5nIHVzZXIgd291bGQgdHlwZSAtLT4NCi08IUFUVExJU1Qga2JkICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHZhciAlSW5saW5lOz4gICA8IS0tIHZhcmlhYmxlIC0tPg0KLTwhQVRUTElTVCB2YXIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgY2l0ZSAlSW5saW5lOz4gICA8IS0tIGNpdGF0aW9uIC0tPg0KLTwhQVRUTElTVCBjaXRlICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGFiYnIgJUlubGluZTs+ICAgPCEtLSBhYmJyZXZpYXRpb24gLS0+DQotPCFBVFRMSVNUIGFiYnIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYWNyb255bSAlSW5saW5lOz4gICA8IS0tIGFjcm9ueW0gLS0+DQotPCFBVFRMSVNUIGFjcm9ueW0gJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgcSAlSW5saW5lOz4gICA8IS0tIGlubGluZWQgcXVvdGUgLS0+DQotPCFBVFRMSVNUIHENCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIHN1YiAlSW5saW5lOz4gPCEtLSBzdWJzY3JpcHQgLS0+DQotPCFBVFRMSVNUIHN1YiAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzdXAgJUlubGluZTs+IDwhLS0gc3VwZXJzY3JpcHQgLS0+DQotPCFBVFRMSVNUIHN1cCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCB0dCAlSW5saW5lOz4gICA8IS0tIGZpeGVkIHBpdGNoIGZvbnQgLS0+DQotPCFBVFRMSVNUIHR0ICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGkgJUlubGluZTs+ICAgPCEtLSBpdGFsaWMgZm9udCAtLT4NCi08IUFUVExJU1QgaSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBiICVJbmxpbmU7PiAgIDwhLS0gYm9sZCBmb250IC0tPg0KLTwhQVRUTElTVCBiICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGJpZyAlSW5saW5lOz4gICA8IS0tIGJpZ2dlciBmb250IC0tPg0KLTwhQVRUTElTVCBiaWcgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc21hbGwgJUlubGluZTs+ICAgPCEtLSBzbWFsbGVyIGZvbnQgLS0+DQotPCFBVFRMSVNUIHNtYWxsICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHUgJUlubGluZTs+ICAgPCEtLSB1bmRlcmxpbmUgLS0+DQotPCFBVFRMSVNUIHUgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgcyAlSW5saW5lOz4gICA8IS0tIHN0cmlrZS10aHJvdWdoIC0tPg0KLTwhQVRUTElTVCBzICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHN0cmlrZSAlSW5saW5lOz4gICA8IS0tIHN0cmlrZS10aHJvdWdoIC0tPg0KLTwhQVRUTElTVCBzdHJpa2UgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYmFzZWZvbnQgRU1QVFk+ICA8IS0tIGJhc2UgZm9udCBzaXplIC0tPg0KLTwhQVRUTElTVCBiYXNlZm9udA0KLSAgaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgIENEQVRBICAgICAgICAgICNSRVFVSVJFRA0KLSAgY29sb3IgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGZhY2UgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGZvbnQgJUlubGluZTs+IDwhLS0gbG9jYWwgY2hhbmdlIHRvIGZvbnQgLS0+DQotPCFBVFRMSVNUIGZvbnQNCi0gICVjb3JlYXR0cnM7DQotICAlaTE4bjsNCi0gIHNpemUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjb2xvciAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgZmFjZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT0gT2JqZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCEtLQ0KLSAgb2JqZWN0IGlzIHVzZWQgdG8gZW1iZWQgb2JqZWN0cyBhcyBwYXJ0IG9mIEhUTUwgcGFnZXMuDQotICBwYXJhbSBlbGVtZW50cyBzaG91bGQgcHJlY2VkZSBvdGhlciBjb250ZW50LiBQYXJhbWV0ZXJzDQotICBjYW4gYWxzbyBiZSBleHByZXNzZWQgYXMgYXR0cmlidXRlL3ZhbHVlIHBhaXJzIG9uIHRoZQ0KLSAgb2JqZWN0IGVsZW1lbnQgaXRzZWxmIHdoZW4gYnJldml0eSBpcyBkZXNpcmVkLg0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBvYmplY3QgKCNQQ0RBVEEgfCBwYXJhbSB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKj4NCi08IUFUVExJU1Qgb2JqZWN0DQotICAlYXR0cnM7DQotICBkZWNsYXJlICAgICAoZGVjbGFyZSkgICAgICAjSU1QTElFRA0KLSAgY2xhc3NpZCAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGNvZGViYXNlICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkYXRhICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIGNvZGV0eXBlICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICBhcmNoaXZlICAgICAlVXJpTGlzdDsgICAgICAjSU1QTElFRA0KLSAgc3RhbmRieSAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgdXNlbWFwICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gIGJvcmRlciAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBoc3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBwYXJhbSBpcyB1c2VkIHRvIHN1cHBseSBhIG5hbWVkIHByb3BlcnR5IHZhbHVlLg0KLSAgSW4gWE1MIGl0IHdvdWxkIHNlZW0gbmF0dXJhbCB0byBmb2xsb3cgUkRGIGFuZCBzdXBwb3J0IGFuDQotICBhYmJyZXZpYXRlZCBzeW50YXggd2hlcmUgdGhlIHBhcmFtIGVsZW1lbnRzIGFyZSByZXBsYWNlZA0KLSAgYnkgYXR0cmlidXRlIHZhbHVlIHBhaXJzIG9uIHRoZSBvYmplY3Qgc3RhcnQgdGFnLg0KLS0tPg0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4NCi08IUFUVExJU1QgcGFyYW0NCi0gIGlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjUkVRVUlSRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZXR5cGUgICAoZGF0YXxyZWZ8b2JqZWN0KSAiZGF0YSINCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSmF2YSBhcHBsZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhLS0NCi0gIE9uZSBvZiBjb2RlIG9yIG9iamVjdCBhdHRyaWJ1dGVzIG11c3QgYmUgcHJlc2VudC4NCi0gIFBsYWNlIHBhcmFtIGVsZW1lbnRzIGJlZm9yZSBvdGhlciBjb250ZW50Lg0KLS0tPg0KLTwhRUxFTUVOVCBhcHBsZXQgKCNQQ0RBVEEgfCBwYXJhbSB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKj4NCi08IUFUVExJU1QgYXBwbGV0DQotICAlY29yZWF0dHJzOw0KLSAgY29kZWJhc2UgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGFyY2hpdmUgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjb2RlICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgb2JqZWN0ICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGFsdCAgICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI1JFUVVJUkVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjUkVRVUlSRUQNCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBoc3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBJbWFnZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0NCi0gICBUbyBhdm9pZCBhY2Nlc3NpYmlsaXR5IHByb2JsZW1zIGZvciBwZW9wbGUgd2hvIGFyZW4ndA0KLSAgIGFibGUgdG8gc2VlIHRoZSBpbWFnZSwgeW91IHNob3VsZCBwcm92aWRlIGEgdGV4dA0KLSAgIGRlc2NyaXB0aW9uIHVzaW5nIHRoZSBhbHQgYW5kIGxvbmdkZXNjIGF0dHJpYnV0ZXMuDQotICAgSW4gYWRkaXRpb24sIGF2b2lkIHRoZSB1c2Ugb2Ygc2VydmVyLXNpZGUgaW1hZ2UgbWFwcy4NCi0tLT4NCi0NCi08IUVMRU1FTlQgaW1nIEVNUFRZPg0KLTwhQVRUTElTVCBpbWcNCi0gICVhdHRyczsNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgYWx0ICAgICAgICAgJVRleHQ7ICAgICAgICAgI1JFUVVJUkVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgbG9uZ2Rlc2MgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgdXNlbWFwICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGlzbWFwICAgICAgIChpc21hcCkgICAgICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgYm9yZGVyICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGhzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICB2c3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gdXNlbWFwIHBvaW50cyB0byBhIG1hcCBlbGVtZW50IHdoaWNoIG1heSBiZSBpbiB0aGlzIGRvY3VtZW50DQotICBvciBhbiBleHRlcm5hbCBkb2N1bWVudCwgYWx0aG91Z2ggdGhlIGxhdHRlciBpcyBub3Qgd2lkZWx5IHN1cHBvcnRlZCAtLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IENsaWVudC1zaWRlIGltYWdlIG1hcHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gVGhlc2UgY2FuIGJlIHBsYWNlZCBpbiB0aGUgc2FtZSBkb2N1bWVudCBvciBncm91cGVkIGluIGENCi0gICAgIHNlcGFyYXRlIGRvY3VtZW50IGFsdGhvdWdoIHRoaXMgaXNuJ3QgeWV0IHdpZGVseSBzdXBwb3J0ZWQgLS0+DQotDQotPCFFTEVNRU5UIG1hcCAoKCVibG9jazsgfCBmb3JtIHwgJW1pc2M7KSsgfCBhcmVhKyk+DQotPCFBVFRMSVNUIG1hcA0KLSAgJWkxOG47DQotICAlZXZlbnRzOw0KLSAgaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBjbGFzcyAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgc3R5bGUgICAgICAgJVN0eWxlU2hlZXQ7ICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBhcmVhIEVNUFRZPg0KLTwhQVRUTElTVCBhcmVhDQotICAlYXR0cnM7DQotICBzaGFwZSAgICAgICAlU2hhcGU7ICAgICAgICAicmVjdCINCi0gIGNvb3JkcyAgICAgICVDb29yZHM7ICAgICAgICNJTVBMSUVEDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgbm9ocmVmICAgICAgKG5vaHJlZikgICAgICAgI0lNUExJRUQNCi0gIGFsdCAgICAgICAgICVUZXh0OyAgICAgICAgICNSRVFVSVJFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRm9ybXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgZm9ybSAlZm9ybS5jb250ZW50Oz4gICA8IS0tIGZvcm1zIHNob3VsZG4ndCBiZSBuZXN0ZWQgLS0+DQotDQotPCFBVFRMSVNUIGZvcm0NCi0gICVhdHRyczsNCi0gIGFjdGlvbiAgICAgICVVUkk7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgbWV0aG9kICAgICAgKGdldHxwb3N0KSAgICAgImdldCINCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICBlbmN0eXBlICAgICAlQ29udGVudFR5cGU7ICAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIg0KLSAgb25zdWJtaXQgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ucmVzZXQgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBhY2NlcHQgICAgICAlQ29udGVudFR5cGVzOyAjSU1QTElFRA0KLSAgYWNjZXB0LWNoYXJzZXQgJUNoYXJzZXRzOyAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSAgRWFjaCBsYWJlbCBtdXN0IG5vdCBjb250YWluIG1vcmUgdGhhbiBPTkUgZmllbGQNCi0gIExhYmVsIGVsZW1lbnRzIHNob3VsZG4ndCBiZSBuZXN0ZWQuDQotLS0+DQotPCFFTEVNRU5UIGxhYmVsICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBsYWJlbA0KLSAgJWF0dHJzOw0KLSAgZm9yICAgICAgICAgSURSRUYgICAgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVOVElUWSAlIElucHV0VHlwZQ0KLSAgIih0ZXh0IHwgcGFzc3dvcmQgfCBjaGVja2JveCB8DQotICAgIHJhZGlvIHwgc3VibWl0IHwgcmVzZXQgfA0KLSAgICBmaWxlIHwgaGlkZGVuIHwgaW1hZ2UgfCBidXR0b24pIg0KLSAgID4NCi0NCi08IS0tIHRoZSBuYW1lIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgYWxsIGJ1dCBzdWJtaXQgJiByZXNldCAtLT4NCi0NCi08IUVMRU1FTlQgaW5wdXQgRU1QVFk+ICAgICA8IS0tIGZvcm0gY29udHJvbCAtLT4NCi08IUFUVExJU1QgaW5wdXQNCi0gICVhdHRyczsNCi0gIHR5cGUgICAgICAgICVJbnB1dFR5cGU7ICAgICJ0ZXh0Ig0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjaGVja2VkICAgICAoY2hlY2tlZCkgICAgICAjSU1QTElFRA0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIHJlYWRvbmx5ICAgIChyZWFkb25seSkgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgbWF4bGVuZ3RoICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBhbHQgICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdXNlbWFwICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnNlbGVjdCAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25jaGFuZ2UgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIGFjY2VwdCAgICAgICVDb250ZW50VHlwZXM7ICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBzZWxlY3QgKG9wdGdyb3VwfG9wdGlvbikrPiAgPCEtLSBvcHRpb24gc2VsZWN0b3IgLS0+DQotPCFBVFRMSVNUIHNlbGVjdA0KLSAgJWF0dHJzOw0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBtdWx0aXBsZSAgICAobXVsdGlwbGUpICAgICAjSU1QTElFRA0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uY2hhbmdlICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIG9wdGdyb3VwIChvcHRpb24pKz4gICA8IS0tIG9wdGlvbiBncm91cCAtLT4NCi08IUFUVExJU1Qgb3B0Z3JvdXANCi0gICVhdHRyczsNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICBsYWJlbCAgICAgICAlVGV4dDsgICAgICAgICAjUkVRVUlSRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgb3B0aW9uICgjUENEQVRBKT4gICAgIDwhLS0gc2VsZWN0YWJsZSBjaG9pY2UgLS0+DQotPCFBVFRMSVNUIG9wdGlvbg0KLSAgJWF0dHJzOw0KLSAgc2VsZWN0ZWQgICAgKHNlbGVjdGVkKSAgICAgI0lNUExJRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICBsYWJlbCAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgdGV4dGFyZWEgKCNQQ0RBVEEpPiAgICAgPCEtLSBtdWx0aS1saW5lIHRleHQgZmllbGQgLS0+DQotPCFBVFRMSVNUIHRleHRhcmVhDQotICAlYXR0cnM7DQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgcm93cyAgICAgICAgJU51bWJlcjsgICAgICAgI1JFUVVJUkVEDQotICBjb2xzICAgICAgICAlTnVtYmVyOyAgICAgICAjUkVRVUlSRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICByZWFkb25seSAgICAocmVhZG9ubHkpICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uc2VsZWN0ICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmNoYW5nZSAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIFRoZSBmaWVsZHNldCBlbGVtZW50IGlzIHVzZWQgdG8gZ3JvdXAgZm9ybSBmaWVsZHMuDQotICBPbmx5IG9uZSBsZWdlbmQgZWxlbWVudCBzaG91bGQgb2NjdXIgaW4gdGhlIGNvbnRlbnQNCi0gIGFuZCBpZiBwcmVzZW50IHNob3VsZCBvbmx5IGJlIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UuDQotLS0+DQotPCFFTEVNRU5UIGZpZWxkc2V0ICgjUENEQVRBIHwgbGVnZW5kIHwgJWJsb2NrOyB8IGZvcm0gfCAlaW5saW5lOyB8ICVtaXNjOykqPg0KLTwhQVRUTElTVCBmaWVsZHNldA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhRU5USVRZICUgTEFsaWduICIodG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSI+DQotDQotPCFFTEVNRU5UIGxlZ2VuZCAlSW5saW5lOz4gICAgIDwhLS0gZmllbGRzZXQgbGFiZWwgLS0+DQotPCFBVFRMSVNUIGxlZ2VuZA0KLSAgJWF0dHJzOw0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVMQWxpZ247ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSBDb250ZW50IGlzICVGbG93OyBleGNsdWRpbmcgYSwgZm9ybSwgZm9ybSBjb250cm9scywgaWZyYW1lDQotLS0+IA0KLTwhRUxFTUVOVCBidXR0b24gJWJ1dHRvbi5jb250ZW50Oz4gIDwhLS0gcHVzaCBidXR0b24gLS0+DQotPCFBVFRMSVNUIGJ1dHRvbg0KLSAgJWF0dHJzOw0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB0eXBlICAgICAgICAoYnV0dG9ufHN1Ym1pdHxyZXNldCkgInN1Ym1pdCINCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gc2luZ2xlLWxpbmUgdGV4dCBpbnB1dCBjb250cm9sIChERVBSRUNBVEVEKSAtLT4NCi08IUVMRU1FTlQgaXNpbmRleCBFTVBUWT4NCi08IUFUVExJU1QgaXNpbmRleA0KLSAgJWNvcmVhdHRyczsNCi0gICVpMThuOw0KLSAgcHJvbXB0ICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PT0gVGFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gRGVyaXZlZCBmcm9tIElFVEYgSFRNTCB0YWJsZSBzdGFuZGFyZCwgc2VlIFtSRkMxOTQyXSAtLT4NCi0NCi08IS0tDQotIFRoZSBib3JkZXIgYXR0cmlidXRlIHNldHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgZnJhbWUgYXJvdW5kIHRoZQ0KLSB0YWJsZS4gVGhlIGRlZmF1bHQgdW5pdHMgYXJlIHNjcmVlbiBwaXhlbHMuDQotDQotIFRoZSBmcmFtZSBhdHRyaWJ1dGUgc3BlY2lmaWVzIHdoaWNoIHBhcnRzIG9mIHRoZSBmcmFtZSBhcm91bmQNCi0gdGhlIHRhYmxlIHNob3VsZCBiZSByZW5kZXJlZC4gVGhlIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lIGFzDQotIENBTFMgdG8gYXZvaWQgYSBuYW1lIGNsYXNoIHdpdGggdGhlIHZhbGlnbiBhdHRyaWJ1dGUuDQotLS0+DQotPCFFTlRJVFkgJSBURnJhbWUgIih2b2lkfGFib3ZlfGJlbG93fGhzaWRlc3xsaHN8cmhzfHZzaWRlc3xib3h8Ym9yZGVyKSI+DQotDQotPCEtLQ0KLSBUaGUgcnVsZXMgYXR0cmlidXRlIGRlZmluZXMgd2hpY2ggcnVsZXMgdG8gZHJhdyBiZXR3ZWVuIGNlbGxzOg0KLQ0KLSBJZiBydWxlcyBpcyBhYnNlbnQgdGhlbiBhc3N1bWU6DQotICAgICAibm9uZSIgaWYgYm9yZGVyIGlzIGFic2VudCBvciBib3JkZXI9IjAiIG90aGVyd2lzZSAiYWxsIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgVFJ1bGVzICIobm9uZSB8IGdyb3VwcyB8IHJvd3MgfCBjb2xzIHwgYWxsKSI+DQotICANCi08IS0tIGhvcml6b250YWwgcGxhY2VtZW50IG9mIHRhYmxlIHJlbGF0aXZlIHRvIGRvY3VtZW50IC0tPg0KLTwhRU5USVRZICUgVEFsaWduICIobGVmdHxjZW50ZXJ8cmlnaHQpIj4NCi0NCi08IS0tIGhvcml6b250YWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMNCi0NCi0gIGNoYXIgICAgICAgIGFsaWdubWVudCBjaGFyLCBlLmcuIGNoYXI9JzonDQotICBjaGFyb2ZmICAgICBvZmZzZXQgZm9yIGFsaWdubWVudCBjaGFyDQotLS0+DQotPCFFTlRJVFkgJSBjZWxsaGFsaWduDQotICAiYWxpZ24gICAgICAobGVmdHxjZW50ZXJ8cmlnaHR8anVzdGlmeXxjaGFyKSAjSU1QTElFRA0KLSAgIGNoYXIgICAgICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gICBjaGFyb2ZmICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gdmVydGljYWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMgLS0+DQotPCFFTlRJVFkgJSBjZWxsdmFsaWduDQotICAidmFsaWduICAgICAodG9wfG1pZGRsZXxib3R0b218YmFzZWxpbmUpICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0YWJsZQ0KLSAgICAgKGNhcHRpb24/LCAoY29sKnxjb2xncm91cCopLCB0aGVhZD8sIHRmb290PywgKHRib2R5K3x0cispKT4NCi08IUVMRU1FTlQgY2FwdGlvbiAgJUlubGluZTs+DQotPCFFTEVNRU5UIHRoZWFkICAgICh0cikrPg0KLTwhRUxFTUVOVCB0Zm9vdCAgICAodHIpKz4NCi08IUVMRU1FTlQgdGJvZHkgICAgKHRyKSs+DQotPCFFTEVNRU5UIGNvbGdyb3VwIChjb2wpKj4NCi08IUVMRU1FTlQgY29sICAgICAgRU1QVFk+DQotPCFFTEVNRU5UIHRyICAgICAgICh0aHx0ZCkrPg0KLTwhRUxFTUVOVCB0aCAgICAgICAlRmxvdzs+DQotPCFFTEVNRU5UIHRkICAgICAgICVGbG93Oz4NCi0NCi08IUFUVExJU1QgdGFibGUNCi0gICVhdHRyczsNCi0gIHN1bW1hcnkgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgYm9yZGVyICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIGZyYW1lICAgICAgICVURnJhbWU7ICAgICAgICNJTVBMSUVEDQotICBydWxlcyAgICAgICAlVFJ1bGVzOyAgICAgICAjSU1QTElFRA0KLSAgY2VsbHNwYWNpbmcgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGNlbGxwYWRkaW5nICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlVEFsaWduOyAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVOVElUWSAlIENBbGlnbiAiKHRvcHxib3R0b218bGVmdHxyaWdodCkiPg0KLQ0KLTwhQVRUTElTVCBjYXB0aW9uDQotICAlYXR0cnM7DQotICBhbGlnbiAgICAgICAlQ0FsaWduOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi1jb2xncm91cCBncm91cHMgYSBzZXQgb2YgY29sIGVsZW1lbnRzLiBJdCBhbGxvd3MgeW91IHRvIGdyb3VwDQotc2V2ZXJhbCBzZW1hbnRpY2FsbHkgcmVsYXRlZCBjb2x1bW5zIHRvZ2V0aGVyLg0KLS0tPg0KLTwhQVRUTElTVCBjb2xncm91cA0KLSAgJWF0dHJzOw0KLSAgc3BhbiAgICAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICB3aWR0aCAgICAgICAlTXVsdGlMZW5ndGg7ICAjSU1QTElFRA0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IS0tDQotIGNvbCBlbGVtZW50cyBkZWZpbmUgdGhlIGFsaWdubWVudCBwcm9wZXJ0aWVzIGZvciBjZWxscyBpbg0KLSBvbmUgb3IgbW9yZSBjb2x1bW5zLg0KLQ0KLSBUaGUgd2lkdGggYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbnMsIGUuZy4NCi0NCi0gICAgIHdpZHRoPTY0ICAgICAgICB3aWR0aCBpbiBzY3JlZW4gcGl4ZWxzDQotICAgICB3aWR0aD0wLjUqICAgICAgcmVsYXRpdmUgd2lkdGggb2YgMC41DQotDQotIFRoZSBzcGFuIGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGF0dHJpYnV0ZXMgb2Ygb25lDQotIGNvbCBlbGVtZW50IHRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY29sdW1uLg0KLS0tPg0KLTwhQVRUTElTVCBjb2wNCi0gICVhdHRyczsNCi0gIHNwYW4gICAgICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgd2lkdGggICAgICAgJU11bHRpTGVuZ3RoOyAgI0lNUExJRUQNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCEtLQ0KLSAgICBVc2UgdGhlYWQgdG8gZHVwbGljYXRlIGhlYWRlcnMgd2hlbiBicmVha2luZyB0YWJsZQ0KLSAgICBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLCBvciBmb3Igc3RhdGljIGhlYWRlcnMgd2hlbg0KLSAgICB0Ym9keSBzZWN0aW9ucyBhcmUgcmVuZGVyZWQgaW4gc2Nyb2xsaW5nIHBhbmVsLg0KLQ0KLSAgICBVc2UgdGZvb3QgdG8gZHVwbGljYXRlIGZvb3RlcnMgd2hlbiBicmVha2luZyB0YWJsZQ0KLSAgICBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLCBvciBmb3Igc3RhdGljIGZvb3RlcnMgd2hlbg0KLSAgICB0Ym9keSBzZWN0aW9ucyBhcmUgcmVuZGVyZWQgaW4gc2Nyb2xsaW5nIHBhbmVsLg0KLQ0KLSAgICBVc2UgbXVsdGlwbGUgdGJvZHkgc2VjdGlvbnMgd2hlbiBydWxlcyBhcmUgbmVlZGVkDQotICAgIGJldHdlZW4gZ3JvdXBzIG9mIHRhYmxlIHJvd3MuDQotLS0+DQotPCFBVFRMSVNUIHRoZWFkDQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0Zm9vdA0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IUFUVExJU1QgdGJvZHkNCi0gICVhdHRyczsNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCFBVFRMSVNUIHRyDQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIFNjb3BlIGlzIHNpbXBsZXIgdGhhbiBoZWFkZXJzIGF0dHJpYnV0ZSBmb3IgY29tbW9uIHRhYmxlcyAtLT4NCi08IUVOVElUWSAlIFNjb3BlICIocm93fGNvbHxyb3dncm91cHxjb2xncm91cCkiPg0KLQ0KLTwhLS0gdGggaXMgZm9yIGhlYWRlcnMsIHRkIGZvciBkYXRhIGFuZCBmb3IgY2VsbHMgYWN0aW5nIGFzIGJvdGggLS0+DQotDQotPCFBVFRMSVNUIHRoDQotICAlYXR0cnM7DQotICBhYmJyICAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgYXhpcyAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGhlYWRlcnMgICAgIElEUkVGUyAgICAgICAgICNJTVBMSUVEDQotICBzY29wZSAgICAgICAlU2NvcGU7ICAgICAgICAjSU1QTElFRA0KLSAgcm93c3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICBjb2xzcGFuICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICBub3dyYXAgICAgICAobm93cmFwKSAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0ZA0KLSAgJWF0dHJzOw0KLSAgYWJiciAgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIGF4aXMgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBoZWFkZXJzICAgICBJRFJFRlMgICAgICAgICAjSU1QTElFRA0KLSAgc2NvcGUgICAgICAgJVNjb3BlOyAgICAgICAgI0lNUExJRUQNCi0gIHJvd3NwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgY29sc3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgbm93cmFwICAgICAgKG5vd3JhcCkgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMWQ3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+YnVnXzE0MzIwOTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvYmFkYXR0cmlidXRlbmFtZXMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L2JhZGF0dHJpYnV0ZW5hbWVzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUxNTk3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvYmFkYXR0cmlidXRlbmFtZXMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keSBmYWtlbmFtZT0iIj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWJkNTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPCEtLSBqc3AgZXhwcmVzc2lvbiBpbiBhdHRyaWJ1dGUgdmFsdWUgLS0+Ci08Ym9keSBiZ2NvbG9yPSI8JT0icmVkIiAlPiI+Ci08IS0tIGpzcCBleHByZXNzaW9uIGluIGF0dHJpYnV0ZSBuYW1lIC0tPgotPHAgPCU9ImFsaWduIiAlPj0ibGVmdCIgLz4KLTwhLS0ganNwIGV4cHJlc3Npb24gYXMgYXR0cmlidXRlIG5hbWUgJiB2YWx1ZSAtLT4KLTxhIDwlPSJocmVmPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnJyIgJT4+RWNsaXBzZSBsaW5rPC9hPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWJkNTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08IS0tIGpzcCBleHByZXNzaW9uIGluIGF0dHJpYnV0ZSB2YWx1ZSAtLT4KLTxib2R5IGJnY29sb3I9IjwlPSJyZWQiICU+Ij4KLTwhLS0ganNwIGV4cHJlc3Npb24gaW4gYXR0cmlidXRlIG5hbWUgLS0+Ci08cCA8JT0iYWxpZ24iICU+PSJsZWZ0IiAvPgotPCEtLSBqc3AgZXhwcmVzc2lvbiBhcyBhdHRyaWJ1dGUgbmFtZSAmIHZhbHVlIC0tPgotPGEgPCU9ImhyZWY9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcnIiAlPj5FY2xpcHNlIGxpbms8L2E+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9idWlsZC9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWYwMDg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5qc3Bmb3JtYXR0aW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYjY4M2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+anNwZm9ybWF0dGluZzwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1LWZtdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1LWZtdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MjZjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NS1mbXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCUtLSBqc3AgZGVjbGFyYXRpb24gZm9yIFN0cmluZyBwYWwgc2hvdWxkIHN0YXkgb24gc2FtZSBsaW5lLiBBbGwgb3RoZXJzIHNob3VsZCBtb3ZlIHRvIG5ldyBsaW5lIC0tJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+PCUhU3RyaW5nIHBhbCA9ICJmcmllbmQiOyU+Ci08JSFTdHJpbmcgbWVzc2FnZSA9ICJmcmllbmQiOyU+Ci08JSFTdHJpbmcgYnVkZHkgPSAiZnJpZW5kIjslPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08JS0tIGpzcCBleHByZXNzaW9uIG11c3QgYmUgZm9sbG93ZWQgZGlyZWN0bHkgYnkgISBiZWNhdXNlIG5vIHdoaXRlc3BhY2UgZXhpc3RzIGJldHdlZW4gLS0lPgotV2VsY29tZSB0byBXVFAsCi08JT1tZXNzYWdlJT4hCi08cD5XZWxjb21lIHRvIFdUUCwgPCU9cGFsJT4hPC9wPgotPCUtLSBqc3AgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBhdHRyaWJ1dGUgLS0lPgotPHRhYmxlIDwlPSJhbGlnbj0nbGVmdCciJT4+Ci0JPHRyPgotCQk8JS0tIG5vIHdoaXRlc3BhY2UgZXhpc3RzIGJlZm9yZS9hZnRlciBqc3AgdGFnIHNvIGtlZXAgaXQgdGhhdCB3YXkgLS0lPgotCQk8dGg+Q29sdW1uPGpzcDpzZXRQcm9wZXJ0eSBuYW1lPSJteW5hbWUiIHByb3BlcnR5PSJteXByb3BlcnR5IiAvPkhlYWRpbmc8L3RoPgotCQk8JS0tIHdoaXRlc3BhY2UgZXhpc3RzIGJlZm9yZS9hZnRlciBqc3AgdGFnIHNvIG5ld2xpbmVzIGFyZSBva2F5IC0tJT4KLQkJPHRoPkNvbHVtbiA8anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiIC8+Ci0JCUhlYWRpbmc8L3RoPgotCTwvdHI+Ci0JPHRyPgotCQk8dGQ+Um93IDE6IENvbCAxPC90ZD4KLQkJPHRkPlJvdyAxOiBDb2wgMjwvdGQ+Ci0JPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU1ZjM1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwlLS0ganNwIGRlY2xhcmF0aW9uIGZvciBTdHJpbmcgcGFsIHNob3VsZCBzdGF5IG9uIHNhbWUgbGluZS4gQWxsIG90aGVycyBzaG91bGQgbW92ZSB0byBuZXcgbGluZSAtLSU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPjwlISBTdHJpbmcgcGFsPSJmcmllbmQiOyAlPgotPCUhIFN0cmluZyBtZXNzYWdlPSJmcmllbmQiOyAlPiA8JSEgU3RyaW5nIGJ1ZGR5PSJmcmllbmQiOyAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08JS0tIGpzcCBleHByZXNzaW9uIG11c3QgYmUgZm9sbG93ZWQgZGlyZWN0bHkgYnkgISBiZWNhdXNlIG5vIHdoaXRlc3BhY2UgZXhpc3RzIGJldHdlZW4gLS0lPgotV2VsY29tZSB0byBXVFAsIDwlPW1lc3NhZ2UlPiEKLTxwPldlbGNvbWUgdG8gV1RQLCA8JT1wYWwlPiE8L3A+Ci08JS0tIGpzcCBleHByZXNzaW9uIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgYW55IG90aGVyIGF0dHJpYnV0ZSAtLSU+Ci08dGFibGUgICAgICAgICAgICA8JT0iYWxpZ249J2xlZnQnIiU+PgotCTx0cj4KLQkJPCUtLSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZWZvcmUvYWZ0ZXIganNwIHRhZyBzbyBrZWVwIGl0IHRoYXQgd2F5IC0tJT4KLQkJPHRoPkNvbHVtbjxqc3A6c2V0UHJvcGVydHkgbmFtZT0ibXluYW1lIiBwcm9wZXJ0eT0ibXlwcm9wZXJ0eSIvPkhlYWRpbmc8L3RoPgotCQk8JS0tIHdoaXRlc3BhY2UgZXhpc3RzIGJlZm9yZS9hZnRlciBqc3AgdGFnIHNvIG5ld2xpbmVzIGFyZSBva2F5IC0tJT4KLQkJPHRoPkNvbHVtbiA8anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiLz4gSGVhZGluZzwvdGg+Ci0JPC90cj4KLQk8dHI+Ci0JCTx0ZD5Sb3cgMTogQ29sIDE8L3RkPgotCQk8dGQ+Um93IDE6IENvbCAyPC90ZD4KLQk8L3RyPgotPC90YWJsZT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzEtZm10LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMS1mbXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODQ3OWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMS1mbXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCUtLSBqc3AgZGVjbGFyYXRpb24gZm9yIFN0cmluZyBwYWwgc2hvdWxkIHN0YXkgb24gc2FtZSBsaW5lLiBBbGwgb3RoZXJzIHNob3VsZCBtb3ZlIHRvIG5ldyBsaW5lIC0tJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+PCUhU3RyaW5nIHBhbCA9ICJmcmllbmQiOyU+Ci08JSFTdHJpbmcgbWVzc2FnZSA9ICJmcmllbmQiOyU+Ci08JSFTdHJpbmcgYnVkZHkgPSAiZnJpZW5kIjslPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8xLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZWFjNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8xLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwlLS0ganNwIGRlY2xhcmF0aW9uIGZvciBTdHJpbmcgcGFsIHNob3VsZCBzdGF5IG9uIHNhbWUgbGluZS4gQWxsIG90aGVycyBzaG91bGQgbW92ZSB0byBuZXcgbGluZSAtLSU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPjwlISBTdHJpbmcgcGFsPSJmcmllbmQiOyAlPgotPCUhIFN0cmluZyBtZXNzYWdlPSJmcmllbmQiOyAlPiA8JSEgU3RyaW5nIGJ1ZGR5PSJmcmllbmQiOyAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLWZtdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzItZm10LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UyMTU5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzItZm10LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JSFTdHJpbmcgcGFsID0gImZyaWVuZCI7JT4KLTwlIVN0cmluZyBtZXNzYWdlID0gImZyaWVuZCI7JT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCUtLSBqc3AgZXhwcmVzc2lvbiBtdXN0IGJlIGZvbGxvd2VkIGRpcmVjdGx5IGJ5ICEgYmVjYXVzZSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZXR3ZWVuIC0tJT4KLVdlbGNvbWUgdG8gV1RQLAotPCU9bWVzc2FnZSU+IQotPHA+V2VsY29tZSB0byBXVFAsIDwlPXBhbCU+ITwvcD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiMjA0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlISBTdHJpbmcgcGFsPSJmcmllbmQiOyAlPgotPCUhIFN0cmluZyBtZXNzYWdlPSJmcmllbmQiOyAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08JS0tIGpzcCBleHByZXNzaW9uIG11c3QgYmUgZm9sbG93ZWQgZGlyZWN0bHkgYnkgISBiZWNhdXNlIG5vIHdoaXRlc3BhY2UgZXhpc3RzIGJldHdlZW4gLS0lPgotV2VsY29tZSB0byBXVFAsIDwlPW1lc3NhZ2UlPiEKLTxwPldlbGNvbWUgdG8gV1RQLCA8JT1wYWwlPiE8L3A+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLWZtdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzMtZm10LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3ZjgwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzMtZm10LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlLS0ganNwIGV4cHJlc3Npb24gc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhbnkgb3RoZXIgYXR0cmlidXRlIC0tJT4KLTx0YWJsZSA8JT0iYWxpZ249J2xlZnQnIiU+PgotPC90YWJsZT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2MzE5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCUtLSBqc3AgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBhdHRyaWJ1dGUgLS0lPgotPHRhYmxlICAgICAgICAgICAgPCU9ImFsaWduPSdsZWZ0JyIlPj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LWZtdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzQtZm10LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU0YjM2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzQtZm10LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTx0YWJsZT4KLQk8dHI+Ci0JCTwlLS0gbm8gd2hpdGVzcGFjZSBleGlzdHMgYmVmb3JlL2FmdGVyIGpzcCB0YWcgc28ga2VlcCBpdCB0aGF0IHdheSAtLSU+Ci0JCTx0aD5Db2x1bW48anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiIC8+SGVhZGluZzwvdGg+Ci0JCTwlLS0gd2hpdGVzcGFjZSBleGlzdHMgYmVmb3JlL2FmdGVyIGpzcCB0YWcgc28gbmV3bGluZXMgYXJlIG9rYXkgLS0lPgotCQk8dGg+Q29sdW1uIDxqc3A6c2V0UHJvcGVydHkgbmFtZT0ibXluYW1lIiBwcm9wZXJ0eT0ibXlwcm9wZXJ0eSIgLz4KLQkJSGVhZGluZzwvdGg+Ci0JPC90cj4KLQk8dHI+Ci0JCTx0ZD5Sb3cgMTogQ29sIDE8L3RkPgotCQk8dGQ+Um93IDE6IENvbCAyPC90ZD4KLQk8L3RyPgotPC90YWJsZT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM3NDc3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHRhYmxlPgotCTx0cj4KLQkJPCUtLSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZWZvcmUvYWZ0ZXIganNwIHRhZyBzbyBrZWVwIGl0IHRoYXQgd2F5IC0tJT4KLQkJPHRoPkNvbHVtbjxqc3A6c2V0UHJvcGVydHkgbmFtZT0ibXluYW1lIiBwcm9wZXJ0eT0ibXlwcm9wZXJ0eSIvPkhlYWRpbmc8L3RoPgotCQk8JS0tIHdoaXRlc3BhY2UgZXhpc3RzIGJlZm9yZS9hZnRlciBqc3AgdGFnIHNvIG5ld2xpbmVzIGFyZSBva2F5IC0tJT4KLQkJPHRoPkNvbHVtbiA8anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiLz4gSGVhZGluZzwvdGg+Ci0JPC90cj4KLQk8dHI+Ci0JCTx0ZD5Sb3cgMTogQ29sIDE8L3RkPgotCQk8dGQ+Um93IDE6IENvbCAyPC90ZD4KLQk8L3RyPgotPC90YWJsZT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0FjY2Vzc29yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWU4NjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS50ZXh0LnRlc3RzOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3IgYWNjZXNzaW5nIGNsYXNzZXMgYW5kIG1lbWJlcnMgd2hpY2ggY2Fubm90Ci0gKiBiZSBhY2Nlc3NlZCB1c2luZyBzdGFuZGFyZCBKYXZhIGFjY2VzcyBjb250cm9sIGxpa2UgcHJpdmF0ZQotICogb3IgcGFja2FnZSB2aXNpYmxlIGVsZW1lbnRzLgotICoKLSAqIEBzaW5jZSAzLjEKLSAqLwotcHVibGljIGNsYXNzIEFjY2Vzc29yIHsKLQotCS8qKiBUaGUgY2xhc3MgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgQ2xhc3MgZkNsYXNzOwotCS8qKiBUaGUgaW5zdGFuY2UgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgT2JqZWN0IGZJbnN0YW5jZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoT2JqZWN0IGluc3RhbmNlLCBDbGFzcyBjbGF6eikgewotCQlvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhenopOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQlmQ2xhc3M9IGNsYXp6OwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCUFzc2VydC5pc05vdE51bGwoaW5zdGFuY2UpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXNzTmFtZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NMb2FkZXIpOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiA8cD4KLQkgKiBJbiBvcmRlciB0byBnZXQgdGhlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4KLQkgKiBhcmd1bWVudHMgdGhleSBtdXN0IGFsbCBiZSBpbnN0YW5jZW9mIE9iamVjdC4gVXNlCi0JICoge0BsaW5rICNBY2Nlc3NvcihTdHJpbmcsIENsYXNzTG9hZGVyLCBDbGFzc1tdLCBPYmplY3RbXSl9IGlmIHRoaXMKLQkgKiBpcyBub3QgdGhlIGNhc2UuPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgT2JqZWN0W10gY29uc3RydWN0b3JBcmdzKSB7Ci0JCXRoaXMoY2xhc3NOYW1lLCBjbGFzc0xvYWRlciwgZ2V0VHlwZXMoY29uc3RydWN0b3JBcmdzKSwgY29uc3RydWN0b3JBcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JUeXBlcyB0aGUgdHlwZXMgb2YgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvckFyZ3MgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgQ2xhc3NbXSBjb25zdHJ1Y3RvclR5cGVzLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQ29uc3RydWN0b3IgY29uc3RydWN0b3I9IG51bGw7Ci0JCXRyeSB7Ci0JCQljb25zdHJ1Y3Rvcj0gZkNsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3JUeXBlcyk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlMikgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwoY29uc3RydWN0b3IpOwotCQljb25zdHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJZkluc3RhbmNlPSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShjb25zdHJ1Y3RvckFyZ3MpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCB0byBhY2Nlc3Mgc3RhdGljIHN0dWZmLgotCSAqIDwvcD4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyBhbGwgdGhvc2UgYXJndW1lbnRzIG11c3QgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI2ludm9rZShTdHJpbmcsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbWV0aG9kIG5hbWUKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqIEByZXR1cm4gdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGludm9rZShTdHJpbmcgbWV0aG9kTmFtZSwgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCXJldHVybiBpbnZva2UobWV0aG9kTmFtZSwgZ2V0VHlwZXMoYXJndW1lbnRzKSwgYXJndW1lbnRzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnZva2VzIHRoZSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWUgYW5kIGFyZ3VtZW50cy4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSB0eXBlcyB0aGUgYXJndW1lbnQgdHlwZXMKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzCi0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHR5cGVzLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJTWV0aG9kIG1ldGhvZD0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1ldGhvZD0gZkNsYXNzLmdldERlY2xhcmVkTWV0aG9kKG1ldGhvZE5hbWUsIHR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlBc3NlcnQuaXNOb3ROdWxsKG1ldGhvZCk7Ci0JCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJcmV0dXJuIG1ldGhvZC5pbnZva2UoZkluc3RhbmNlLCBhcmd1bWVudHMpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIE9iamVjdCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEJvb2xlYW4oZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIGludCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEludChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldChmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRCb29sZWFuKGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SW50KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0SW50KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpdmF0ZSBGaWVsZCBnZXRGaWVsZChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBudWxsOwotCQl0cnkgewotCQkJZmllbGQ9IGZDbGFzcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoRmllbGRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXJldHVybiBmaWVsZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGdldFR5cGVzKE9iamVjdFtdIG9iamVjdHMpIHsKLQkJaWYgKG9iamVjdHMgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCWludCBsZW5ndGg9IG9iamVjdHMubGVuZ3RoOwotCQlDbGFzc1tdIGNsYXNzZXM9IG5ldyBDbGFzc1tsZW5ndGhdOwotCQlmb3IgKGludCBpPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCUFzc2VydC5pc05vdE51bGwob2JqZWN0c1tpXSk7Ci0JCQljbGFzc2VzW2ldPSBvYmplY3RzW2ldLmdldENsYXNzKCk7Ci0JCX0KLQkJcmV0dXJuIGNsYXNzZXM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZhaWwoKSB7Ci0JCUFzc2VydC5pc1RydWUoZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0VjbGlwc2VUZXh0VGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzkxNWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0VjbGlwc2VUZXh0VGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBUZXN0IFN1aXRlIGZvciBvcmcuZWNsaXBzZS50ZXh0LgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VUZXh0VGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgib3JnLmVjbGlwc2UudGV4dCBUZXN0IFN1aXRlIHVzaW5nIEpTUCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCS8vJEpVbml0LUJFR0lOJAotLy8JCXN1aXRlLmFkZFRlc3QoTGluZVRyYWNrZXJUZXN0NC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERvY3VtZW50RXh0ZW5zaW9uVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KExpbmVUcmFja2VyVGVzdDMuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChEb2N1bWVudFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChGaW5kUmVwbGFjZURvY3VtZW50QWRhcHRlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChFeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dEVkaXRUZXN0cy5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQWRhcHRpdmVHYXBUZXh0VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRTdG9yZVRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChDaGlsZERvY3VtZW50VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFByb2plY3Rpb25UZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChMaW5rVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQ29weU9uV3JpdGVUZXh0U3RvcmVUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dFV0aWxpdGllc1Rlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChBbm5vdGF0aW9uTW9kZWxTdHJlc3NUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQW5ub3RhdGlvbk1vZGVsRXh0ZW5zaW9uMlRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZW1wbGF0ZXNUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCS8vJEpVbml0LUVORCQKLQotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjExZmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0V4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRGVmYXVsdFBvc2l0aW9uVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklQb3NpdGlvblVwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgY2xhc3MgRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEV4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgSVBvc2l0aW9uVXBkYXRlciBmVXBkYXRlcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUlk9ICJ0ZXN0Y2F0ZWdvcnkiOwotCXByaXZhdGUgUG9zaXRpb24gZlBvczsKLQlwcml2YXRlIElEb2N1bWVudCBmRG9jOwotCS8qCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZVcGRhdGVyPSBuZXcgRGVmYXVsdFBvc2l0aW9uVXBkYXRlcihDQVRFR09SWSk7Ci0vLwkJZkRvYyA9IG5ldyBEb2N1bWVudCgiY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIik7Ci0JCWZEb2M9IGNyZWF0ZURvY3VtZW50KCJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiKTsKLQkJZlBvcz0gbmV3IFBvc2l0aW9uKDUsIDUpOwotCQlmRG9jLmFkZFBvc2l0aW9uVXBkYXRlcihmVXBkYXRlcik7Ci0JCWZEb2MuYWRkUG9zaXRpb25DYXRlZ29yeShDQVRFR09SWSk7Ci0JCWZEb2MuYWRkUG9zaXRpb24oQ0FURUdPUlksIGZQb3MpOwotCX0KLQotCXByaXZhdGUgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KFN0cmluZyBjb250ZW50cykgewotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKCJvcmcuZWNsaXBzZS5qc3QuanNwLmpzcHNvdXJjZSIpOwotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgaGFuZGxlci5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkRvYy5yZW1vdmVQb3NpdGlvblVwZGF0ZXIoZlVwZGF0ZXIpOwotCQlmRG9jLnJlbW92ZVBvc2l0aW9uQ2F0ZWdvcnkoQ0FURUdPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyMCwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZEFmdGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIwLCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVCZWZvcmUoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMiwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZEJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyLCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg3LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRSaWdodEJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg1LCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg3LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVBdE9mZnNldCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg1LCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlUmlnaHRCZWZvcmUoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMywgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFJpZ2h0QWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMTAsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZVJpZ2h0QWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMTAsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRXaXRoaW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNiwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDcsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlV2l0aGluKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDYsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlTGVmdEJvcmRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg0LCAyLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg2LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNCwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlUmlnaHRCb3JkZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoOSwgMiwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDQsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlT3ZlclJpZ2h0Qm9yZGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDksIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNCwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDQsIDcsICIiKTsKLQkJQXNzZXJ0LmFzc2VydFRydWUoZlBvcy5pc0RlbGV0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg0LCA3LCAieXl5eXl5eSIpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmUG9zLmlzRGVsZXRlZCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9Qb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9Qb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDExOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0KLXB1YmxpYyBjbGFzcyBQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgSURvY3VtZW50IGZEb2N1bWVudDsKLQotCXB1YmxpYyBQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNoZWNrUG9zaXRpb25zKFBvc2l0aW9uW10gZXhwZWN0ZWQpIHRocm93cyBCYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uIHsKLQkJUG9zaXRpb25bXSBhY3R1YWw9IGZEb2N1bWVudC5nZXRQb3NpdGlvbnMoSURvY3VtZW50LkRFRkFVTFRfQ0FURUdPUlkpOwotCQlhc3NlcnRUcnVlKCJpbnZhbGlkIG51bWJlciBvZiBwb3NpdGlvbnMiLCBhY3R1YWwubGVuZ3RoID09IGV4cGVjdGVkLmxlbmd0aCk7Ci0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMocHJpbnQoYWN0dWFsW2ldKSArICIgIT0gIiArIHByaW50KGV4cGVjdGVkW2ldKSwgZXhwZWN0ZWRbaV0sIGFjdHVhbFtpXSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHByaW50KFBvc2l0aW9uIHApIHsKLQkJcmV0dXJuICJbIiArIHAuZ2V0T2Zmc2V0KCkgKyAiLCIgKyBwLmdldExlbmd0aCgpICsgIl0iOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLwkJZkRvY3VtZW50PSBuZXcgRG9jdW1lbnQoIngteC14LXgteC14LXgteC14LXgteCIpOwotCQlmRG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KCJ4LXgteC14LXgteC14LXgteC14LXgiKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbigwLCAwKSk7Ci0JCWZEb2N1bWVudC5hZGRQb3NpdGlvbihuZXcgUG9zaXRpb24oMCwgMSkpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDUsIDApKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbig1LCAzKSk7Ci0JfQotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoIm9yZy5lY2xpcHNlLmpzdC5qc3AuanNwc291cmNlIik7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBoYW5kbGVyLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChjb250ZW50cyk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCQlmRG9jdW1lbnQ9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQucmVwbGFjZSgwLCAwLCAieXkiKTsKLQotCQlQb3NpdGlvbltdIHBvc2l0aW9ucz0gbmV3IFBvc2l0aW9uW10gewotCQkJCW5ldyBQb3NpdGlvbiggMiwgMSksCi0JCQkJbmV3IFBvc2l0aW9uKCAyLCAwKSwKLQkJCQluZXcgUG9zaXRpb24oIDcsIDMpLAotCQkJCW5ldyBQb3NpdGlvbiggNywgMCkKLQkJfTsKLQotCQljaGVja1Bvc2l0aW9ucyhwb3NpdGlvbnMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ODYwYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL3czYy9kb20vY3NzLyoqLyoiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy93M2MvZG9tL3N0eWxlc2hlZXRzLyoqLyoiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTllZWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLXRlbXAuZm9sZGVyCi1jc3Njb3JldGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuY3NzY29yZXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0Nzk3ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTAzYjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGNzc2NvcmV0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5DU1NDb3JlVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0LAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnRlc3RmaWxlcy5yZXN1bHRzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWYzODk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdGVzdC54bWwsXAotICAgICAgICAgICAgICAgY3NzY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBzcmMvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8KLWphcnMuY29tcGlsZS5vcmRlciA9IGNzc2NvcmV0ZXN0cy5qYXIKLXNvdXJjZS5jc3Njb3JldGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmNzc2NvcmV0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNmZjNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBDU1MgQ29yZSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYzM1Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0LlRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQuVGVzdEZvcm1hdFByb2Nlc3NvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTQ2hhcnNldFJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NGb250RmFjZVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NGb250RmFtaWx5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTSW1wb3J0UnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU01lZGlhUnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU01ldGFNb2RlbFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU1BhZ2VSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTU3R5bGVSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTU3R5bGVTaGVldFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLlRlc3RDU1NEZWNsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTU2VsZWN0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTU291cmNlUGFyc2VyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlLkNTU1RleHRQYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTVXJsVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc3R5bGVzaGVldHMuU3R5bGVTaGVldFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnRlc3RmaWxlcy5DU1NNb2RlbExvYWRUZXN0OwotCi0KLXB1YmxpYyBjbGFzcyBDU1NBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJTU0UgTW9kZWwgQ1NTIFRlc3RzIik7Ci0KLQkJYWRkU291cmNlVGVzdHMoc3VpdGUpOwotCQlhZGRNb2RlbFRlc3RzKHN1aXRlKTsKLQotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShTdHlsZVNoZWV0VGVzdC5jbGFzcyk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFNvdXJjZVRlc3RzKFRlc3RTdWl0ZSBzdWl0ZSkgewotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU291cmNlUGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NUZXh0UGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NTZWxlY3RvclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTVXJsVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRNb2RlbFRlc3RzKFRlc3RTdWl0ZSBzdWl0ZSkgewotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU3R5bGVTaGVldFRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTQ2hhcnNldFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0ltcG9ydFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1N0eWxlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTTWVkaWFSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NQYWdlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTRm9udEZhY2VSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NGb250RmFtaWx5VGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFRlc3RDU1NEZWNsLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU01vZGVsTG9hZFRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTTWV0YU1vZGVsVGVzdC5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhZDZiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5DU1NDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5DU1NEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ1NTQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIFhNTCBTb3VyY2UgZWRpdG9yCi0gKiBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIENTU0NvcmVQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAtMTsKLQotCQlpbnQgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRJbnQoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfSURFTlRJRklFUiwgIjIiKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLldSQVBQSU5HX09ORV9QRVJfTElORSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VJbnQobm9kZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX1BST1BFUlRZX05BTUUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IGZhbHNlOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSB0cnVlOwotCi0JCVN0cmluZyBvcmlnaW5hbFN0cmluZyA9IG5vZGUuZ2V0KHByZWZLZXksICJib2d1cyIpOwotCQlpZiAoISJib2d1cyIuZXF1YWxzKG9yaWdpbmFsU3RyaW5nKSkgewotCQkJb3JpZ2luYWxWYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihvcmlnaW5hbFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0JCQlleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCX0KLQkJbm9kZS5wdXRCb29sZWFuKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBub2RlLmdldEJvb2xlYW4ocHJlZktleSwgdHJ1ZSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsU3RyaW5nKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFN0cmluZyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VJbnQoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlpbnQgb3JpZ2luYWxWYWx1ZSA9IG5vZGUuZ2V0SW50KHByZWZLZXksIC05OTkpOwotCQlpbnQgZXhwZWN0ZWRWYWx1ZSA9IC04ODg7Ci0JCW5vZGUucHV0SW50KHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlpbnQgZm91bmRWYWx1ZSA9IG5vZGUuZ2V0SW50KHByZWZLZXksIC05OTkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmIChvcmlnaW5hbFZhbHVlID09IC05OTkpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXRJbnQocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgbGluZSBkZWxpbWl0ZXIgcHJlZmVyZW5jZXMgYnkgbWFraW5nIHN1cmUgZG9jdW1lbnQgY3JlYXRlZAotCSAqIGZvbGxvd3MgbGluZSBkZWxpbWl0ZXIgcHJlZmVyZW5jZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsaW1pdGVyUHJlZmVyZW5jZXMoKSB7Ci0JCS8vIGNoZWNrIGlmIGNvbnRlbnQgdHlwZSBwcmVmZXJlbmNlcyBtYXRjaAotCQlTdHJpbmcgcHJlZmVycmVkRGVsaW1pdGVyID0gQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzLmdldFByZWZlcnJlZE5ld0xpbmVEZWxpbWl0ZXIoQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCVByZWZlcmVuY2VzIHByZWZzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCVN0cmluZyBnYXRld2F5RGVsaW1pdGVyID0gcHJlZnMuZ2V0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcyBhbmQgQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkgcHJlZmVyZW5jZXMgZG8gbm90IG1hdGNoIiwgZ2F0ZXdheURlbGltaXRlciwgcHJlZmVycmVkRGVsaW1pdGVyKTsKLQotCQkvLyBzZXQgYSBwYXJ0aWN1bGFyIGxpbmUgZGVsaW1pdGVyCi0JCXByZWZzLnB1dChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5MRik7Ci0KLQkJLy8gY3JlYXRlIGRvY3VtZW50Ci0JCUNTU0RvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBDU1NEb2N1bWVudExvYWRlcigpOwotCQlJRW5jb2RlZERvY3VtZW50IGRvY3VtZW50ID0gbG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlTdHJpbmcgZG9jdW1lbnREZWxpbWl0ZXIgPSBkb2N1bWVudC5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0KLQkJLy8gdmVyaWZ5IGRlbGltaXRlciBpbiBkb2N1bWVudCBtYXRjaGVzIHByZWZlcmVuY2UKLQkJYXNzZXJ0RXF1YWxzKCJEZWxpbWl0ZXIgaW4gZG9jdW1lbnQgZG9lcyBub3QgbWF0Y2ggcHJlZmVyZW5jZSIsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLlNUUklOR19MRiwgZG9jdW1lbnREZWxpbWl0ZXIpOwotCi0JCS8vIHJldHVybiB0byBvcmlnaW5hbCBwcmVmZXJlbmNlCi0JCXByZWZzLnJlbW92ZShDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYjQ3YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIENTU0NvcmVUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IENTU0NvcmVUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTQ29yZVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkNTUyBDb3JlIFRlc3RzIik7Ci0KLQkJYWRkVGVzdChDU1NBbGxUZXN0cy5zdWl0ZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlkYzUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIENTU0NvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy8gUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIENTU0NvcmVUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuQ1NTTW9kZWxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ1NTQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBDU1NDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzE3NDY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci0KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VXRpbCB7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgc2ltcGxlIHByb2plY3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUgLQotCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QKLQkgKiBAcGFyYW0gbG9jYXRpb24gLQotCSAqICAgICAgICAgICAgdGhlIGxvY2F0aW9uIG9mIHRoZSBwcm9qZWN0LCBvciBudWxsIGlmIHRoZSBkZWZhdWx0IG9mCi0JICogICAgICAgICAgICAiL25hbWUiIHdpdGhpbiB0aGUgd29ya3NwYWNlIGlzIHRvIGJlIHVzZWQKLQkgKiBAcGFyYW0gbmF0dXJlSWRzIC0KLQkgKiAgICAgICAgICAgIGFuIGFycmF5IG9mIG5hdHVyZXMgSURzIHRvIHNldCBvbiB0aGUgcHJvamVjdCwgbnVsbCBpZiBub25lCi0JICogICAgICAgICAgICBzaG91bGQgYmUgc2V0Ci0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsKLQkJfQotCQlpZiAobmF0dXJlSWRzICE9IG51bGwpIHsKLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQl9Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QobmFtZSk7Ci0JCXRyeSB7Ci0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdDsKLQl9Ci0KLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gQ1NTQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7Ci0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGVudHJ5UGF0aCA9IGVudHJpZXMubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsKLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIobmV3IFBhdGgodGFyZ2V0UGF0aCkpOwotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZW50cnlQYXRoICsgIiAtPiAiICsgdGFyZ2V0UGF0aCk7Ci0JCX0KLQl9Ci0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBDU1NDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcm9vdEVudHJ5IC0gYXZvaWQgdHJhaWxpbmcgc2VwYXJhdG9ycwotCSAqIEBwYXJhbSBmdWxsVGFyZ2V0UGF0aAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW50cnluYW1lCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIFRFU1QgcGx1Z2luIHN0YXJ0aW5nIHcvIGEgIi8iIChlZy4KLQkgKiAgICAgICAgICAgICIvdGVzdGZpbGVzL2J1Z251bWJlci9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcGFyYW0gZnVsbFBhdGgKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8ganVuaXQgdGVzdCB3b3JrcGFjZSAoZWcuCi0JICogICAgICAgICAgICAiL215cnVudGltZXByb2ovc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHsKLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGVbMF07Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Q2xlYW51cFByb2Nlc3NvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNTNjN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuQ1NTQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DU1NDbGVhbnVwU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNsZWFudXAuQ1NTQ2xlYW51cFN0cmF0ZWd5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DbGVhbnVwUHJvY2Vzc29yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5DU1NDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdENsZWFudXBQcm9jZXNzb3JDU1MgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQlwcml2YXRlIENsZWFudXBQcm9jZXNzb3JDU1MgZkNsZWFudXBQcm9jZXNzb3I7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZk9sZENsZWFyQmxhbmtMaW5lc1ByZWY7Ci0JcHJpdmF0ZSBpbnQgZk9sZE1heExpbmVXaWR0aFByZWY7Ci0JcHJpdmF0ZSBTdHJpbmcgZk9sZEluZGVudGF0aW9uQ2hhclByZWY7Ci0JcHJpdmF0ZSBpbnQgZk9sZEluZGVudGF0aW9uU2l6ZVByZWY7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBzZXQgdXAgcHJlZmVyZW5jZXMKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZiA9IHByZWZzLmdldEJvb2xlYW4oQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlmT2xkTWF4TGluZVdpZHRoUHJlZiA9IHByZWZzLmdldEludChDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgpOwotCQlmT2xkSW5kZW50YXRpb25DaGFyUHJlZiA9IHByZWZzLmdldFN0cmluZyhDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIpOwotCQlmT2xkSW5kZW50YXRpb25TaXplUHJlZiA9IHByZWZzLmdldEludChDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUpOwotCi0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTLCBmYWxzZSk7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCwgNzIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuVEFCKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFLCAxKTsKLQotCQlmQ2xlYW51cFByb2Nlc3NvciA9IG5ldyBDbGVhbnVwUHJvY2Vzc29yQ1NTKCk7Ci0JCWZTdHJpbmdDb21wYXJlVXRpbCA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3RvcmUgb2xkIHByZWZlcmVuY2VzCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMsIGZPbGRDbGVhckJsYW5rTGluZXNQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRILCBmT2xkTWF4TGluZVdpZHRoUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgZk9sZEluZGVudGF0aW9uQ2hhclByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUsIGZPbGRJbmRlbnRhdGlvblNpemVQcmVmKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBjbGVhbnVwQW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIGJlZm9yZU1vZGVsID0gbnVsbCwgYWZ0ZXJNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQliZWZvcmVNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChiZWZvcmVQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBiZWZvcmVQYXRoLCBiZWZvcmVNb2RlbCk7Ci0KLQkJCWFmdGVyTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYWZ0ZXJQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBhZnRlclBhdGgsIGFmdGVyTW9kZWwpOwotCi0JCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoYmVmb3JlTW9kZWwpOwotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gY2xlYW5lZHVwQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQliZWZvcmVNb2RlbC5zYXZlKGNsZWFuZWR1cEJ5dGVzKTsgLy8gImJlZm9yZU1vZGVsIiBzaG91bGQgbm93IGJlCi0JCQkvLyBhZnRlciB0aGUgY2xlYW51cCBwcm9jZXNzb3IKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBjbGVhbmVkdXBDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoY2xlYW5lZHVwQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJYXNzZXJ0VHJ1ZSgiQ2xlYW51cCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIiwgZlN0cmluZ0NvbXBhcmVVdGlsLmVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoY2xlYW5lZHVwQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChiZWZvcmVNb2RlbCAhPSBudWxsKQotCQkJCWJlZm9yZU1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGFmdGVyTW9kZWwgIT0gbnVsbCkKLQkJCQlhZnRlck1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJVRzE2NjkwOXVybENhc2VDbGVhbnVwKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIGNsZWFudXAgcHJlZmVyZW5jZXMgZm9yIHRoaXMgdGVzdAotCQlDU1NDbGVhbnVwU3RyYXRlZ3kgY3VycmVudFN0cmF0ZWd5ID0gQ1NTQ2xlYW51cFN0cmF0ZWd5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlzaG9ydCBvbGRDYXNlSWRlbnRpZmllciA9IGN1cnJlbnRTdHJhdGVneS5nZXRJZGVudENhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5TmFtZSA9IGN1cnJlbnRTdHJhdGVneS5nZXRQcm9wTmFtZUNhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5VmFsdWUgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0UHJvcFZhbHVlQ2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlU2VsZWN0b3IgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0U2VsZWN0b3JUYWdDYXNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0U291cmNlID0gY3VycmVudFN0cmF0ZWd5LmlzRm9ybWF0U291cmNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0UXVvdGUgPSBjdXJyZW50U3RyYXRlZ3kuaXNRdW90ZVZhbHVlcygpOwotCi0JCWN1cnJlbnRTdHJhdGVneS5zZXRJZGVudENhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcFZhbHVlQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRRdW90ZVZhbHVlcyhmYWxzZSk7Ci0KLQkJY2xlYW51cEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UtY2xlYW5lZC5jc3MiKTsKLQotCQljdXJyZW50U3RyYXRlZ3kuc2V0SWRlbnRDYXNlKG9sZENhc2VJZGVudGlmaWVyKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShvbGRDYXNlUHJvcGVydHlOYW1lKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BWYWx1ZUNhc2Uob2xkQ2FzZVByb3BlcnR5VmFsdWUpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKG9sZENhc2VTZWxlY3Rvcik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2Uob2xkRm9ybWF0U291cmNlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKG9sZEZvcm1hdFF1b3RlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzIxODk5M05vRm9ybWF0Q2xlYW51cCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHNldCB1cCBjbGVhbnVwIHByZWZlcmVuY2VzIGZvciB0aGlzIHRlc3QKLQkJQ1NTQ2xlYW51cFN0cmF0ZWd5IGN1cnJlbnRTdHJhdGVneSA9IENTU0NsZWFudXBTdHJhdGVneUltcGwuZ2V0SW5zdGFuY2UoKTsKLQkJc2hvcnQgb2xkQ2FzZUlkZW50aWZpZXIgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0SWRlbnRDYXNlKCk7Ci0JCXNob3J0IG9sZENhc2VQcm9wZXJ0eU5hbWUgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0UHJvcE5hbWVDYXNlKCk7Ci0JCXNob3J0IG9sZENhc2VQcm9wZXJ0eVZhbHVlID0gY3VycmVudFN0cmF0ZWd5LmdldFByb3BWYWx1ZUNhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVNlbGVjdG9yID0gY3VycmVudFN0cmF0ZWd5LmdldFNlbGVjdG9yVGFnQ2FzZSgpOwotCQlib29sZWFuIG9sZEZvcm1hdFNvdXJjZSA9IGN1cnJlbnRTdHJhdGVneS5pc0Zvcm1hdFNvdXJjZSgpOwotCQlib29sZWFuIG9sZEZvcm1hdFF1b3RlID0gY3VycmVudFN0cmF0ZWd5LmlzUXVvdGVWYWx1ZXMoKTsKLQotCQljdXJyZW50U3RyYXRlZ3kuc2V0SWRlbnRDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRQcm9wTmFtZUNhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BWYWx1ZUNhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFNlbGVjdG9yVGFnQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKGZhbHNlKTsKLQotCQljbGVhbnVwQW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LWNsZWFuZWQuY3NzIik7Ci0KLQkJY3VycmVudFN0cmF0ZWd5LnNldElkZW50Q2FzZShvbGRDYXNlSWRlbnRpZmllcik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRQcm9wTmFtZUNhc2Uob2xkQ2FzZVByb3BlcnR5TmFtZSk7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRQcm9wVmFsdWVDYXNlKG9sZENhc2VQcm9wZXJ0eVZhbHVlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFNlbGVjdG9yVGFnQ2FzZShvbGRDYXNlU2VsZWN0b3IpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0Rm9ybWF0U291cmNlKG9sZEZvcm1hdFNvdXJjZSk7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRRdW90ZVZhbHVlcyhvbGRGb3JtYXRRdW90ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNDhhMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5DU1NDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5mb3JtYXQuRm9ybWF0UHJvY2Vzc29yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5DU1NDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdEZvcm1hdFByb2Nlc3NvckNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGXzggPSAiVVRGLTgiOwotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgRm9ybWF0UHJvY2Vzc29yQ1NTIGZvcm1hdFByb2Nlc3NvcjsKLQotCXByaXZhdGUgYm9vbGVhbiBmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZjsKLQlwcml2YXRlIGludCBmT2xkTWF4TGluZVdpZHRoUHJlZjsKLQlwcml2YXRlIFN0cmluZyBmT2xkSW5kZW50YXRpb25DaGFyUHJlZjsKLQlwcml2YXRlIGludCBmT2xkSW5kZW50YXRpb25TaXplUHJlZjsKLQotCXB1YmxpYyBUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHNldCB1cCBwcmVmZXJlbmNlcwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCWZPbGRDbGVhckJsYW5rTGluZXNQcmVmID0gcHJlZnMuZ2V0Qm9vbGVhbihDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCWZPbGRNYXhMaW5lV2lkdGhQcmVmID0gcHJlZnMuZ2V0SW50KENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JCWZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmID0gcHJlZnMuZ2V0U3RyaW5nKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUik7Ci0JCWZPbGRJbmRlbnRhdGlvblNpemVQcmVmID0gcHJlZnMuZ2V0SW50KENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0KLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMsIGZhbHNlKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRILCA3Mik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5UQUIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUsIDEpOwotCi0JCWZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JDU1MoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gcmVzdG9yZSBvbGQgcHJlZmVyZW5jZXMKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUywgZk9sZENsZWFyQmxhbmtMaW5lc1ByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgsIGZPbGRNYXhMaW5lV2lkdGhQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBmT2xkSW5kZW50YXRpb25DaGFyUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSwgZk9sZEluZGVudGF0aW9uU2l6ZVByZWYpOwotCX0KLQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdEZvcm1hdFByb2Nlc3NvckNTUykKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KGZpbmFsIFN0cmluZyBmaWxlbmFtZSkgewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQkJdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiQ2FuJ3QgZmlsZSByZXNvdXJjZSBzdHJlYW0gIiArIGZpbGVuYW1lKTsKLQkJCWZpbmFsIFN0cmluZyBiYXNlRmlsZSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2UoZmlsZW5hbWUpLnRvU3RyaW5nKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoYmFzZUZpbGUsIGluU3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIGJlZm9yZU1vZGVsID0gbnVsbCwgYWZ0ZXJNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQliZWZvcmVNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChiZWZvcmVQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBiZWZvcmVQYXRoLCBiZWZvcmVNb2RlbCk7Ci0KLQkJCWFmdGVyTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYWZ0ZXJQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBhZnRlclBhdGgsIGFmdGVyTW9kZWwpOwotCi0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoYmVmb3JlTW9kZWwpOwotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gZm9ybWF0dGVkQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQliZWZvcmVNb2RlbC5zYXZlKGZvcm1hdHRlZEJ5dGVzKTsgLy8gImJlZm9yZU1vZGVsIiBzaG91bGQgbm93IGJlCi0JCQkvLyBhZnRlciB0aGUgZm9ybWF0dGVyCi0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBhZnRlckJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYWZ0ZXJNb2RlbC5zYXZlKGFmdGVyQnl0ZXMpOwotCi0JCQlTdHJpbmcgZm9ybWF0dGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGFmdGVyQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGZvcm1hdHRlZEJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCWFzc2VydFRydWUoIkZvcm1hdHRlZCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIiwgZlN0cmluZ0NvbXBhcmVVdGlsLmVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoZm9ybWF0dGVkQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChiZWZvcmVNb2RlbCAhPSBudWxsKQotCQkJCWJlZm9yZU1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGFmdGVyTW9kZWwgIT0gbnVsbCkKLQkJCQlhZnRlck1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJVRzczOTkwU2VsZWN0b3JGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MiLCAidGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MiKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBjYXNlIHdoZW4gZm9ybWF0IHdvdWxkIGluY29ycmVjdGx5IGFkZCBleHRyYSBzZW1pY29sb25zLgotCSAqIAotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMTExNTY5ZXh0cmFTZW1pY29sb25Gb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzIiwgInRlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24tZm9ybWF0dGVkLmNzcyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGNhc2Ugd2hlbiBmb3JtYXQgd291bGQgaW5jb3JyZWN0bHkgYWRkIHNwYWNlIGJldHdlZW4gc2VsZWN0b3IgYW5kCi0JICogYXR0cmlidXRlIHNlbGVjdG9ycyA8Y29kZT5pbnB1dFt0eXBlPSJoaWRkZW4iXTwvY29kZT4gd291bGQgYmUKLQkgKiB3cm9uZ2x5IGZvcm1hdHRlZCBhczxjb2RlPmlucHV0IFt0eXBlPSJoaWRkZW4iXTwvY29kZT4gaW5zdGVhZCBvZgotCSAqIGJlaW5nIGxlZnQgYWxvbmUuCi0JICogCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCVUcxNDYxOThhdHRyaWJ1dGVTcGVjaWZpZXJGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMTQ2MTk4LWF0dHJpYnV0ZXNwZWNpZmllci1mb3JtYXR0ZWQuY3NzIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCVUcxMTA1MzltdWx0aXBsZUNsYXNzRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMTEwNTM5LW11bHRpcGxlY2xhc3MuY3NzIiwgInRlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCVUcyNDg0NjVjb21iaW5lZFBzZXVkb0NsYXNzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJVRzE5NjQ3NnNlbGVjdG9yUHNldWRvY2xhc3Nlc0Zvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy5jc3MiLCAidGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzIik7Ci0JfQotCQotCS8qKgotCSAqIGZpbGUgc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgZm9ybWF0Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJVRzE2MzMxNVNsYXNoQmVmb3JlUHJpbWF0aXZlMSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzEuY3NzIiwgInRlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8xLmNzcyIpOwotCX0KLQkKLQkvKioKLQkgKiBzcGFjZSBhZnRlciAvIHNob3VsZCBiZSByZW1vdmVkCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJVRzE2MzMxNVNsYXNoQmVmb3JlUHJpbWF0aXZlMigpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzIuY3NzIiwgInRlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8xLmNzcyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgY2FzZSB3aXRoIHR3byBjb21tZW50cyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gTWFrZSBzdXJlIHRoYXQgdGhlIGNvbW1lbnRzIGRvIG5vdCBydW4gdG9nZXRoZXIgb250byBvbmUgbGluZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29sbGFwc2VXaGl0ZXNwYWNlQmV0d2VlbkNvbW1lbnRzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvY29tbWVudHMuY3NzIiwgInRlc3RmaWxlcy9jb21tZW50cy1mbXQuY3NzIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl9mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl9mb3JtYXR0ZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjBjYTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qIENsYXNzIGFzIHNlbGVjdG9yICovDQotSDEucGFzdG9yYWwgew0KLQljb2xvcjogIzAwRkYwMA0KLX0NCi0NCi0vKiBJRCBhcyBzZWxlY3RvciAqLw0KLSN6OTh5IHsNCi0JbGV0dGVyLXNwYWNpbmc6IDAuM2VtDQotfQ0KLQ0KLUgxI3o5OHkgew0KLQlsZXR0ZXItc3BhY2luZzogMC41ZW0NCi19DQotDQotLyogQ29udGV4dHVhbCBzZWxlY3RvcnMgKi8NCi1ESVYgUCB7DQotCWZvbnQ6IHNtYWxsIHNhbnMtc2VyaWYNCi19DQotDQotLnJlZGRpc2ggSDEgew0KLQljb2xvcjogcmVkDQotfQ0KLQ0KLSN4Nzh5IENPREUgew0KLQliYWNrZ3JvdW5kOiBibHVlDQotfQ0KLQ0KLURJVi5zaWRlbm90ZSBIMSB7DQotCWZvbnQtc2l6ZTogbGFyZ2UNCi19DQotDQotLyogQW5jaG9yIHBzZXVkby1jbGFzc2VzICovDQotQTpsaW5rIHsNCi0JY29sb3I6IHJlZA0KLX0gLyogdW52aXNpdGVkIGxpbmsgKi8NCi1BOnZpc2l0ZWQgew0KLQljb2xvcjogYmx1ZQ0KLX0gLyogdmlzaXRlZCBsaW5rcyAqLw0KLUE6YWN0aXZlIHsNCi0JY29sb3I6IGxpbWUNCi19IC8qIGFjdGl2ZSBsaW5rcyAqLw0KLQ0KLS8qIFBzZXVkby1jbGFzcyBjb21iaW5lZCB3aXRoIG5vcm1hbCBjbGFzcyAqLw0KLUEuZXh0ZXJuYWw6dmlzaXRlZCB7DQotCWNvbG9yOiBibHVlDQotfQ0KLQ0KLS8qICdmaXJzdC1saW5lJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGluZSB7DQotCWZvbnQtdmFyaWFudDogc21hbGwtY2Fwcw0KLX0NCi0NCi0vKiAnZmlyc3QtbGV0dGVyJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGV0dGVyIHsNCi0JZm9udC1zaXplOiAyMDAlOw0KLQlmbG9hdDogbGVmdA0KLX0NCi0NCi0vKiBQc2V1ZG8tZWxlbWVudHMgaW4gc2VsZWN0b3JzICovDQotQk9EWSBQOmZpcnN0LWxldHRlciB7DQotCWNvbG9yOiBwdXJwbGUNCi19DQotDQotUC5pbml0aWFsOmZpcnN0LWxldHRlciB7DQotCWNvbG9yOiByZWQNCi19DQotDQotLyogTXVsdGlwbGUgcHNldWRvLWVsZW1lbnRzICovDQotUCB7DQotCWNvbG9yOiByZWQ7DQotCWZvbnQtc2l6ZTogMTJwdA0KLX0NCi0NCi1QOmZpcnN0LWxldHRlciB7DQotCWNvbG9yOiBncmVlbjsNCi0JZm9udC1zaXplOiAyMDAlDQotfQ0KLQ0KLVA6Zmlyc3QtbGluZSB7DQotCWNvbG9yOiBibHVlDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfdW5mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTJjOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKiBDbGFzcyBhcyBzZWxlY3RvciAqLw0KLUgxLnBhc3RvcmFsIHsgY29sb3I6ICMwMEZGMDAgfQ0KLQ0KLS8qIElEIGFzIHNlbGVjdG9yICovDQotI3o5OHkgeyBsZXR0ZXItc3BhY2luZzogMC4zZW0gfQ0KLUgxI3o5OHkgeyBsZXR0ZXItc3BhY2luZzogMC41ZW0gfQ0KLQ0KLS8qIENvbnRleHR1YWwgc2VsZWN0b3JzICovDQotRElWIFAgICAgICAgICAgIHsgZm9udDogc21hbGwgc2Fucy1zZXJpZiB9DQotLnJlZGRpc2ggSDEgICAgIHsgY29sb3I6IHJlZCB9DQotI3g3OHkgQ09ERSAgICAgIHsgYmFja2dyb3VuZDogYmx1ZSB9DQotRElWLnNpZGVub3RlIEgxIHsgZm9udC1zaXplOiBsYXJnZSB9DQotDQotLyogQW5jaG9yIHBzZXVkby1jbGFzc2VzICovDQotQTpsaW5rIHsgY29sb3I6IHJlZCB9ICAgICAgIC8qIHVudmlzaXRlZCBsaW5rICovDQotQTp2aXNpdGVkIHsgY29sb3I6IGJsdWUgfSAgIC8qIHZpc2l0ZWQgbGlua3MgKi8NCi1BOmFjdGl2ZSB7IGNvbG9yOiBsaW1lIH0gICAgLyogYWN0aXZlIGxpbmtzICovDQotDQotLyogUHNldWRvLWNsYXNzIGNvbWJpbmVkIHdpdGggbm9ybWFsIGNsYXNzICovIA0KLUEuZXh0ZXJuYWw6dmlzaXRlZCB7IGNvbG9yOiBibHVlIH0NCi0NCi0vKiAnZmlyc3QtbGluZScgcHNldWRvLWVsZW1lbnQgKi8NCi1QOmZpcnN0LWxpbmUgeyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHMgfQ0KLQ0KLS8qICdmaXJzdC1sZXR0ZXInIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1sZXR0ZXIgeyBmb250LXNpemU6IDIwMCU7IGZsb2F0OiBsZWZ0IH0NCi0NCi0vKiBQc2V1ZG8tZWxlbWVudHMgaW4gc2VsZWN0b3JzICovDQotQk9EWSBQOmZpcnN0LWxldHRlciB7IGNvbG9yOiBwdXJwbGUgfQ0KLVAuaW5pdGlhbDpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogcmVkIH0NCi0NCi0vKiBNdWx0aXBsZSBwc2V1ZG8tZWxlbWVudHMgKi8NCi1QIHsgY29sb3I6IHJlZDsgZm9udC1zaXplOiAxMnB0IH0NCi1QOmZpcnN0LWxldHRlciB7IGNvbG9yOiBncmVlbjsgZm9udC1zaXplOiAyMDAlIH0NCi1QOmZpcnN0LWxpbmUgeyBjb2xvcjogYmx1ZSB9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzdlN2I1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTEwNTM5LW11bHRpcGxlY2xhc3MtZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qIDIgc2VwYXJhdGUgY2xhc3NlcyAtIHllcyBzcGFjZSAqLw0KLS5jbGFzc09uZSAuY2xhc3NUd28gew0KLQljb2xvcjogcmVkOw0KLX0NCi0NCi0vKiBtdWx0aXBsZSBjbGFzc2VzIC0gbm8gc3BhY2UgKi8NCi0uY2xhc3NPbmUuY2xhc3NUd28gew0KLQljb2xvcjogbGltZTsNCi19DQotDQotLyogaWQgYW5kIGNsYXNzIC0geWVzIHNwYWNlICovDQotI215aWQgLm15Y2xhc3Mgew0KLQlib3JkZXItdG9wOiAwcHg7DQotfQ0KLQ0KLS8qIGlkIHdpdGggY2xhc3MgLSBubyBzcGFjZSAqLw0KLSNteWlkLm15Y2xhc3Mgew0KLQlib3JkZXItdG9wOiAwcHg7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTEwNTM5LW11bHRpcGxlY2xhc3MuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNTA3M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKiAyIHNlcGFyYXRlIGNsYXNzZXMgLSB5ZXMgc3BhY2UgKi8NCi0uY2xhc3NPbmUgLmNsYXNzVHdvIHsNCi1jb2xvcjogcmVkOw0KLX0NCi0NCi0vKiBtdWx0aXBsZSBjbGFzc2VzIC0gbm8gc3BhY2UgKi8NCi0uY2xhc3NPbmUuY2xhc3NUd28gew0KLWNvbG9yOiBsaW1lOw0KLX0NCi0NCi0vKiBpZCBhbmQgY2xhc3MgLSB5ZXMgc3BhY2UgKi8NCi0jbXlpZCAubXljbGFzcyB7DQotYm9yZGVyLXRvcDogMHB4Ow0KLX0NCi0NCi0vKiBpZCB3aXRoIGNsYXNzIC0gbm8gc3BhY2UgKi8NCi0jbXlpZC5teWNsYXNzIHsNCi1ib3JkZXItdG9wOiAwcHg7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLWZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi1mb3JtYXR0ZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZlNmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLWZvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLS5zaXRlbWFwbGV2MSB7DQotCWZvbnQtZmFtaWx5OiBWZXJkYW5hOw0KLQlmb250LXNpemU6IDEycHg7DQotCWxpbmUtaGVpZ2h0OiAxN3B4Ow0KLQljb2xvcjogIzY2NjY2NjsNCi0JZm9udC13ZWlnaHQ6IGJvbGQ7DQotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUzMDdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLnNpdGVtYXBsZXYxe2ZvbnQtZmFtaWx5OlZlcmRhbmE7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTdweDsNCi1jb2xvcjojNjY2NjY2O2ZvbnQtd2VpZ2h0OmJvbGQ7DQotdGV4dC1kZWNvcmF0aW9uOm5vbmU7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTQ2MTk4LWF0dHJpYnV0ZXNwZWNpZmllci1mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YWQxY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWlucHV0W3R5cGU9ImhpZGRlbiJdIHsNCi0Jd2lkdGg6IDk4JTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTQ2MTk4LWF0dHJpYnV0ZXNwZWNpZmllci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYzFkYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotaW5wdXRbdHlwZT0iaGlkZGVuIl0gew0KLXdpZHRoOiA5OCU7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTYzMzE1LXNsYXNoX2JlZm9yZV9wcmltYXRpdmVfMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2MzMxNS1zbGFzaF9iZWZvcmVfcHJpbWF0aXZlXzEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGQ4MzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTYzMzE1LXNsYXNoX2JlZm9yZV9wcmltYXRpdmVfMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBDSEFSU0VUICJJU08tODg1OS0xIjsNCi0NCi0udGVzdCB7DQotCWZvbnQ6IDExcHgvMThweCBWZXJkYW5hLCBBcmlhbDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8yLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTYzMzE1LXNsYXNoX2JlZm9yZV9wcmltYXRpdmVfMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTNjNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjMzMTUtc2xhc2hfYmVmb3JlX3ByaW1hdGl2ZV8yLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQENIQVJTRVQgIklTTy04ODU5LTEiOw0KLQ0KLS50ZXN0IHsNCi0JZm9udDogMTFweC8gMThweCBWZXJkYW5hLCBBcmlhbDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UtY2xlYW5lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZGVhNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI2RlbW8gew0KLQliYWNrZ3JvdW5kOiB1cmwobWl4ZWRDYXNlL3Byb2plY3RMb2dvLmdpZik7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZDBhYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNkZW1vIHsNCi0JYmFja2dyb3VuZDogVVJMKG1peGVkQ2FzZS9wcm9qZWN0TG9nby5naWYpOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMtZm10LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc0NWY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2Jsb2NrOmFmdGVyIHsKLQljb250ZW50OiAiLiI7Ci19Ci0KLWRpdi5jb250ZW50ICNibG9jazphZnRlciB7Ci0JY29udGVudDogIi4iOwotfQotCi0jYmxvY2s6OmFmdGVyIHsKLQljb250ZW50OiAiLiI7Ci19Ci0KLWRpdiBzcGFuLmZpeC5jbGVhciB7Ci0JY2xlYXI6IGJvdGg7Ci19Ci0KLWRpdiBzcGFuLmZpeC5jbGVhcjphZnRlciB7Ci0JY29udGVudDogYm90aDsKLX0KLQotZGl2OmFmdGVyIHsKLQljb250ZW50OiAiLiI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODNkZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2Jsb2NrOmFmdGVyIHsgY29udGVudDogIi4iOyB9Ci1kaXYuY29udGVudCAjYmxvY2s6YWZ0ZXIgeyBjb250ZW50OiAiLiI7IH0KLSNibG9jazo6YWZ0ZXIge2NvbnRlbnQ6ICIuIjsgfQotZGl2IHNwYW4uZml4LmNsZWFyIHsgY2xlYXI6IGJvdGg7IH0KLWRpdiBzcGFuLmZpeC5jbGVhcjphZnRlciB7IGNvbnRlbnQ6IGJvdGg7IH0KLWRpdjphZnRlciB7IGNvbnRlbnQ6ICIuIjsgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LWNsZWFuZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQtY2xlYW5lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZmM3YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQtY2xlYW5lZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktMSI7Ci0KLS8qIFNvbWUga2luZCBvZiBjb21tZW50IGJlaW5nIGxlZnQgdG8gdGhlCi0JCi0JIAkJCXVzZXIgKi8KLQkgCQkJCi0JIAkJCQotaCB7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLQl6LWluZGV4OiAJCQkJMjsKLX0KLQotCi0jQ09OVEVYVCB7CQkJCQkKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCWJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwotCQkKLQkJCi0JCX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3NjgwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzIxODk5My1ub2Zvcm1hdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1AQ0hBUlNFVCAiSVNPLTg4NTktMSI7Ci0KLS8qIFNvbWUga2luZCBvZiBjb21tZW50IGJlaW5nIGxlZnQgdG8gdGhlCi0JCi0JIAkJCXVzZXIgKi8KLQkgCQkJCi0JIAkJCQotaCB7Ci0JVEVYVC1BTElHTjogTEVGVDsKLQl6LWluZGV4OiAJCQkJMjsKLX0KLQotCi0jQ09OVEVYVCB7CQkJCQkKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCWJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwotCQkKLQkJCi0JCX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzZlNmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWE6Zm9jdXM6aG92ZXIsZGl2OmZvY3VzOmhvdmVyIHsNCi0JYmFja2dyb3VuZDogd2hpdGU7DQotfQ0KLQ0KLWRpdiBhOmZvY3VzOmhvdmVyIHsNCi0JYmFja2dyb3VuZDogYmx1ZTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDFlMDk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYTpmb2N1czpob3ZlcixkaXY6Zm9jdXM6aG92ZXIgew0KLWJhY2tncm91bmQ6IHdoaXRlOw0KLX0NCi0NCi1kaXYgYTpmb2N1czpob3ZlciB7DQotYmFja2dyb3VuZDogYmx1ZTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9jb21tZW50cy1mbXQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9jb21tZW50cy1mbXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2JkYzIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvY29tbWVudHMtZm10LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKglGb28NCi0qCUJhcg0KLSoNCi0qKioqKioqKioqLw0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqDQotDQotCUFkZGl0aW9uYWwNCi0NCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvY29tbWVudHMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9jb21tZW50cy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1N2FkZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9jb21tZW50cy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKg0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSoJRm9vDQotKglCYXINCi0qDQotKioqKioqKioqKi8NCi0NCi0NCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKg0KLQ0KLQlBZGRpdGlvbmFsDQotDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9BYnN0cmFjdE1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQWJzdHJhY3RNb2RlbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzMzM0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9BYnN0cmFjdE1vZGVsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ291bnRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuUkdCQ29sb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLlJlY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdE1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgSUNTU01vZGVsIGZNb2RlbCA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX0lERU5USUZJRVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfUFJPUEVSVFlfTkFNRSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9QUk9QRVJUWV9WQUxVRSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0KLQkJZk1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoZk1vZGVsICE9IG51bGwpIHsKLQkJCWZNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWZNb2RlbCA9IG51bGw7Ci0JCX0KLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNTU01vZGVsIGdldE1vZGVsKCkgewotCQlyZXR1cm4gZk1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBJQ1NTU3R5bGVTaGVldCBnZXRTdHlsZVNoZWV0KCkgewotCQlyZXR1cm4gKElDU1NTdHlsZVNoZWV0KSBmTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQl9Ci0KLQljbGFzcyBQcmltaXRpdmVOdW1iZXIgewotCQlzaG9ydCB0eXBlOwotCQlmbG9hdCB2YWx1ZTsKLQotCQlQcmltaXRpdmVOdW1iZXIoc2hvcnQgbmV3VHlwZSwgZmxvYXQgbmV3VmFsdWUpIHsKLQkJCXR5cGUgPSBuZXdUeXBlOwotCQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJfQotCX0KLQotCWNsYXNzIFByaW1pdGl2ZVN0cmluZyB7Ci0JCXNob3J0IHR5cGU7Ci0JCVN0cmluZyB2YWx1ZTsKLQotCQlQcmltaXRpdmVTdHJpbmcoc2hvcnQgbmV3VHlwZSwgU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCQl0eXBlID0gbmV3VHlwZTsKLQkJCXZhbHVlID0gbmV3VmFsdWU7Ci0JCX0KLQl9Ci0KLQkvKiBmb3IgaW50LCBmbG9hdCAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlTnVtYmVyKENTU1ZhbHVlIGFjdHVhbCwgUHJpbWl0aXZlTnVtYmVyIGV4cGVjdGVkKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudHlwZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudmFsdWUsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0RmxvYXRWYWx1ZShleHBlY3RlZC50eXBlKSwgMCk7Ci0JfQotCi0JLyogZm9yIHN0cmluZyAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlU3RyaW5nKENTU1ZhbHVlIGFjdHVhbCwgUHJpbWl0aXZlU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudHlwZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudmFsdWUsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyogZm9yIGNvdW50ZXIgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1ByaW1pdGl2ZUNvdW50ZXIoQ1NTVmFsdWUgYWN0dWFsLCBTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIGxpc3RTdHlsZSwgU3RyaW5nIHNlcGFyYXRvcikgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT1VOVEVSLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCUNvdW50ZXIgY291bnRlciA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0Q291bnRlclZhbHVlKCk7Ci0JCWFzc2VydEVxdWFscyhpZGVudGlmaWVyLCBjb3VudGVyLmdldElkZW50aWZpZXIoKSk7Ci0JCWFzc2VydEVxdWFscyhsaXN0U3R5bGUsIGNvdW50ZXIuZ2V0TGlzdFN0eWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoc2VwYXJhdG9yLCBjb3VudGVyLmdldFNlcGFyYXRvcigpKTsKLQl9Ci0KLQkvKiBmb3IgcmVjdCAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlUmVjdChDU1NWYWx1ZSBhY3R1YWwsIE9iamVjdFtdIGV4cGVjdGVkQXJyYXkpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkVDVCwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlSZWN0IHJlY3QgPSAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFJlY3RWYWx1ZSgpOwotCQlDU1NQcmltaXRpdmVWYWx1ZSB2YWx1ZTsKLQkJT2JqZWN0IGV4cGVjdGVkOwotCQl2YWx1ZSA9IHJlY3QuZ2V0VG9wKCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVswXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCQl2YWx1ZSA9IHJlY3QuZ2V0UmlnaHQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzFdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRCb3R0b20oKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzJdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRMZWZ0KCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVszXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCX0KLQotCS8qIGZvciByZ2IgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1ByaW1pdGl2ZVJnYihDU1NWYWx1ZSBhY3R1YWwsIE9iamVjdFtdIGV4cGVjdGVkQXJyYXkpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkdCQ09MT1IsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJUkdCQ29sb3IgY29sb3IgPSAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFJHQkNvbG9yVmFsdWUoKTsKLQkJQ1NTUHJpbWl0aXZlVmFsdWUgdmFsdWU7Ci0JCU9iamVjdCBleHBlY3RlZDsKLQkJdmFsdWUgPSBjb2xvci5nZXRSZWQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzBdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gY29sb3IuZ2V0R3JlZW4oKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzFdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gY29sb3IuZ2V0Qmx1ZSgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMl07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0NoYXJzZXRSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTQ2hhcnNldFJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYjRhYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTQ2hhcnNldFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU0NoYXJzZXRSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLQotcHVibGljIGNsYXNzIENTU0NoYXJzZXRSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBSVUxFID0gIkBjaGFyc2V0IFwiaXNvLTg4NTktMVwiOyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZSgpIHsKLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFLCAwKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NDaGFyc2V0UnVsZSk7Ci0JCUNTU0NoYXJzZXRSdWxlIGNoYXJzZXRSdWxlID0gKENTU0NoYXJzZXRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoImlzby04ODU5LTEiLCBjaGFyc2V0UnVsZS5nZXRFbmNvZGluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEUsIGNoYXJzZXRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVJ1bGUoKSB7Ci0JCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCQlJQ1NTRG9jdW1lbnQgZG9jID0gc2hlZXQ7Ci0JCUNTU0NoYXJzZXRSdWxlIG5ld1J1bGUgPSBkb2MuY3JlYXRlQ1NTQ2hhcnNldFJ1bGUoKTsKLQkJbmV3UnVsZS5zZXRFbmNvZGluZygiaXNvLTg4NTktMSIpOwotCQlzaGVldC5pbnNlcnRSdWxlQmVmb3JlKG5ld1J1bGUsIG51bGwpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTQ2hhcnNldFJ1bGUpOwotCQlDU1NDaGFyc2V0UnVsZSBjaGFyc2V0UnVsZSA9IChDU1NDaGFyc2V0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKCJpc28tODg1OS0xIiwgY2hhcnNldFJ1bGUuZ2V0RW5jb2RpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFLCBjaGFyc2V0UnVsZS5nZXRDc3NUZXh0KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYWNlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYWNlUnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiZjc3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NGb250RmFjZVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTRm9udEZhY2VSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NGb250RmFjZVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlmaW5hbCBTdHJpbmcgUlVMRSA9ICJAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IFwiU3dpc3MgNzIxXCI7IHNyYzogdXJsKHN3aXNzNzIxLnBmcik7IC8qIFRoZSBleHBhbmRlZCBTd2lzcyA3MjEgKi8gZm9udC1zdHJldGNoOiBleHBhbmRlZDsgfSI7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEUsIDApKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMywgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NQcmltaXRpdmVWYWx1ZSBwcmltaXRpdmVWYWx1ZTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0KLQkJcHJpbWl0aXZlVmFsdWUgPSAoQ1NTUHJpbWl0aXZlVmFsdWUpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgcHJpbWl0aXZlVmFsdWUuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJTd2lzcyA3MjEiLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCi0JCXByaW1pdGl2ZVZhbHVlID0gKENTU1ByaW1pdGl2ZVZhbHVlKSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksIHByaW1pdGl2ZVZhbHVlLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3dpc3M3MjEucGZyIiwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXN0cmV0Y2giKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQotCQlwcmltaXRpdmVWYWx1ZSA9IChDU1NQcmltaXRpdmVWYWx1ZSkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsIHByaW1pdGl2ZVZhbHVlLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZXhwYW5kZWQiLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEluc2VydFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAxCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDQsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkcsICJTd2lzcyA3MjEiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzcmMiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgInN3aXNzNzIxYmxrLnBmciIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3R5bGUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIm5vcm1hbCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIml0YWxpYyIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDgwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA5MDApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEluc2VydFRleHQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAyCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDksIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlBhbGF0aW5vIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlRpbWVzIE5ldyBSb21hbiIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJOZXcgWW9yayIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJVdG9waWEiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDcpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg4KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAiaHR0cDovL3NvbWV3aGVyZS9mcmVlL2ZvbnQiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LWZhbWlseSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJzZXJpZiIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoOSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAyMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMzAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDUpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg2KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDQwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg3KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oOCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1MDApKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3R5bGUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC12YXJpYW50Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIm5vcm1hbCIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc2l6ZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJhbGwiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgX3Rlc3RJbnNlcnRUZXh0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NGb250RmFjZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NWYWx1ZUxpc3QgdmFsdWVMaXN0OwotCi0JCS8vIHJ1bGUgMwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NGb250RmFjZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NGb250RmFjZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscyg1LCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzcmMiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyg0LCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJBbGFiYW1hIEl0YWxpYyIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksICJodHRwOi8vd3d3LmZvbnRzLm9yZy9BL2FsYWJhbWEtaXRhbGljIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0ZPUk1BVCwgInRydWV0eXBlIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgicGFub3NlLTEiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygxMCwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA0KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDUpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNCkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg2KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNyksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA5KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDgpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMykpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg5KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDMpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJBbGFiYW1hIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAic2VyaWYiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXdlaWdodCIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDUsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNDAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDMpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg0KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUwMCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiaXRhbGljIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAib2JsaXF1ZSIpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NGb250RmFtaWx5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhbWlseVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjZTBkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NGb250RmFtaWx5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLQotCi1wdWJsaWMgY2xhc3MgQ1NTRm9udEZhbWlseVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9GQU1JTFkgPSAiZm9udC1mYW1pbHkiOwotCi0JcHVibGljIHZvaWQgdGVzdEZvbnRGYW1pbGllcygpIHRocm93cyBJT0V4Y2VwdGlvbiAgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhbWlseVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZXMgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNCwgcnVsZXMuZ2V0TGVuZ3RoKCkpOwotCi0JCS8vIFJ1bGUgMTogTm8gd2hpdGVzcGFjZQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIFJ1bGUgMTogTm8gd2hpdGVzcGFjZQotCQlydWxlID0gcnVsZXMuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZShGT05UX0ZBTUlMWSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIkNvdXJpZXIiKSk7Ci0KLQkJLy8gUnVsZSAyOiBTaW5nbGUgd2hpdGVzcGFjZQotCQlydWxlID0gcnVsZXMuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZShGT05UX0ZBTUlMWSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIkNvdXJpZXIgTmV3IikpOwotCi0JCS8vIFJ1bGUgMzogSW4gcXVvdGVzCi0JCXJ1bGUgPSBydWxlcy5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKEZPTlRfRkFNSUxZKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgIkNvdXJpZXIgTmV3IikpOwotCi0JCS8vIFJ1bGUgNDogVGFicyBhbmQgc3BhY2VzIGFsbCBvdmVyCi0JCXJ1bGUgPSBydWxlcy5pdGVtKDMpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKEZPTlRfRkFNSUxZKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiQ29taWMgU2FucyIpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NJbXBvcnRSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTSW1wb3J0UnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyZWI4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NJbXBvcnRSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NJbXBvcnRSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTSW1wb3J0UnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuTWVkaWFMaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTSW1wb3J0UnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZURvdWJsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCBcImR1bW15LmNzc1wiOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVNpbmdsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCBcJ2R1bW15LmNzc1wnOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVVybE5vUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChkdW1teS5jc3MpOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVVybERvdWJsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoXCJkdW1teS5jc3NcIik7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlVXJsU2luZ2xlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcJ2R1bW15LmNzc1wnKTsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVNZWRpYTEoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcImR1bW15LmNzc1wiKSBtZWRpYTE7IiwgImR1bW15LmNzcyIsIG5ldyBTdHJpbmdbXXsibWVkaWExIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlTWVkaWEyKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoXCdkdW1teS5jc3NcJykgbWVkaWExLCBtZWRpYTI7IiwgImR1bW15LmNzcyIsIG5ldyBTdHJpbmdbXXsibWVkaWExIiwgIm1lZGlhMiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUnVsZSgpIHsKLQkJSUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCUlDU1NEb2N1bWVudCBkb2MgPSBzaGVldDsKLQkJSUNTU0ltcG9ydFJ1bGUgbmV3UnVsZSA9IGRvYy5jcmVhdGVDU1NJbXBvcnRSdWxlKCk7Ci0JCW5ld1J1bGUuc2V0SHJlZigiZHVtbXkuY3NzIik7Ci0JCU1lZGlhTGlzdCBuZXdMaXN0ID0gbmV3UnVsZS5nZXRNZWRpYSgpOwotCQluZXdMaXN0LmFwcGVuZE1lZGl1bSgibWVkaWExIik7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTIiKTsKLQkJc2hlZXQuaW5zZXJ0UnVsZUJlZm9yZShuZXdSdWxlLCBudWxsKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ltcG9ydFJ1bGUpOwotCQlDU1NJbXBvcnRSdWxlIGltcG9ydFJ1bGUgPSAoQ1NTSW1wb3J0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKCJkdW1teS5jc3MiLCBpbXBvcnRSdWxlLmdldEhyZWYoKSk7Ci0JCU1lZGlhTGlzdCBtZWRpYUxpc3QgPSBpbXBvcnRSdWxlLmdldE1lZGlhKCk7Ci0JCWFzc2VydEVxdWFscygyLCBtZWRpYUxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMSIsIG1lZGlhTGlzdC5pdGVtKDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJtZWRpYTIiLCBtZWRpYUxpc3QuaXRlbSgxKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJAaW1wb3J0IHVybChcImR1bW15LmNzc1wiKSBtZWRpYTEsIG1lZGlhMjsiLCBpbXBvcnRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrSW5zZXJ0KFN0cmluZyBydWxlU3RyaW5nLCBTdHJpbmcgaHJlZiwgU3RyaW5nW10gbWVkaWEpIHsKLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShydWxlU3RyaW5nLCAwKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NJbXBvcnRSdWxlKTsKLQotCQlDU1NJbXBvcnRSdWxlIGltcG9ydFJ1bGUgPSAoQ1NTSW1wb3J0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKGhyZWYsIGltcG9ydFJ1bGUuZ2V0SHJlZigpKTsKLQotCQlpZiAobWVkaWEgIT0gbnVsbCkgewotCQkJYXNzZXJ0RXF1YWxzKG1lZGlhLmxlbmd0aCwgaW1wb3J0UnVsZS5nZXRNZWRpYSgpLmdldExlbmd0aCgpKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWVkaWEubGVuZ3RoOyBpKyspIHsKLQkJCQlhc3NlcnRFcXVhbHMobWVkaWFbaV0sIGltcG9ydFJ1bGUuZ2V0TWVkaWEoKS5pdGVtKGkpKTsKLQkJCX0KLQkJfQotCi0JCWFzc2VydEVxdWFscyhydWxlU3RyaW5nLCBpbXBvcnRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWVkaWFSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWVkaWFSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGYyODQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU01lZGlhUnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0RvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTWVkaWFSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTTWVkaWFSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5NZWRpYUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NNZWRpYVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVSdWxlKCkgewotCQlJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJSUNTU0RvY3VtZW50IGRvYyA9IHNoZWV0OwotCQlJQ1NTTWVkaWFSdWxlIG5ld1J1bGUgPSBkb2MuY3JlYXRlQ1NTTWVkaWFSdWxlKCk7Ci0JCU1lZGlhTGlzdCBuZXdMaXN0ID0gbmV3UnVsZS5nZXRNZWRpYSgpOwotCQluZXdMaXN0LmFwcGVuZE1lZGl1bSgibWVkaWExIik7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTIiKTsKLQkJc2hlZXQuaW5zZXJ0UnVsZUJlZm9yZShuZXdSdWxlLCBudWxsKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU01lZGlhUnVsZSk7Ci0JCUNTU01lZGlhUnVsZSBtZWRpYVJ1bGUgPSAoQ1NTTWVkaWFSdWxlKSBydWxlOwotCi0JCU1lZGlhTGlzdCBtZWRpYUxpc3QgPSBtZWRpYVJ1bGUuZ2V0TWVkaWEoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIG1lZGlhTGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWExIiwgbWVkaWFMaXN0Lml0ZW0oMCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMiIsIG1lZGlhTGlzdC5pdGVtKDEpKTsKLQotCQlhc3NlcnRFcXVhbHMoIkBtZWRpYSBtZWRpYTEsIG1lZGlhMiB7IiArIEZpbGVVdGlsLmNvbW1vbkVPTCArICJ9IiwgbWVkaWFSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWV0YU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWV0YU1vZGVsVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjU4MTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU01ldGFNb2RlbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLklWYWxJRDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLlByb3BDTVByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5tZXRhbW9kZWwuQ1NTTU1Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5tZXRhbW9kZWwuQ1NTTU1Qcm9wZXJ0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwubWV0YW1vZGVsLkNTU01ldGFNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwubWV0YW1vZGVsLkNTU1Byb2ZpbGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwubWV0YW1vZGVsLnV0aWwuQ1NTTWV0YU1vZGVsVXRpbDsKLQotcHVibGljIGNsYXNzIENTU01ldGFNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudFByb3BlcnR5VmFsdWVzMnIxKCkgewotCQlDU1NNZXRhTW9kZWwgbW9kZWwgPSBDU1NQcm9maWxlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0UHJvZmlsZSgpLmdldE1ldGFNb2RlbCgpOwotCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJQ1NTTWV0YU1vZGVsVXRpbCB1dGlsID0gbmV3IENTU01ldGFNb2RlbFV0aWwobW9kZWwpOwotCQkJQ1NTTU1Qcm9wZXJ0eSBwcm9wZXJ0eSA9IHV0aWwuZ2V0UHJvcGVydHkoUHJvcENNUHJvcGVydHkuUF9DT05URU5UKTsKLQkJCUl0ZXJhdG9yIGl0ID0gcHJvcGVydHkuZ2V0VmFsdWVzKCk7Ci0JCQlTZXQgc2V0ID0gbmV3IEhhc2hTZXQoMik7Ci0JCQlzZXQuYWRkKElWYWxJRC5WX05PUk1BTCk7Ci0JCQlzZXQuYWRkKElWYWxJRC5WX05PTkUpOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUNTU01NTm9kZSBub2RlID0gKENTU01NTm9kZSkgaXQubmV4dCgpOwotCQkJCWlmIChzZXQuY29udGFpbnMobm9kZS5nZXROYW1lKCkpKSB7Ci0JCQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgc2hvdWxkIGJlIGEga2V5d29yZCIsIENTU01NTm9kZS5UWVBFX0tFWVdPUkQsIG5vZGUuZ2V0VHlwZSgpKTsKLQkJCQkJc2V0LnJlbW92ZShub2RlLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgiVGhlIGNvbnRlbnQgcHJvcGVydHkgaXMgbWlzc2luZyB2YWx1ZXMgYWRkZWQgZm9yIENTUyAyIHJldmlzaW9uIDEuIiwgc2V0LmlzRW1wdHkoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3Vyc29yUHJvcGVydHlWYWx1ZXMycjEoKSB7Ci0JCUNTU01ldGFNb2RlbCBtb2RlbCA9IENTU1Byb2ZpbGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRQcm9maWxlKCkuZ2V0TWV0YU1vZGVsKCk7Ci0JCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQlDU1NNZXRhTW9kZWxVdGlsIHV0aWwgPSBuZXcgQ1NTTWV0YU1vZGVsVXRpbChtb2RlbCk7Ci0JCQlDU1NNTVByb3BlcnR5IHByb3BlcnR5ID0gdXRpbC5nZXRQcm9wZXJ0eShQcm9wQ01Qcm9wZXJ0eS5QX0NVUlNPUik7Ci0JCQlJdGVyYXRvciBpdCA9IHByb3BlcnR5LmdldFZhbHVlcygpOwotCQkJU2V0IHNldCA9IG5ldyBIYXNoU2V0KDEpOwotCQkJc2V0LmFkZChJVmFsSUQuVl9QUk9HUkVTUyk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJQ1NTTU1Ob2RlIG5vZGUgPSAoQ1NTTU1Ob2RlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKHNldC5jb250YWlucyhub2RlLmdldE5hbWUoKSkpIHsKLQkJCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBzaG91bGQgYmUgYSBrZXl3b3JkIiwgQ1NTTU1Ob2RlLlRZUEVfS0VZV09SRCwgbm9kZS5nZXRUeXBlKCkpOwotCQkJCQlzZXQucmVtb3ZlKG5vZGUuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJUaGUgY29udGVudCBwcm9wZXJ0eSBpcyBtaXNzaW5nIHZhbHVlcyBhZGRlZCBmb3IgQ1NTIDIgcmV2aXNpb24gMS4iLCBzZXQuaXNFbXB0eSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REaXNwbGF5UHJvcGVydHlWYWx1ZXMycjEoKSB7Ci0JCUNTU01ldGFNb2RlbCBtb2RlbCA9IENTU1Byb2ZpbGVSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldERlZmF1bHRQcm9maWxlKCkuZ2V0TWV0YU1vZGVsKCk7Ci0JCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQlDU1NNZXRhTW9kZWxVdGlsIHV0aWwgPSBuZXcgQ1NTTWV0YU1vZGVsVXRpbChtb2RlbCk7Ci0JCQlDU1NNTVByb3BlcnR5IHByb3BlcnR5ID0gdXRpbC5nZXRQcm9wZXJ0eShQcm9wQ01Qcm9wZXJ0eS5QX0RJU1BMQVkpOwotCQkJSXRlcmF0b3IgaXQgPSBwcm9wZXJ0eS5nZXRWYWx1ZXMoKTsKLQkJCVNldCBzZXQgPSBuZXcgSGFzaFNldCgxKTsKLQkJCXNldC5hZGQoSVZhbElELlZfSU5MSU5FX0JMT0NLKTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCQlDU1NNTU5vZGUgbm9kZSA9IChDU1NNTU5vZGUpIGl0Lm5leHQoKTsKLQkJCQlpZiAoc2V0LmNvbnRhaW5zKG5vZGUuZ2V0TmFtZSgpKSkgewotCQkJCQlhc3NlcnRFcXVhbHMoIlByb3BlcnR5IHNob3VsZCBiZSBhIGtleXdvcmQiLCBDU1NNTU5vZGUuVFlQRV9LRVlXT1JELCBub2RlLmdldFR5cGUoKSk7Ci0JCQkJCXNldC5yZW1vdmUobm9kZS5nZXROYW1lKCkpOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoIlRoZSBjb250ZW50IHByb3BlcnR5IGlzIG1pc3NpbmcgdmFsdWVzIGFkZGVkIGZvciBDU1MgMiByZXZpc2lvbiAxLiIsIHNldC5pc0VtcHR5KCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFdoaXRlc3BhY2VQcm9wZXJ0eVZhbHVlczJyMSgpIHsKLQkJQ1NTTWV0YU1vZGVsIG1vZGVsID0gQ1NTUHJvZmlsZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0RGVmYXVsdFByb2ZpbGUoKS5nZXRNZXRhTW9kZWwoKTsKLQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCUNTU01ldGFNb2RlbFV0aWwgdXRpbCA9IG5ldyBDU1NNZXRhTW9kZWxVdGlsKG1vZGVsKTsKLQkJCUNTU01NUHJvcGVydHkgcHJvcGVydHkgPSB1dGlsLmdldFByb3BlcnR5KFByb3BDTVByb3BlcnR5LlBfV0hJVEVfU1BBQ0UpOwotCQkJSXRlcmF0b3IgaXQgPSBwcm9wZXJ0eS5nZXRWYWx1ZXMoKTsKLQkJCVNldCBzZXQgPSBuZXcgSGFzaFNldCgxKTsKLQkJCXNldC5hZGQoSVZhbElELlZfUFJFX0xJTkUpOwotCQkJc2V0LmFkZChJVmFsSUQuVl9QUkVfV1JBUCk7Ci0JCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQkJQ1NTTU1Ob2RlIG5vZGUgPSAoQ1NTTU1Ob2RlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKHNldC5jb250YWlucyhub2RlLmdldE5hbWUoKSkpIHsKLQkJCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBzaG91bGQgYmUgYSBrZXl3b3JkIiwgQ1NTTU1Ob2RlLlRZUEVfS0VZV09SRCwgbm9kZS5nZXRUeXBlKCkpOwotCQkJCQlzZXQucmVtb3ZlKG5vZGUuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJUaGUgY29udGVudCBwcm9wZXJ0eSBpcyBtaXNzaW5nIHZhbHVlcyBhZGRlZCBmb3IgQ1NTIDIgcmV2aXNpb24gMS4iLCBzZXQuaXNFbXB0eSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb2xvclByb3BlcnR5VmFsdWVzMnIxKCkgewotCQlDU1NNZXRhTW9kZWwgbW9kZWwgPSBDU1NQcm9maWxlUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXREZWZhdWx0UHJvZmlsZSgpLmdldE1ldGFNb2RlbCgpOwotCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJQ1NTTWV0YU1vZGVsVXRpbCB1dGlsID0gbmV3IENTU01ldGFNb2RlbFV0aWwobW9kZWwpOwotCQkJQ1NTTU1Qcm9wZXJ0eSBwcm9wZXJ0eSA9IHV0aWwuZ2V0UHJvcGVydHkoUHJvcENNUHJvcGVydHkuUF9DT0xPUik7Ci0JCQlJdGVyYXRvciBpdCA9IHByb3BlcnR5LmdldFZhbHVlcygpOwotCQkJU2V0IHNldCA9IG5ldyBIYXNoU2V0KDEpOwotCQkJc2V0LmFkZChJVmFsSUQuVl9PUkFOR0UpOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUNTU01NTm9kZSBub2RlID0gKENTU01NTm9kZSkgaXQubmV4dCgpOwotCQkJCWlmIChzZXQuY29udGFpbnMobm9kZS5nZXROYW1lKCkpKSB7Ci0JCQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgc2hvdWxkIGJlIGEga2V5d29yZCIsIENTU01NTm9kZS5UWVBFX0tFWVdPUkQsIG5vZGUuZ2V0VHlwZSgpKTsKLQkJCQkJc2V0LnJlbW92ZShub2RlLmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgiVGhlIGNvbnRlbnQgcHJvcGVydHkgaXMgbWlzc2luZyB2YWx1ZXMgYWRkZWQgZm9yIENTUyAyIHJldmlzaW9uIDEuIiwgc2V0LmlzRW1wdHkoKSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NQYWdlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjliYzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQYWdlUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWVMaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTUGFnZVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0MSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAxCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic2l6ZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDIsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOLCAoZmxvYXQpIDguNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU4sIDExKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAyKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDIKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImF1dG8iKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BFUkNFTlRBR0UsIDEwKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDMKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoIjpsZWZ0IiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbi1sZWZ0Iik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgNCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLXJpZ2h0Iik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gcnVsZSA0Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMyk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCI6cmlnaHQiLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLWxlZnQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAzKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tcmlnaHQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCA0KSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDUKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSg0KTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoIm5hcnJvdyIsICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygxLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMiwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDkpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAxOCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gcnVsZSA2Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oNSk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJyb3RhdGVkIiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibGFuZHNjYXBlIikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg5NjYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NTdHlsZVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotCi1wdWJsaWMgY2xhc3MgQ1NTU3R5bGVSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dE51bWJlcnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTU3R5bGVSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyMCwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCS8vIDAxCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTlVNQkVSIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19OVU1CRVIsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDIKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJQRVJDRU5UQUdFIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QRVJDRU5UQUdFLCAxMjMuNDU2ZikpOwotCi0JCS8vIDAzCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRU1TIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19FTVMsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDQKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJFWFMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0VYUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAwNQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBYIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCwgKzEyMy40NTZmKSk7Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUFgyIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCwgLTEyM2YpKTsKLQotCi0JCQotCQkvLyAwNgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkNNIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwNwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIk1NIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19NTSwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwOAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklOIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwOQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBUIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QVCwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxMAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBDIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QQywgMTIzLjQ1NmYpKTsKLQotCQkvLyAxMQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkRFRyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfREVHLCAtMTIzLjQ1NmYpKTsKLQotCQkvLyAxMgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlJBRCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkFELCAxMjMuNDU2ZikpOwotCi0JCS8vIDEzCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiR1JBRCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfR1JBRCwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIk1TIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19NUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1MsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTYKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJIWiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSFosIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTcKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJLSFoiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0tIWiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxOAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkRJTUVOU0lPTiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRElNRU5TSU9OLCAtMTIzLjQ1NmYpKTsKLQotCQkvLyAxOQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklOVEVHRVIiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAxMjMpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dFN0cmluZ3MoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTU3R5bGVSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygxMSwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCS8vIDAxCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiU1RSSU5HIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkcsICJzdHJpbmciKSk7Ci0KLQkJLy8gMDIKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJVUkkiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgImh0dHA6Ly93d3cuaWJtLmNvbS8iKSk7Ci0KLQkJLy8gMDMKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJJREVOVCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJsZWZ0IikpOwotCi0JCS8vIDA0Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSEFTSCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0hBU0gsICIjYWJjZGVmIikpOwotCi0JCS8vIDA1Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiVVJBTkdFIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJBTkdFLCAiVSsyMEE3IikpOwotCi0JCS8vIDA2Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiU0xBU0giKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19TTEFTSCwgIi8iKSk7Ci0KLQkJLy8gMDcKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJDT01NQSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQotCQkvLyAwOAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklOSEVSSVRfUFJJTUlUSVZFIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5IRVJJVF9QUklNSVRJVkUsICJpbmhlcml0IikpOwotCi0JCS8vIDA5Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQVRUUiIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQVRUUiwgIktFWSIpKTsKLQotCQkvLyAxMAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkZPUk1BVCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0ZPUk1BVCwgInRydWVkb2MiKSk7Ci0KLQkJLy8gMTEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJMT0NBTCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiRXhjZWxzaW9yIFJvbWFuIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0RnVuY3Rpb25zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1N0eWxlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMik7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlNUWUxFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMywgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQ09VTlRFUiIpOwotCQljaGVja1ByaW1pdGl2ZUNvdW50ZXIodmFsdWUsICJwYXItbnVtIiwgInVwcGVyLXJvbWFuIiwgbnVsbCk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJSRUNUIik7Ci0JCWNoZWNrUHJpbWl0aXZlUmVjdCh2YWx1ZSwgbmV3IE9iamVjdFtde25ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAxMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1NiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA3OCl9KTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlJHQkNPTE9SIik7Ci0JCWNoZWNrUHJpbWl0aXZlUmdiKHZhbHVlLCBuZXcgT2JqZWN0W117bmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDI1NSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAxMjgpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMCl9KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NTdHlsZVNoZWV0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNjZWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotCi0KLXB1YmxpYyBjbGFzcyBDU1NTdHlsZVNoZWV0VGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMSA9ICJIMSB7IGNvbG9yIDogcmVkOyB9IjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMiA9ICJIMiB7IGNvbG9yIDogcmVkOyB9IjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMyA9ICJIMyB7IGNvbG9yIDogcmVkOyB9IjsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDMsIDApKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMSwgMCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gyLCAxKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gxLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMiwgcnVsZS5nZXRDc3NUZXh0KCkpOwotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDMsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDMsIDApKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMSwgMCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gyLCAxKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3Q7Ci0JCUNTU1J1bGUgcnVsZTsKLQotCQlzaGVldC5kZWxldGVSdWxlKDEpOwotCQlydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gxLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMywgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMSk7Ci0JCXJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQotCQlzaGVldC5kZWxldGVSdWxlKDApOwotCi0JCXRyeSB7Ci0JCQlzaGVldC5kZWxldGVSdWxlKDApOwotCQl9Ci0JCWNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0RXF1YWxzKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgZS5jb2RlKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvVGVzdENTU0RlY2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZmYzlhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5DU1NEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2VyLkNTU1NvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5DU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5kZWNsYXJhdGlvbi5DU1NQcm9wZXJ0eUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q1NTRGVjbCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvLyBjb21tZW50aW5nIG91dCB0aGlzIHRlc3QgYmVjYXVzZSBkZWNsLnNldENzc1RleHQoKSBpcyBub3QgYW4gaW1wbGVtZW50ZWQgbWV0aG9kCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RGVjbCgpIHsKLS8vCQlDU1NQcm9wZXJ0eUNvbnRleHQgY29udGV4dCA9IG5ldyBDU1NQcm9wZXJ0eUNvbnRleHQoKTsKLS8vCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gQ1NTU3R5bGVEZWNsYXJhdGlvbkZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0vLwkJY29udGV4dC5pbml0aWFsaXplKGRlY2wpOwotLy8JCWRlY2wuc2V0Q3NzVGV4dChnZXRTdHJpbmcoKSAhPSBudWxsID8gZ2V0U3RyaW5nKCkgOiAiIik7Ly8kTk9OLU5MUy0xJAotLy8JfQotLy8JcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nKCkgewotLy8JCXJldHVybiAiYm9keSB7fSI7Ci0vLwl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYWxvbmVDU1NEZWNsKCkgewotCQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNjE1Ci0JCUNTU1Byb3BlcnR5Q29udGV4dCBjb250ZXh0ID0gbmV3IENTU1Byb3BlcnR5Q29udGV4dCgpOwotCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gQ1NTU3R5bGVEZWNsYXJhdGlvbkZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0JCWNvbnRleHQuaW5pdGlhbGl6ZShkZWNsKTsKLQkJU3RyaW5nIGNzc1RleHQgPSBkZWNsLmdldENzc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdGFuZGFsb25lIGNzcyBub2RlIHdhcyBub3QgaW5pdGlhbGl6ZWQiLCAiIiwgY3NzVGV4dCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0JCWNvbnRleHQuc2V0TWFyZ2luKCJhdXRvIik7IC8vJE5PTi1OTFMtMSQKLQkJY29udGV4dC5zZXRDb2xvcigicmVkIik7IC8vJE5PTi1OTFMtMSQKLQkJY29udGV4dC5zZXRCb3JkZXIoInRoaWNrIik7IC8vJE5PTi1OTFMtMSQKLQkJY29udGV4dC5hcHBseUZ1bGwoZGVjbCk7Ci0JCWNzc1RleHQgPSBkZWNsLmdldENzc1RleHQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkID0gImNvbG9yOiByZWQ7IGJvcmRlcjogdGhpY2s7IG1hcmdpbjogYXV0byI7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKCJzdGFuZGFsb25lIGNzcyBub2RlJ3MgcHJvcGVydGllcyB3ZXJlIG5vdCBzZXQgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZCwgY3NzVGV4dCk7ICAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW0oKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0KLQkJc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LnNldCh2YWx1ZSk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW1NT0RFX0RFQ0xBUkFUSU9OKCkgewotCQlTdHJpbmcgdmFsdWUgPSAiY29sb3I6IGJsdWU7IjsKLQkJSURvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBDU1NEb2N1bWVudExvYWRlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudCA9IChJU3RydWN0dXJlZERvY3VtZW50KSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT04pOwotCi0JCXNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5zZXQodmFsdWUpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NTdHlsZURlY2xJdGVtU1RZTEVfU0hFRVQoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9TVFlMRVNIRUVUKTsKLQotCQlzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KHZhbHVlKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlhc3NlcnROb3ROdWxsKHJlZ2lvbik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTTW9kZWwoKSB7Ci0KLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoZ2V0SFRNTERvY3VtZW50VGV4dCgpKTsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQkKLQkvKioKLQkgKiBUbyB0ZXN0IGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy8yOTgxMTEKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UHJvcGVydHlJbkV4aXN0aW5nUnVsZSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCVN0cmluZyBvcmlnaW5hbERvY3VtZW50ID0gCi0JCQkJIkBDSEFSU0VUIFwiSVNPLTg4NTktMVwiO1xyXG4iICsKLQkJCQkiLnRlc3Qge1xyXG4iICsKLQkJCQkifSI7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldChvcmlnaW5hbERvY3VtZW50KTsKLQotCQkJSW5kZXhlZFJlZ2lvbiBpbmRleGVkUmVnaW9uID0gbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigyOCk7Ci0JCQlhc3NlcnRUcnVlKCJJbmRleGVkIHJlZ2lvbiBzaG91bGQgYmUgYW4gSUNTU1N0eWxlUnVsZSIsIGluZGV4ZWRSZWdpb24gaW5zdGFuY2VvZiBJQ1NTU3R5bGVSdWxlKTsKLQkJCUlDU1NTdHlsZVJ1bGUgcnVsZSA9IChJQ1NTU3R5bGVSdWxlKWluZGV4ZWRSZWdpb247Ci0JCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IChJQ1NTU3R5bGVEZWNsYXJhdGlvbilydWxlLmdldFN0eWxlKCk7Ci0JCQlkZWNsYXJhdGlvbi5zZXRQcm9wZXJ0eSgiY29sb3IiLCAiIzAwODA0MCIsIG51bGwpOwotCQkJQ1NTUHJvcGVydHlDb250ZXh0IGNvbnRleHQgPSBuZXcgQ1NTUHJvcGVydHlDb250ZXh0KGRlY2xhcmF0aW9uKTsKLQkJCWNvbnRleHQuYXBwbHlNb2RpZmllZChkZWNsYXJhdGlvbik7Ci0JCQlTdHJpbmcgbmV3RG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWROZXdEb2N1bWVudCA9IAotCQkJCSJAQ0hBUlNFVCBcIklTTy04ODU5LTFcIjtcclxuIiArCi0JCQkJIi50ZXN0IHtcclxuIiArCi0JCQkJIlx0Y29sb3I6ICMwMDgwNDBcclxuIiArCi0JCQkJIn0iOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoIlRoZSB1cGRhdGVkIENTUyBkb2N1bWVudCBkb2VzIG5vdCBlcXVhbCB0aGUgZXhwZWN0ZWQiLCBleHBlY3RlZE5ld0RvY3VtZW50LCBuZXdEb2N1bWVudCk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SFRNTERvY3VtZW50VGV4dCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIj5cclxuIiArIAotCQkJCSI8SFRNTD48SEVBRD5cclxuIiArIAotCQkJCSI8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xXCI+XHJcbiIgKyAKLQkJCQkiPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtU3R5bGUtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2Nzc1wiPlxyXG4iICsgCi0JCQkJIjxUSVRMRT48L1RJVExFPlxyXG4iICsgCi0JCQkJIjxTVFlMRSB0eXBlPVwidGV4dC9jc3NcIj5cclxuIiArIAotCQkJCSI8IS0tXHJcbiIgKyAKLQkJCQkiQk9EWXtcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGOTk7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIkgxe1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy10b3A6IDEwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXJpZ2h0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWJvdHRvbTogMTBweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctbGVmdDogMHB4O1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1zdHlsZSA6IHNvbGlkO1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1jb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIkgye1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy10b3A6IDdweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctcmlnaHQ6IDBweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctYm90dG9tOiA3cHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWxlZnQ6IDBweDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3Atc3R5bGUgOiBzb2xpZDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3AtY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJIM3tcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctdG9wOiA0cHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXJpZ2h0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWJvdHRvbTogNHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1sZWZ0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLXN0eWxlIDogc29saWQ7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLWNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiSFJ7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICBoZWlnaHQ6IDNweDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiUHtcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiVEh7XHJcbiIgKyAKLQkJCQkiICBjb2xvcjogI0ZGRkZDQztcclxuIiArIAotCQkJCSIgIGJhY2tncm91bmQtY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJURHtcclxuIiArIAotCQkJCSIgIGNvbG9yIDogYmxhY2s7XHJcbiIgKyAKLQkJCQkiICBiYWNrZ3JvdW5kLWNvbG9yIDogd2hpdGU7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIi0tPlxyXG4iICsgCi0JCQkJIjwvU1RZTEU+XHJcbiIgKyAKLQkJCQkiPC9IRUFEPjxCT0RZPlxyXG4iICsgCi0JCQkJIjxIMT5IZWFkaW5nIDEgSGVhZGluZyAxPC9IMT5cclxuIiArIAotCQkJCSI8SDI+SGVhZGluZyAyIEhlYWRpbmcgMjwvSDI+XHJcbiIgKyAKLQkJCQkiPEgzPkhlYWRpbmcgMyBIZWFkaW5nIDM8L0gzPlxyXG4iICsgCi0JCQkJIjxIUj5cclxuIiArIAotCQkJCSI8UD5Ob3JtYWwgVGV4dDwvUD5cclxuIiArIAotCQkJCSI8UCBzdHlsZT1cImNvbG9yIDogd2hpdGU7IGJhY2tncm91bmQtY29sb3IgOiB0ZWFsO1wiPk5vcm1hbCBUZXh0IHdpdGggaW5saW5lIHN0eWxlPC9QPlxyXG4iICsgCi0JCQkJIjxIUj5cclxuIiArIAotCQkJCSI8VEFCTEUgYm9yZGVyPVwiMVwiPlxyXG4iICsgCi0JCQkJIiAgPFRCT0RZPlxyXG4iICsgCi0JCQkJIiAgICA8VFI+XHJcbiIgKyAKLQkJCQkiICAgICAgPFRIIGNvbHNwYW49XCIzXCI+SGVhZGVyIENlbGwgb2YgVGFibGU8L1RIPlxyXG4iICsgCi0JCQkJIiAgICA8L1RSPlxyXG4iICsgCi0JCQkJIiAgICA8VFI+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgIDwvVFI+XHJcbiIgKyAKLQkJCQkiICAgIDxUUj5cclxuIiArIAotCQkJCSIgICAgICA8VEQ+RGF0YSBDZWxsIG9mIFRhYmxlPC9URD5cclxuIiArIAotCQkJCSIgICAgICA8VEQ+RGF0YSBDZWxsIG9mIFRhYmxlPC9URD5cclxuIiArIAotCQkJCSIgICAgICA8VEQ+RGF0YSBDZWxsIG9mIFRhYmxlPC9URD5cclxuIiArIAotCQkJCSIgICAgPC9UUj5cclxuIiArIAotCQkJCSIgIDwvVEJPRFk+XHJcbiIgKyAKLQkJCQkiPC9UQUJMRT5cclxuIiArIAotCQkJCSI8L0JPRFk+PC9IVE1MPiI7Ci0JCXJldHVybiB0ZXh0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTZWxlY3RvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTZWxlY3RvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2NDNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU2VsZWN0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuQ1NTU2VsZWN0b3JMaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1NlbGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3JDb21iaW5hdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3JJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2ltcGxlU2VsZWN0b3I7Ci0KLQotcHVibGljIGNsYXNzIENTU1NlbGVjdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMSwgSDIsIEgzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMSwgSDIsIEgzIiwgMywgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDIiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDIiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDIpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDMiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDMiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JLy8gc2VlIDIxNDQxNiBEb3QgY2hhciBpcyBub3QgZXNjYXBlZCBpbiBYTUwxME5hbWVzLmpGbGV4Ci0JLy8gZm9yIGNvbXBsaWNhdGlvbnMgbGVhZGluZyB0byB0aGlzIHRlc3QgYmVpbmcgY2hhbmdlZC4KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIXFxcXCwgSFxcMSwgSDMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkhcXFxcLCBIXFwxLCBIMyIsIDMsIDIpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkhcXFxcIiwgMSwgMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkhcXFxcIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkhcXDEiLCAxLCAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSFxcMSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMik7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMyIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMyIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS5wYXN0b3JhbCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEucGFzdG9yYWwiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS5wYXN0b3JhbCIsIDEsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117InBhc3RvcmFsIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlAucGFzdG9yYWwubWFyaW5lIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQLnBhc3RvcmFsLm1hcmluZSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAucGFzdG9yYWwubWFyaW5lIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAyLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJwYXN0b3JhbCIsICJtYXJpbmUifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDUoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKi53YXJuaW5nIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqLndhcm5pbmciLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqLndhcm5pbmciLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsid2FybmluZyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwNigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIud2FybmluZyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLndhcm5pbmciLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIud2FybmluZyIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117Indhcm5pbmcifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKltsYW5nPWZyXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKltsYW5nPWZyXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIipbbGFuZz1mcl0iLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGFuZz1mciJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJbbGFuZz1mcl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIltsYW5nPWZyXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIltsYW5nPWZyXSIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117Imxhbmc9ZnIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKiNteWlkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqI215aWQiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqI215aWQiLCAxLCAxMDAwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117Im15aWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiI215aWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiNteWlkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiI215aWQiLCAxLCAxMDAwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibXlpZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMSN6OTh5Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMSN6OTh5IiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEjejk4eSIsIDEsIDEwMDAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ6OTh5In0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjEyKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxIEVNIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMSBFTSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxIEVNIiwgMywgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkVNIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjEzKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkRJViAqIFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkRJViAqIFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJESVYgKiBQIiwgNSwgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg0KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgUCAqW2hyZWZdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgUCAqW2hyZWZdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWIFAgKltocmVmXSIsIDUsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAxLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJocmVmIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkJPRFkgPiBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJCT0RZID4gUCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkJPRFkgPiBQIiwgMywgMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkJPRFkiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWIE9MPkxJIFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkRJViBPTCA+IExJIFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJESVYgT0wgPiBMSSBQIiwgNywgNCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJPTCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgzKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg0KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiTEkiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSg2KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJNQVRIICsgUCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiTUFUSCArIFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJNQVRIICsgUCIsIDMsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJNQVRIIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiKyIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQURKQUNFTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLm9wZW5lciArIEgyIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS5vcGVuZXIgKyBIMiIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxLm9wZW5lciArIEgyIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsib3BlbmVyIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiKyIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQURKQUNFTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMiIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJFWEFNUExFW25vdGF0aW9uPWRlY2ltYWxdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJFWEFNUExFW25vdGF0aW9uPWRlY2ltYWxdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRVhBTVBMRVtub3RhdGlvbj1kZWNpbWFsXSIsIDEsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkVYQU1QTEUiLCBmYWxzZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibm90YXRpb249ZGVjaW1hbCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJTUEFOW2hlbGxvPVwiQ2xldmVsYW5kXCJdW2dvb2RieWU9XCJDb2x1bWJ1c1wiXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiU1BBTltoZWxsbz1cIkNsZXZlbGFuZFwiXVtnb29kYnllPVwiQ29sdW1idXNcIl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJTUEFOW2hlbGxvPVwiQ2xldmVsYW5kXCJdW2dvb2RieWU9XCJDb2x1bWJ1c1wiXSIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlNQQU4iLCBmYWxzZSwgMiwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaGVsbG89XCJDbGV2ZWxhbmRcIiIsICJnb29kYnllPVwiQ29sdW1idXNcIiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgPiBQOmZpcnN0LWNoaWxkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgPiBQOmZpcnN0LWNoaWxkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWID4gUDpmaXJzdC1jaGlsZCIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkRJViIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZmlyc3QtY2hpbGQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUDpmaXJzdC1jaGlsZCBFTSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUDpmaXJzdC1jaGlsZCBFTSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlA6Zmlyc3QtY2hpbGQgRU0iLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJmaXJzdC1jaGlsZCJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJFTSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqID4gQTpmaXJzdC1jaGlsZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKiA+IEE6Zmlyc3QtY2hpbGQiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqID4gQTpmaXJzdC1jaGlsZCIsIDMsIDEwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZmlyc3QtY2hpbGQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiQTpsaW5rIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJBOmxpbmsiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJBOmxpbmsiLCAxLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIjpsaW5rIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICI6bGluayIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIjpsaW5rIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiQTpmb2N1czpob3ZlciIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiQTpmb2N1czpob3ZlciIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkE6Zm9jdXM6aG92ZXIiLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJmb2N1cyIsICJob3ZlciJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyNygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIVE1MOmxhbmcoZGUpID4gUSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSFRNTDpsYW5nKGRlKSA+IFEiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIVE1MOmxhbmcoZGUpID4gUSIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkhUTUwiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxhbmcoZGUpIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJRIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlAgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUCA+IEE6bGluaywgQS5leHRlcm5hbDp2aXNpdGVkIiwgMiwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUCA+IEE6bGluayIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQS5leHRlcm5hbDp2aXNpdGVkIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAxLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJleHRlcm5hbCJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsidmlzaXRlZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQI2hvZ2U5OCArICo6aG92ZXIgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUCNob2dlOTggKyAqOmhvdmVyID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiLCAyLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQI2hvZ2U5OCArICo6aG92ZXIgPiBBOmxpbmsiLCA1LCAxMDIwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJob2dlOTgifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIrIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5BREpBQ0VOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaG92ZXIifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImxpbmsifSk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQS5leHRlcm5hbDp2aXNpdGVkIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAxLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJleHRlcm5hbCJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsidmlzaXRlZCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxLjEyMyIsIDEsIDEwMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQLjEyMy40NTYiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAuMTIzLjQ1NiIsIDEsIDIpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAuMTIzLjQ1NiIsIDEsIDIwMSwgMik7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMiwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIiwgIjQ1NiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIqLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqLjEyMyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIioiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiLjEyMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEuMXgzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS4xeDMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS4xeDMiLCAxLCAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxeDMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzUoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDIuMTIzIzQ2Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMi4xMjMjNDYiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMi4xMjMjNDYiLCAxLCAxMDEwMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgyIiwgZmFsc2UsIDAsIDEsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117IjQ2In0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgzLjF4MyM0dDIiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgzLjF4MyM0dDIiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMy4xeDMjNHQyIiwgMSwgMTAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMyIsIGZhbHNlLCAwLCAxLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxeDMifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyI0dDIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiouMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM4KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIuMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM5KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi4xMjNmNTY3Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIuMTIzZjU2NyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIi4xMjNmNTY3IiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzZjU2NyJ9KTsKLQl9Ci0KLQkvLyBCdWcgMjIxNTA0OiB3aGl0ZXNwYWNlIHByZWNlZGluZyBhIHNlbGVjdG9yIHNlcGFyYXRvciB3YXMgY2F1c2luZyBzZWxlY3RvcnMKLQkvLyB0byBiZSBtZXJnZWQKLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3I0MCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJoMS5maXggLCBoMi5maXgsIGgzLmZpeCAsIGRpdiNjb250YWluZXIiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgImgxLmZpeCwgaDIuZml4LCBoMy5maXgsIGRpdiNjb250YWluZXIiLCA0LCAwKTsKLQkJCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCQkKLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiaDEuZml4IiwgMSwgMTAxLCAwKTsKLQkJCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJoMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdIHsiZml4In0pOwotCQkKLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiaDIuZml4IiwgMSwgMTAxLCAwKTsKLQkJCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJoMiIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdIHsiZml4In0pOwotCQkKLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDIpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiaDMuZml4IiwgMSwgMTAxLCAwKTsKLQkJCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJoMyIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdIHsiZml4In0pOwotCQkKLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDMpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiZGl2I2NvbnRhaW5lciIsIDEsIDEwMDAxLCAwKTsKLQkJCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJkaXYiLCBmYWxzZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdIHsiY29udGFpbmVyIn0pOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NlbGVjdG9yTGlzdChJQ1NTU2VsZWN0b3JMaXN0IGxpc3QsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGludCBuU2VsZWN0b3JzLCBpbnQgbkVycm9ycykgewotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCBsaXN0LmdldFN0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKG5TZWxlY3RvcnMsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMobkVycm9ycywgbGlzdC5nZXRFcnJvckNvdW50KCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NlbGVjdG9yKElDU1NTZWxlY3RvciBzZWxlY3RvciwgU3RyaW5nIGZvcm1hdHRlZFNvdXJjZSwgaW50IGl0ZW1zLCBpbnQgc3BlY2lmaWNpdHksIGludCBuRXJyb3JzKSB7Ci0JCWFzc2VydEVxdWFscyhmb3JtYXR0ZWRTb3VyY2UsIHNlbGVjdG9yLmdldFN0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLCBzZWxlY3Rvci5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyhzcGVjaWZpY2l0eSwgc2VsZWN0b3IuZ2V0U3BlY2lmaWNpdHkoKSk7Ci0JCWFzc2VydEVxdWFscyhuRXJyb3JzLCBzZWxlY3Rvci5nZXRFcnJvckNvdW50KCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGJvb2xlYW4gaXNVbml2ZXJzYWwsIGludCBuQXR0cmlidXRlcywgaW50IG5DbGFzc2VzLCBpbnQgbklkcywgaW50IG5Qc2V1ZG9OYW1lcykgewotCQlhc3NlcnRUcnVlKHNlbGVjdG9yIGluc3RhbmNlb2YgSUNTU1NpbXBsZVNlbGVjdG9yKTsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoaXNVbml2ZXJzYWwsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuaXNVbml2ZXJzYWwoKSk7Ci0JCWFzc2VydEVxdWFscyhuQXR0cmlidXRlcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkF0dHJpYnV0ZXMoKSk7Ci0JCWFzc2VydEVxdWFscyhuQ2xhc3NlcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkNsYXNzZXMoKSk7Ci0JCWFzc2VydEVxdWFscyhuSWRzLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mSURzKCkpOwotCQlhc3NlcnRFcXVhbHMoblBzZXVkb05hbWVzLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mUHNldWRvTmFtZXMoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mQXR0cmlidXRlcygpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMubGVuZ3RoLCBuSXRlbXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoaXRlbXNbaV0sICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0QXR0cmlidXRlKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkNsYXNzZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldENsYXNzKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9ySURzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mSURzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRJRChpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKElDU1NTZWxlY3Rvckl0ZW0gc2VsZWN0b3IsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWludCBuSXRlbXMgPSAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldE51bU9mUHNldWRvTmFtZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldFBzZXVkb05hbWUoaSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKElDU1NTZWxlY3Rvckl0ZW0gY29tYmluYXRvciwgU3RyaW5nIGZvcm1hdHRlZFNvdXJjZSwgaW50IGNvbWJpbmF0b3JUeXBlKSB7Ci0JCWFzc2VydFRydWUoY29tYmluYXRvciBpbnN0YW5jZW9mIElDU1NTZWxlY3RvckNvbWJpbmF0b3IpOwotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCAoKElDU1NTZWxlY3RvckNvbWJpbmF0b3IpIGNvbWJpbmF0b3IpLmdldFN0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbWJpbmF0b3JUeXBlLCAoKElDU1NTZWxlY3RvckNvbWJpbmF0b3IpIGNvbWJpbmF0b3IpLmdldENvbWJpbmF0b3JUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgSUNTU1NlbGVjdG9yTGlzdCBjcmVhdGVTZWxlY3Rvckxpc3QoU3RyaW5nIHN0cikgewotCQlyZXR1cm4gbmV3IENTU1NlbGVjdG9yTGlzdEltcGwoc3RyKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NvdXJjZVBhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxZTU4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NTb3VyY2VQYXJzZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW42KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW44KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDguY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ4KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDguY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMS5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwOC5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc291cmNlUGFyc2VyVGVzdChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBtb2RlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBudWxsOwotCQlpZiAobW9kZS5lcXVhbHMoTU9ERV9PUEVOKSkgewotCQkJbW9kZWwgPSByZWFkTW9kZWxPcGVuKGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIGlmIChtb2RlLmVxdWFscyhNT0RFX0FQUEVORCkpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsQXBwZW5kKGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIGlmIChtb2RlLmVxdWFscyhNT0RFX0lOU0VSVCkpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsSW5zZXJ0KGZpbGVuYW1lKTsKLQkJfQotCQlTdHJpbmcgcmVzdWx0ID0gZHVtcFJlZ2lvbnMobW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkpOwotCQljb21wYXJlUmVzdWx0KHJlc3VsdCwgIkNTU1NvdXJjZVBhcnNlclRlc3QtIiArIGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQljbG9zZU1vZGVsKG1vZGVsKTsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxPcGVuKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCBzb3VyY2UpOwotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxBcHBlbmQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIGksIDAsIHNvdXJjZS5zdWJzdHJpbmcoaSwgaSArIDEpKTsKLQkJfQotCi0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxJbnNlcnQoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKEZJTEVTX0RJUiwgZmlsZW5hbWUpOwotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWludCB0ZXh0SW5kZXggPSBzb3VyY2UubGVuZ3RoKCkgLSBpIC0gMTsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZS5zdWJzdHJpbmcodGV4dEluZGV4LCB0ZXh0SW5kZXggKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsb3NlTW9kZWwoSUNTU01vZGVsIG1vZGVsKSB7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZChkdW1wUmVnaW9ucyhkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKSk7Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlkbyB7Ci0JCQlidWYuYXBwZW5kKGR1bXBPbmVSZWdpb24ocmVnaW9uKSk7Ci0JCQlyZWdpb24gPSByZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0JCXdoaWxlIChyZWdpb24gIT0gbnVsbCk7Ci0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wgKyAiLS0tLS0tLSIgKyBGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBPbmVSZWdpb24oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlidWYuYXBwZW5kKGRvY3VtZW50UmVnaW9uLnRvU3RyaW5nKCkpOwotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCArICIgICAgIik7IC8vJE5PTi1OTFMtMSQKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSXRlcmF0b3IgaSA9IHJlZ2lvbkxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uID0gKElUZXh0UmVnaW9uKSBpLm5leHQoKTsKLQkJCWJ1Zi5hcHBlbmQodGV4dFJlZ2lvbi50b1N0cmluZygpKTsKLQkJCWJ1Zi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBmRHVtcCA9IGZhbHNlOwotCi0JcHJpdmF0ZSB2b2lkIGNvbXBhcmVSZXN1bHQoU3RyaW5nIGFjdHVhbCwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoZkR1bXApIHsKLQkJCUZpbGVVdGlsLmR1bXBTdHJpbmcoYWN0dWFsLCBSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQl9Ci0JCWVsc2UgewotCQkJU3RyaW5nIHJlc3VsdCA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQkJYXNzZXJ0RXF1YWxzKHJlc3VsdCwgYWN0dWFsKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVFNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfT1BFTiA9ICJNT0RFX09QRU4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfQVBQRU5EID0gIk1PREVfQVBQRU5EIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0lOU0VSVCA9ICJNT0RFX0lOU0VSVCI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NUZXh0UGFyc2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1RleHRQYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxOTU0NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1RleHRQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXJ6LkNTU1RleHRQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnBhcnNlcnouQ1NTVGV4dFRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotCi0KLXB1YmxpYyBjbGFzcyBDU1NUZXh0UGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDIuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDUuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGV4dDcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0ZXh0UGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFRleHQ4KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA4LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHRleHRQYXJzZXJUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhmaWxlbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJQ1NTVGV4dFBhcnNlciBwYXJzZXIgPSBuZXcgQ1NTVGV4dFBhcnNlcihDU1NUZXh0UGFyc2VyLk1PREVfU1RZTEVTSEVFVCwgc291cmNlKTsKLQkJU3RyaW5nIHJlc3VsdCA9IGR1bXBSZWdpb25zKHBhcnNlci5nZXRUb2tlbkxpc3QoKSk7Ci0JCWNvbXBhcmVSZXN1bHQocmVzdWx0LCAiQ1NTVGV4dFBhcnNlclRlc3QtIiArIGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVN0cmluZyhTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhMaXN0IHRva2VucykgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlJdGVyYXRvciBpID0gdG9rZW5zLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJYnVmLmFwcGVuZChkdW1wT25lUmVnaW9uKChDU1NUZXh0VG9rZW4pIGkubmV4dCgpKSk7Ci0JCX0KLQotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCArICItLS0tLS0tIiArIEZpbGVVdGlsLmNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcE9uZVJlZ2lvbihDU1NUZXh0VG9rZW4gdG9rZW4pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCQlidWYuYXBwZW5kKCJbIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5pbWFnZSk7Ci0JCWJ1Zi5hcHBlbmQoIl0gIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5raW5kKTsKLQkJYnVmLmFwcGVuZCgiIC0gIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5zdGFydCk7Ci0JCWJ1Zi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5sZW5ndGgpOwotCi0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGZEdW1wID0gZmFsc2U7Ci0KLQlwcml2YXRlIHZvaWQgY29tcGFyZVJlc3VsdChTdHJpbmcgYWN0dWFsLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRHVtcCkgewotCQkJRmlsZVV0aWwuZHVtcFN0cmluZyhhY3R1YWwsIFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCQlhc3NlcnRFcXVhbHMocmVzdWx0LCBhY3R1YWwpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cyI7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVXJsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1VybFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyODI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVXJsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2VyLkNTU1NvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2Vyei5DU1NSZWdpb25Db250ZXh0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC51dGlsLkNTU1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLQotcHVibGljIGNsYXNzIENTU1VybFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aG91dCBxdW90ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb24xKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aG91dCBxdW90ZXMsIHdpdGggc3Vycm91bmRlZCBzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjIoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoICB3aGl0ZSBzcGFjZS5naWYgICk7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aCBzaW5nbGUgcXVvdGUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb24zKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnd2hpdGUgc3BhY2UuZ2lmXCcpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHdpdGggZG91YmxlIHF1b3RlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uNCgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybChcIndoaXRlIHNwYWNlLmdpZlwiKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB0d28gdXJscwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjUoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKHN0eWxlIGltYWdlLmdpZik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIFN0eWxlIHJ1bGU6IHR3byB1cmxzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFN0eWxlUnVsZTEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KCJMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpO1xyXG5saXN0LXN0eWxlLWltYWdlOiB1cmwoc3R5bGUgaW1hZ2UuZ2lmKTsgfSIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMiwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBJbXBvcnQgcnVsZSBhbmQgc3R5bGUgcnVsZTogd2l0aG91dCBxdW90ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U29tZVJ1bGVzMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoIkBpbXBvcnQgdXJsKHdoaXRlIHNwYWNlLmNzcyk7TEkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTtsaXN0LXN0eWxlLWltYWdlOiB1cmwoc3R5bGUgaW1hZ2UuZ2lmKTsgfSIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMywgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMl0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzJdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiBUd28gdXJscyBidXQgcGFyZW50aGVzaXMgYXJlIG1pc3NlZCwgc28gY29uY2F0ZW5hdGVkIHVybAotCSAqIGlzIGlkZW50aWZpZWQuIEJ5IGFkZGluZyBwYXJlbnRoZXNpcywgdXJscyBhcmUgY29ycmVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaXhFcnJvcjEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJLy8gX19fX19fX19fX19fMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmOyBsaXN0LXN0eWxlLWltYWdlOiB1cmxzdHlsZSBpbWFnZS5naWYpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWY7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybHN0eWxlIGltYWdlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBmaXJzdCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMzcsIDAsICIpIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IHNlY29uZCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNjEsIDAsICIoIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEltcG9ydCBydWxlIGFuZCBzdHlsZSBydWxlOiBUd28gdXJscyBidXQgcGFyZW50aGVzaXMgYXJlIG1pc3NlZCwgc28KLQkgKiBjb25jYXRlbmF0ZWQgdXJsIGlzIGlkZW50aWZpZWQuIEJ5IGFkZGluZyBwYXJlbnRoZXNpcywgdXJscyBhcmUKLQkgKiBjb3JyZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpeEVycm9yMigpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkvLyBfX19fX19fX19fX18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotCQlkb2N1bWVudC5zZXQoIkBpbXBvcnQgdXJsKHdoaXRlIHNwYWNlLmNzcztMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybHdoaXRlIHNwYWNlLmdpZik7IH0iKTsgLy8kTk9OLU5MUy0xJAkJCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5jc3M7TEkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmx3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNvcnJlY3QgZmlyc3QgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDI3LCAwLCAiKSIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBzZWNvbmQgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDU1LCAwLCAiKCIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMiwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBJbXBvcnQgcnVsZTogVXJsIGhhcyBvbmx5IG9uZSBxdW90ZSwgc28gaXQgaXMgbm90IGlkZW50aWZpZWQgYXMgdXJsLiBCeQotCSAqIHJlbW92aW5nIHF1b3RlLCB1cmwgaXMgY29ycmVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaXhFcnJvcjMoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJLy8gX19fX19fX19fX19fMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAotCQlkb2N1bWVudC5zZXQoIkBpbXBvcnQgdXJsKHdoaXRlIHNwYWNlLmNzc1wiKTsiKTsgLy8kTk9OLU5MUy0xJAkJCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHVybHMubGVuZ3RoKTsKLQotCQkvLyBjb3JyZWN0IHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyNywgMSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0KLQlwcml2YXRlIFVybEluZm9bXSBwaWNrdXBVcmwoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlMaXN0IHVybHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSBkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQl3aGlsZSAoZG9jdW1lbnRSZWdpb24gIT0gbnVsbCkgewotCQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSBkb2N1bWVudFJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCQlJdGVyYXRvciBpID0gcmVnaW9uTGlzdC5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQkJSVRleHRSZWdpb24gdGV4dFJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgaS5uZXh0KCk7Ci0JCQkJU3RyaW5nIHR5cGUgPSB0ZXh0UmVnaW9uLmdldFR5cGUoKTsKLQkJCQlpZiAodHlwZS5lcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSkgfHwgdHlwZS5lcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSkpIHsKLQkJCQkJdXJscy5hZGQobmV3IFVybEluZm8odHlwZSwgZG9jdW1lbnRSZWdpb24uZ2V0RnVsbFRleHQodGV4dFJlZ2lvbikpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlkb2N1bWVudFJlZ2lvbiA9IGRvY3VtZW50UmVnaW9uLmdldE5leHQoKTsKLQkJfQotCQlyZXR1cm4gKFVybEluZm9bXSkgdXJscy50b0FycmF5KG5ldyBVcmxJbmZvW3VybHMuc2l6ZSgpXSk7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBVcmxJbmZvIHsKLQkJVXJsSW5mbyhTdHJpbmcgdHlwZSwgU3RyaW5nIHVybCkgewotCQkJZlR5cGUgPSB0eXBlOwotCQkJZlVybCA9IENTU1V0aWwuZXh0cmFjdFVyaUNvbnRlbnRzKHVybCk7Ci0JCX0KLQotCQlTdHJpbmcgZ2V0VHlwZSgpIHsKLQkJCXJldHVybiBmVHlwZTsKLQkJfQotCi0JCVN0cmluZyBnZXRVcmwoKSB7Ci0JCQlyZXR1cm4gZlVybDsKLQkJfQotCi0JCXByaXZhdGUgU3RyaW5nIGZUeXBlOwotCQlwcml2YXRlIFN0cmluZyBmVXJsOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc3R5bGVzaGVldHMvU3R5bGVTaGVldFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3N0eWxlc2hlZXRzL1N0eWxlU2hlZXRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZWFkODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc3R5bGVzaGVldHMvU3R5bGVTaGVldFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zdHlsZXNoZWV0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0RvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU0ltcG9ydFJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVJ1bGU7Ci0KLXB1YmxpYyBjbGFzcyBTdHlsZVNoZWV0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJ0ZXN0SW1wb3J0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKSB7Ci0JCQlQcm9qZWN0VXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmV3IFN0cmluZ1tdIHt9KTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgUFJPSkVDVF9OQU1FLCAiLyIgKyBQUk9KRUNUX05BTUUpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBmb3IgY3ljbGVzIGluIGltcG9ydHMuIElmIGEgY3ljbGUgaXMgZW5jb3VudGVyZWQsIHdlIHNob3VsZCBub3QgZ2V0IHN0dWNrCi0JICogaW4gYSBsb29wIG9yIHJlLWltcG9ydCB0aGUgc3R5bGVzaGVldC4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDeWNsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvY3ljbGUwLmNzcyI7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJYXNzZXJ0VHJ1ZSgiRmlsZSBkb2Vzbid0IGV4aXN0OiAiICsgZmlsZVBhdGgsIGZpbGUuZXhpc3RzKCkpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElDU1NNb2RlbCkgewotCQkJCUlDU1NEb2N1bWVudCBkb2N1bWVudCA9ICgoSUNTU01vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCQlpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJQ1NTU3R5bGVTaGVldCkgewotCQkJCQlDU1NSdWxlTGlzdCBsaXN0ID0gKChJQ1NTU3R5bGVTaGVldCkgZG9jdW1lbnQpLmdldENzc1J1bGVzKHRydWUpOwotCQkJCQlhc3NlcnRUcnVlKCJUaGVyZSBzaG91bGQgYmUgYSB0b3RhbCBvZiAzIHJ1bGVzIHN1cHBsaWVkIHN0eWxlc2hlZXQuIiwgbGlzdC5nZXRMZW5ndGgoKSA9PSAzKTsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQkJCUNTU1J1bGUgcnVsZSA9IGxpc3QuaXRlbShpKTsKLQkJCQkJCWFzc2VydFRydWUoIlJ1bGUgc2hvdWxkIGJlIGEgc3R5bGUgcnVsZS4gcnVsZS5nZXRUeXBlKCkgPT0gIiArIHJ1bGUuZ2V0VHlwZSgpLCBydWxlLmdldFR5cGUoKSA9PSBJQ1NTTm9kZS5TVFlMRVJVTEVfTk9ERSk7Ci0JCQkJCQkvLyBDaGVjayB0aGF0IHRoZSBydWxlcyBhcmUgaW1wb3J0ZWQsIGl0IHdvdWxkIHN0YXJ0IHdpdGggdGhlIGxhc3QgaW1wb3J0ZWQgc3R5bGVzaGVldCdzIHJ1bGVzIGFuZCBtb3ZlIHVwCi0JCQkJCQlhc3NlcnRFcXVhbHMoIlN0eWxlIHJ1bGVzIGFyZSBub3QgZXF1YWwuIiwgKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpLCAiI2N5Y2xlIiArICgyLWkpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgdGhlIHNpbXBsZSBjYXNlIG9mIGEgYmFzaWMgQGltcG9ydCBvciBhIHN0eWxlc2hlZXQKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L3NpdGUuY3NzIjsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlhc3NlcnRUcnVlKCJGaWxlIGRvZXNuJ3QgZXhpc3Q6ICIgKyBmaWxlUGF0aCwgZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSUNTU01vZGVsKSB7Ci0JCQkJSUNTU0RvY3VtZW50IGRvY3VtZW50ID0gKChJQ1NTTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJCWlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElDU1NTdHlsZVNoZWV0KSB7Ci0JCQkJCUNTU1J1bGVMaXN0IGxpc3QgPSAoKElDU1NTdHlsZVNoZWV0KSBkb2N1bWVudCkuZ2V0Q3NzUnVsZXModHJ1ZSk7Ci0JCQkJCVN0cmluZ1tdIHJ1bGVzID0gbmV3IFN0cmluZ1tdIHsiI2NvbnRlbnQiLCAiYSIsICJhOmhvdmVyIn07Ci0JCQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSBhIHRvdGFsIG9mIDMgcnVsZXMgc3VwcGxpZWQgc3R5bGVzaGVldC4iLCBsaXN0LmdldExlbmd0aCgpID09IHJ1bGVzLmxlbmd0aCk7Ci0KLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQkJCUNTU1J1bGUgcnVsZSA9IGxpc3QuaXRlbShpKTsKLQkJCQkJCWFzc2VydFRydWUoIlJ1bGUgc2hvdWxkIGJlIGEgc3R5bGUgcnVsZS4gcnVsZS5nZXRUeXBlKCkgPT0gIiArIHJ1bGUuZ2V0VHlwZSgpLCBydWxlLmdldFR5cGUoKSA9PSBJQ1NTTm9kZS5TVFlMRVJVTEVfTk9ERSk7Ci0JCQkJCQlDU1NTdHlsZVJ1bGUgc3R5bGUgPSAoQ1NTU3R5bGVSdWxlKXJ1bGU7Ci0JCQkJCQlhc3NlcnRFcXVhbHMoIlNlbGVjdG9yIHRleHQgZGlkIG5vdCBtYXRjaC4iLCBydWxlc1tpXSwgc3R5bGUuZ2V0U2VsZWN0b3JUZXh0KCkudHJpbSgpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZm9yIHRoZSBpbXBvcnQgb2YgYSBub24tZXhpc3RlbnQgc3R5bGVzaGVldAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50SW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9pbXBvcnRETkUuY3NzIjsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlhc3NlcnRUcnVlKCJGaWxlIGRvZXNuJ3QgZXhpc3Q6ICIgKyBmaWxlUGF0aCwgZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSUNTU01vZGVsKSB7Ci0JCQkJSUNTU0RvY3VtZW50IGRvY3VtZW50ID0gKChJQ1NTTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJCWlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElDU1NTdHlsZVNoZWV0KSB7Ci0JCQkJCUNTU1J1bGVMaXN0IGxpc3QgPSAoKElDU1NTdHlsZVNoZWV0KSBkb2N1bWVudCkuZ2V0Q3NzUnVsZXModHJ1ZSk7Ci0JCQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSBhIHRvdGFsIG9mIDEgcnVsZS4iLCBsaXN0LmdldExlbmd0aCgpID09IDEpOwotCQkJCQlDU1NSdWxlIHJ1bGUgPSBsaXN0Lml0ZW0oMCk7Ci0JCQkJCWFzc2VydFRydWUoIlJ1bGUgc2hvdWxkIGJlIGEgc3R5bGUgcnVsZS4gcnVsZS5nZXRUeXBlKCkgPT0gIiArIHJ1bGUuZ2V0VHlwZSgpLCBydWxlLmdldFR5cGUoKSA9PSBJQ1NTTm9kZS5JTVBPUlRSVUxFX05PREUpOwotCQkJCQlhc3NlcnRFcXVhbHMoIlN0eWxlc2hlZXQgcmVmZXJlbmNlIGlzIGRpZmZlcmVudCB0aGFuIGV4cGVjdGVkLiIsICgoQ1NTSW1wb3J0UnVsZSkgcnVsZSkuZ2V0SHJlZigpLCAidGhpc2ZpbGVkb2VzbnRleGlzdC5jc3MiKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3RzIHRoYXQgaW1wb3J0cyBjYW4gYmUgcmVzb2x2ZWQgdXNpbmcgdGhlIHZhcmlvdXMgc3ludGF4ZXMgZm9yIGltcG9ydC4KLQkgKiA8dWw+Ci0JICogPGxpPkBpbXBvcnQgdXJsKCJleGFtcGxlLmNzcyIpOzwvbGk+Ci0JICogPGxpPkBpbXBvcnQgdXJsKGV4YW1wbGUuY3NzKTs8L2xpPgotCSAqIDxsaT5AaW1wb3J0ICJleGFtcGxlLmNzcyI7PC9saT4KLQkgKiA8L3VsPgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEltcG9ydE1ldGhvZHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2ltcG9ydE1ldGhvZHMuY3NzIjsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlhc3NlcnRUcnVlKCJGaWxlIGRvZXNuJ3QgZXhpc3Q6ICIgKyBmaWxlUGF0aCwgZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSUNTU01vZGVsKSB7Ci0JCQkJSUNTU0RvY3VtZW50IGRvY3VtZW50ID0gKChJQ1NTTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJCWlmIChkb2N1bWVudCBpbnN0YW5jZW9mIElDU1NTdHlsZVNoZWV0KSB7Ci0JCQkJCUNTU1J1bGVMaXN0IGxpc3QgPSAoKElDU1NTdHlsZVNoZWV0KSBkb2N1bWVudCkuZ2V0Q3NzUnVsZXModHJ1ZSk7Ci0JCQkJCWFzc2VydFRydWUoIlRoZXJlIHNob3VsZCBiZSBhIHRvdGFsIG9mIDMgcnVsZXMuIiwgbGlzdC5nZXRMZW5ndGgoKSA9PSAzKTsKLQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQkJCUNTU1J1bGUgcnVsZSA9IGxpc3QuaXRlbShpKTsKLQkJCQkJCWFzc2VydFRydWUoIlJ1bGUgc2hvdWxkIGJlIGEgc3R5bGUgcnVsZS4gcnVsZS5nZXRUeXBlKCkgPT0gIiArIHJ1bGUuZ2V0VHlwZSgpLCBydWxlLmdldFR5cGUoKSA9PSBJQ1NTTm9kZS5TVFlMRVJVTEVfTk9ERSk7Ci0JCQkJCQlDU1NTdHlsZVJ1bGUgc3R5bGUgPSAoQ1NTU3R5bGVSdWxlKXJ1bGU7Ci0JCQkJCQlhc3NlcnRFcXVhbHMoIlNlbGVjdG9yIHRleHQgZGlkIG5vdCBtYXRjaC4iLCAiI2NvbnRlbnQiLCBzdHlsZS5nZXRTZWxlY3RvclRleHQoKS50cmltKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBmb3IgdGhlIGltcG9ydCBvZiBhIHN0eWxlc2hlZXQgaW4gYSBwYXJlbnQgZGlyZWN0b3J5Ci0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RnJvbVBhcmVudERpcmVjdG9yeSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvc3R5bGUvc3ViLmNzcyI7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJYXNzZXJ0VHJ1ZSgiRmlsZSBkb2Vzbid0IGV4aXN0OiAiICsgZmlsZVBhdGgsIGZpbGUuZXhpc3RzKCkpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCWlmIChtb2RlbCBpbnN0YW5jZW9mIElDU1NNb2RlbCkgewotCQkJCUlDU1NEb2N1bWVudCBkb2N1bWVudCA9ICgoSUNTU01vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCQlpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJQ1NTU3R5bGVTaGVldCkgewotCQkJCQlDU1NSdWxlTGlzdCBsaXN0ID0gKChJQ1NTU3R5bGVTaGVldCkgZG9jdW1lbnQpLmdldENzc1J1bGVzKHRydWUpOwotCQkJCQlhc3NlcnRUcnVlKCJUaGVyZSBzaG91bGQgYmUgYSB0b3RhbCBvZiAxIHJ1bGUuIiwgbGlzdC5nZXRMZW5ndGgoKSA9PSAxKTsKLQkJCQkJQ1NTUnVsZSBydWxlID0gbGlzdC5pdGVtKDApOwotCQkJCQlhc3NlcnRUcnVlKCJSdWxlIHNob3VsZCBiZSBhIHN0eWxlIHJ1bGUuIHJ1bGUuZ2V0VHlwZSgpID09ICIgKyBydWxlLmdldFR5cGUoKSwgcnVsZS5nZXRUeXBlKCkgPT0gSUNTU05vZGUuU1RZTEVSVUxFX05PREUpOwotCQkJCQlhc3NlcnRFcXVhbHMoIlN0eWxlc2hlZXQgcmVmZXJlbmNlIGlzIGRpZmZlcmVudCB0aGFuIGV4cGVjdGVkLiIsICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSwgIiNjb250ZW50Iik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YmQwNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotQGZvbnQtZmFjZSB7DQotCWZvbnQtZmFtaWx5OiAiU3dpc3MgNzIxIjsNCi0Jc3JjOiB1cmwoInN3aXNzNzIxYmxrLnBmciIpOyAvKiBTd2lzcyA3MjEgYmxhY2sgKi8NCi0JZm9udC1zdHlsZTogbm9ybWFsLCBpdGFsaWM7DQotCWZvbnQtd2VpZ2h0OiA4MDAsOTAwOyAvKiBub3RlIHRoZSBpbnRlcmVzdGluZyBwcm9ibGVtIHRoYXQNCi0JdGhlIDkwMCB3ZWlnaHQgaXRhbGljIGRvZXNugWZ0IGV4aXN0ICovDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLQlzcmM6IGxvY2FsKCJQYWxhdGlubyIpLA0KLQkJbG9jYWwoIlRpbWVzIE5ldyBSb21hbiIpLA0KLQkJbG9jYWwoIk5ldyBZb3JrIiksDQotCQlsb2NhbCgiVXRvcGlhIiksDQotCQl1cmwoImh0dHA6Ly9zb21ld2hlcmUvZnJlZS9mb250Iik7DQotCWZvbnQtZmFtaWx5OiBzZXJpZjsNCi0JZm9udC13ZWlnaHQ6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtdmFyaWFudDogbm9ybWFsOw0KLQlmb250LXNpemU6IGFsbA0KLX0NCi0NCi1AZm9udC1mYWNlIHsNCi0Jc3JjOiBsb2NhbCgiQWxhYmFtYSBJdGFsaWMiKSwNCi0JdXJsKGh0dHA6Ly93d3cuZm9udHMub3JnL0EvYWxhYmFtYS1pdGFsaWMpIGZvcm1hdCgidHJ1ZXR5cGUiKTsNCi0JcGFub3NlLTE6IDIgNCA1IDIgNSA0IDUgOSAzIDM7DQotCWZvbnQtZmFtaWx5OiBBbGFiYW1hLCBzZXJpZjsNCi0JZm9udC13ZWlnaHQ6IDMwMCwgNDAwLCA1MDA7DQotCWZvbnQtc3R5bGU6IGl0YWxpYywgb2JsaXF1ZTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU0ZvbnRGYW1pbHlUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFtaWx5VGVzdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2Yzc4NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU0ZvbnRGYW1pbHlUZXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWEuYyB7Ci0JZm9udC1mYW1pbHk6IENvdXJpZXI7Ci19Ci0KLWEuY24gewotCWZvbnQtZmFtaWx5OiBDb3VyaWVyIE5ldzsKLX0KLQotYS5xY24gewotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciOwotfQotCi1hLmNzIHsKLQlmb250LWZhbWlseTogCQlDb21pYwkgICAgCVNhbnMJCTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTTW9kZWxMb2FkVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU01vZGVsTG9hZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkMzAwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTTW9kZWxMb2FkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnRlc3RmaWxlczsNCi0NCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOw0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsNCi0NCi1wdWJsaWMgY2xhc3MgQ1NTTW9kZWxMb2FkVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUTUw0X0NTUyA9ICJodG1sNC5jc3MiOw0KLQ0KLQlwdWJsaWMgQ1NTTW9kZWxMb2FkVGVzdCgpIHsNCi0JCXN1cGVyKCJDU1MgTW9kZWwgTG9hZGluZyBTdWl0ZSIpOw0KLQl9DQotDQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkQ1NTZnJvbVN0cmVhbSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotCQlJbnB1dFN0cmVhbSBpbnB1dCA9IG51bGw7DQotDQotCQlpbnB1dCA9IENTU01vZGVsTG9hZFRlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShIVE1MNF9DU1MpOw0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KEhUTUw0X0NTUywgaW5wdXQsIG51bGwpOw0KLQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7DQotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZE1vZGVsIHdhcyBub3QgYSBJQ1NTTW9kZWwiLCBtb2RlbCBpbnN0YW5jZW9mIElDU1NNb2RlbCk7DQotCQlhc3NlcnRUcnVlKCJjb250ZW50cyBhcmUgaW5jb21wbGV0ZSIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpLmluZGV4T2YoIkJhc2ljIEhUTUwgc3R5bGUgaW5mb3JtYXRpb24iKSA+IDQpOw0KLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1BhZ2VSdWxlVGVzdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk3N2YyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLUBwYWdlIHtzaXplOiA4LjVpbiAxMWluO21hcmdpbjogMmNtfQ0KLQ0KLUBwYWdlIHsNCi0Jc2l6ZTogYXV0bzsgLyogYXV0byBpcyB0aGUgaW5pdGlhbCB2YWx1ZSAqLw0KLQltYXJnaW46IDEwJTsNCi19DQotDQotQHBhZ2UgOmxlZnQgew0KLQltYXJnaW4tbGVmdDogNGNtOw0KLQltYXJnaW4tcmlnaHQ6IDNjbTsNCi19DQotQHBhZ2UgOnJpZ2h0IHsNCi0JbWFyZ2luLWxlZnQ6IDNjbTsNCi0JbWFyZ2luLXJpZ2h0OiA0Y207DQotfQ0KLQ0KLUBwYWdlIG5hcnJvdyB7c2l6ZTogOWNtIDE4Y219QHBhZ2Ugcm90YXRlZCB7c2l6ZTogbGFuZHNjYXBlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQyMDVhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTU3R5bGVSdWxlVGVzdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKiBwcmltaXRpdmUgdmFsdWVzICovDQotTlVNQkVSUyB7DQotICAgIE5VTUJFUjogMTIzLjQ1NjsNCi0gICAgUEVSQ0VOVEFHRTogMTIzLjQ1NiU7DQotICAgIEVNUzogMTIzLjQ1NmVtOw0KLSAgICBFWFM6IDEyMy40NTZleDsNCi0gICAgUFg6IDEyMy40NTZweDsNCi0gICAgUFgyOiAtMTIzcHg7DQotICAgIENNOiAxMjMuNDU2Y207DQotICAgIE1NOiAxMjMuNDU2bW07DQotICAgIElOOiAxMjMuNDU2aW47DQotICAgIFBUOiAxMjMuNDU2cHQ7DQotICAgIFBDOiAxMjMuNDU2cGM7DQotICAgIERFRzogLTEyMy40NTZkZWc7DQotICAgIFJBRDogMTIzLjQ1NnJhZDsNCi0gICAgR1JBRDogMTIzLjQ1NmdyYWQ7DQotICAgIE1TOiAxMjMuNDU2bXM7DQotICAgIFM6IDEyMy40NTZzOw0KLSAgICBIWjogMTIzLjQ1Nkh6Ow0KLSAgICBLSFo6IDEyMy40NTZrSHo7DQotICAgIERJTUVOU0lPTjogLTEyMy40NTZ6eno7DQotICAgIElOVEVHRVI6IDEyMzsNCi19DQotDQotU1RSSU5HUyB7DQotICAgIFNUUklORzogInN0cmluZyI7DQotICAgIFVSSTogVVJMKCJodHRwOi8vd3d3LmlibS5jb20vIik7DQotICAgIElERU5UOiBsZWZ0Ow0KLSAgICBIQVNIOiAjYWJjZGVmOw0KLSAgICBVUkFOR0U6IFUrMjBBNzsNCi0gICAgU0xBU0g6IC87DQotICAgIENPTU1BOiAsOw0KLSAgICBJTkhFUklUX1BSSU1JVElWRTogaW5oZXJpdDsNCi0gICAgQVRUUjogYXR0cihLRVkpOw0KLSAgICBGT1JNQVQ6IGZvcm1hdCgidHJ1ZWRvYyIpOw0KLSAgICBMT0NBTDogbG9jYWwoIkV4Y2Vsc2lvciBSb21hbiIpOw0KLX0NCi0NCi1GVU5DVElPTlMgew0KLSAgICBDT1VOVEVSOiBjb3VudGVyKHBhci1udW0sIHVwcGVyLXJvbWFuKTsNCi0gICAgUkVDVDogcmVjdCgxMiwgMzQsIDU2LCA3OCk7DQotICAgIFJHQkNPTE9SOiByZ2IoMjU1LCAxMjgsIDApOw0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvaHRtbDQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL2h0bWw0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0ZDg0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvaHRtbDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qDQotICogQmFzaWMgSFRNTCBzdHlsZSBpbmZvcm1hdGlvbi4NCi0gKi8NCi1odG1sLA0KLWFkZHJlc3MsDQotYmxvY2txdW90ZSxsaXN0aW5nLA0KLWJvZHksIGRkLCBkaXYsDQotZGwsIGR0LCBmaWVsZHNldCwgbGVnZW5kLGZvcm0sDQotZnJhbWUsIGZyYW1lc2V0LA0KLWgxLCBoMiwgaDMsIGg0LA0KLWg1LCBoNiwgbm9mcmFtZXMsbm9zY3JpcHQsDQotb2wsIHAsIHVsLCBjZW50ZXIsDQotZGlyLCBociwgbWVudSwgcHJlLCBwbGFpbnRleHQsIHhtcCAgeyBkaXNwbGF5OiBibG9jayB9DQotDQotb2wJCQkJe2NvdW50ZXItcmVzZXQ6IF9hbm9ueW1vdXM7IGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbH0NCi11bCxkaXIsbWVudSAgCXtjb3VudGVyLXJlc2V0OiBfYW5vbnltb3VzOyBsaXN0LXN0eWxlLXR5cGU6IGRpc2N9DQotbGkgICAgICAgICAgIAl7ZGlzcGxheTogbGlzdC1pdGVtfQ0KLWxpCQkJCXtjb3VudGVyLWluY3JlbWVudDogX2Fub255bW91c30NCi0NCi1oZWFkICAgICAgICAgICAgeyBkaXNwbGF5OiBub25lIH0NCi10YWJsZSAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZSB9DQotdHIgICAgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtcm93IH0NCi10aGVhZCAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXAgfQ0KLXRib2R5ICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCB9DQotdGZvb3QgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtZm9vdGVyLWdyb3VwIH0NCi1jb2wgICAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1jb2x1bW4gfQ0KLWNvbGdyb3VwICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cCB9DQotdGQsIHRoICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtY2VsbDsgfQ0KLWNhcHRpb24gICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWNhcHRpb24gfQ0KLXRoICAgICAgICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkZXI7fQ0KLWNhcHRpb24gICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlcjtob3Jpem9udGFsLWFsaWduOnRvcCB9DQotYnV0dG9uLCB0ZXh0YXJlYSwNCi1pbnB1dCwgb2JqZWN0LCANCi1zZWxlY3QsIGltZyB7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyB9DQotcHJlLHBsYWludGV4dCwgeG1wICAgeyB3aGl0ZS1zcGFjZTogcHJlIH0NCi1oMSwgaDIsIGgzLCBoNCwNCi1oNSwgaDYsIGIsDQotc3Ryb25nICAgICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGQgfQ0KLWksIGNpdGUsIGVtLGRmbiwNCi12YXIsIGFkZHJlc3MgICAgeyBmb250LXN0eWxlOiBpdGFsaWMgfQ0KLXByZSwgdHQsIGNvZGUscGxhaW50ZXh0LCB4bXAsDQota2JkLCBzYW1wICAgICAgIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSB9DQotb2wgICAgICAgICAgICAgIHsgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsIH0NCi1icjpiZWZvcmUgICAgICAgeyBjb250ZW50OiAiXEEiIH0NCi1jZW50ZXIgICAgICAgICAgeyB0ZXh0LWFsaWduOiBjZW50ZXIgfQ0KLXN1YiAgICAgICAgICAgICB7IHZlcnRpY2FsLWFsaWduOiBzdWIgfQ0KLXN1cCAgICAgICAgICAgICB7IHZlcnRpY2FsLWFsaWduOiBzdXBlciB9DQotdSwgaW5zICAgICAgICAgIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQ0KLWlucHV0CQkJeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfQ0KLWJ1dHRvbgkJCXsgd2hpdGUtc3BhY2U6IG5vd3JhcCB9DQotYVtocmVmXQkJCXsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQ0KLQ0KLS8qDQotICogc3R5bGVzIHRoYXQgbWF5IGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHVzZXIgYWdlbnQuDQotICogVGhpcyBwYXJ0IG1heSBuZWVkIHRvIG1vdmUgb3V0IGFuZCBwdXQgaW50byBkaWZmZXJlbnQgY3NzIGZpbGVzLg0KLSAqLw0KLWJvZHkgICAgICAgICAgICB7IGxpbmUtaGVpZ2h0OiAxLjEyZW0gfQ0KLWgxICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogMmVtOyBtYXJnaW46IC42N2VtIDAgfQ0KLWgyICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogMS41ZW07IG1hcmdpbjogLjc1ZW0gMCB9DQotaDMgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxLjE3ZW07IG1hcmdpbjogLjgzZW0gMCB9DQotaDQsIHAsdWwsDQotZmllbGRzZXQsIGZvcm0sDQotb2wsIGRsLCBkaXIsDQotbWVudSAgICAgICAgICAgIHsgbWFyZ2luOiAxLjEyZW0gMCB9DQotYmxvY2txdW90ZSAgICAgIHsgbWFyZ2luOiAxZW0gNDBweCB9DQotaDUgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAuODNlbTsgbWFyZ2luOiAxLjVlbSAwIH0NCi1oNiAgICAgICAgICAgICAgeyBmb250LXNpemU6IC43NWVtOyBtYXJnaW46IDEuNjdlbSAwIH0NCi1ibG9ja3F1b3RlICAgICAgeyBtYXJnaW4tbGVmdDogNDBweDsgbWFyZ2luLXJpZ2h0OiA0MHB4IH0NCi1iaWcgICAgICAgICAgICAgeyBmb250LXNpemU6IGxhcmdlciB9DQotc21hbGwsIHN1Yiwgc3VwIHsgZm9udC1zaXplOiBzbWFsbGVyIH0NCi1zLCBzdHJpa2UsIGRlbCAgeyB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCB9DQotaHIgICAgICAgICAgICAgIHsgYm9yZGVyOiAxcHggaW5zZXQgfQ0KLW9sLCB1bCwgZGlyLA0KLW1lbnUsIGRkICAgICAgICB7IG1hcmdpbi1sZWZ0OiA0MHB4O2JvcmRlcjowcHggfQ0KLW9sIHVsLCB1bCBvbCwNCi11bCB1bCwgb2wgb2wgICAgeyBtYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAwIH0NCi1hYmJyLCBhY3JvbnltICAgeyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7IGxldHRlci1zcGFjaW5nOiAwLjFlbSB9DQotYVtocmVmXSAgICAgICAgIHsgY29sb3I6Ymx1ZTt9DQotc2VsZWN0CQkJe2JhY2tncm91bmQtY29sb3I6IHdpbmRvdztmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OiBub3JtYWw7fQ0KLXRleHRhcmVhCQl7Ym9yZGVyOiAycHggaW5zZXQ7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfQ0KLXRleHRhcmVhLA0KLWlucHV0IAkJCXtiYWNrZ3JvdW5kLWNvbG9yOiB3aW5kb3d9DQotaW5wdXQsDQotaW5wdXRbdHlwZT10ZXh0XSwNCi1pbnB1dFt0eXBlPXBhc3N3b3JkXSB7Ym9yZGVyOiAycHggaW5zZXQ7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXdlaWdodDogbm9ybWFsO30NCi0vKiBmb2xsb3dpbmcgdXBjYXNlZCBUWVBFIGlzIGZvciB3b3JrYXJvdW5kIHRoZSBXVFAgTTIgYnVnIG9mIG5vdCBzZXR0aW5nIGRlZmF1bHQgY29udGVudCB0eXBlICovDQotaW5wdXRbVFlQRT1zdWJtaXRdLGlucHV0W1RZUEU9cmVzZXRdLGlucHV0W1RZUEU9YnV0dG9uXSxpbnB1dFtUWVBFPWNhbmNlbF0sDQotYnV0dG9uLA0KLWlucHV0W3R5cGU9YnV0dG9uXSwNCi1pbnB1dFt0eXBlPXJlc2V0XSwNCi1pbnB1dFt0eXBlPWNhbmNlbF0sDQotaW5wdXRbdHlwZT1zdWJtaXRdIHtiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOyBib3JkZXI6IDJweCBvdXRzZXQ7IGZvbnQtc2l6ZToxM3B4Ow0KLQkJCQkJZm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IG5vcm1hbDt9DQotaW5wdXRbdHlwZT1pbWFnZV0sDQotaW5wdXRbdHlwZT1jaGVja2JveF0sDQotaW5wdXRbdHlwZT1yYWRpb10gIHtib3JkZXI6IG5vbmUgfQ0KLWlucHV0W3R5cGU9aGlkZGVuXSAge2JvcmRlcjogbm9uZSB9DQotaW1nCQkJCXtib3JkZXI6IDBweCBub25lfQ0KLWxpc3RpbmcgICAgICAgICB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZTogbWVkaXVtO3doaXRlLXNwYWNlOiBwcmU7IG1hcmdpbjogMWVtIDA7fQ0KLXRib2R5LHRoZWFkLHRmb290ICAgICB7dmVydGljYWwtYWxpZ246IG1pZGRsZTt9DQotYmxpbmsgCQkJe3RleHQtZGVjb3JhdGlvbjogYmxpbms7fQ0KLQ0KLWhyIAkJe21hcmdpbjogMC41ZW0gYXV0byAwLjVlbSBhdXRvO30NCi1jYXB0aW9uICB7Ym9yZGVyOiAwcHggbm9uZTttYXJnaW46IDBweDsgcGFkZGluZzowcHggMHB4IDRweCAwcHg7fQ0KLXRkLCB0aCwNCi10YWJsZSAgICB7Ym9yZGVyOiA0cHggbm9uZTt9DQotYnV0dG9uICAge3BhZGRpbmc6IDNweCA1cHg7dGV4dC1hbGlnbjogY2VudGVyO3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7fQ0KLWJ1dHRvbix0ZXh0YXJlYSxpbnB1dCAgIHt2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Y29sb3I6YmxhY2s7Zm9udC1zdHlsZTpub25lO30NCi1zZWxlY3Qge3ZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTt9DQotaW5wdXRbdHlwZT1pbWFnZV0gIHt2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7fQ0KLWxpICAge21pbi1oZWlnaHQ6MS4yZW19DQotYnV0dG9uIHttaW4taGVpZ2h0OjEuOGVtfQ0KLWRpdix0cixmb3JtIHttaW4taGVpZ2h0OjEuMmVtfQ0KLXRhYmxlLHRkIHttaW4td2lkdGg6MS4yZW07bWluLWhlaWdodDoxLjJlbX0NCi0NCi0vKiBuZXN0ZWQgbGlzdHMgaGF2ZSBubyB0b3AvYm90dG9tIG1hcmdpbnMgKi8NCi11bCB1bCwgICB1bCBvbCwgICB1bCBkaXIsICAgdWwgbWVudSwgICB1bCBkbCwNCi1vbCB1bCwgICBvbCBvbCwgICBvbCBkaXIsICAgb2wgbWVudSwgICBvbCBkbCwNCi1kaXIgdWwsICBkaXIgb2wsICBkaXIgZGlyLCAgZGlyIG1lbnUsICBkaXIgZGwsDQotbWVudSB1bCwgbWVudSBvbCwgbWVudSBkaXIsIG1lbnUgbWVudSwgbWVudSBkbCwNCi1kbCB1bCwgICBkbCBvbCwgICBkbCBkaXIsICAgZGwgbWVudSwgICBkbCBkbCAJe21hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDA7fQ0KLQ0KLS8qIDIgZGVlcCB1bm9yZGVyZWQgbGlzdHMgdXNlIGEgY2lyY2xlICovDQotb2wgdWwsICAgdWwgdWwsICAgbWVudSB1bCwgICBkaXIgdWwsDQotb2wgbWVudSwgdWwgbWVudSwgbWVudSBtZW51LCBkaXIgbWVudSwNCi1vbCBkaXIsICB1bCBkaXIsICBtZW51IGRpciwgIGRpciBkaXIgCXtsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTt9DQotDQotLyogMyBkZWVwIChvciBtb3JlKSB1bm9yZGVyZWQgbGlzdHMgdXNlIGEgc3F1YXJlICovDQotb2wgb2wgdWwsICAgICBvbCB1bCB1bCwgICAgIG9sIG1lbnUgdWwsICAgICBvbCBkaXIgdWwsDQotb2wgb2wgbWVudSwgICBvbCB1bCBtZW51LCAgIG9sIG1lbnUgbWVudSwgICBvbCBkaXIgbWVudSwNCi1vbCBvbCBkaXIsICAgIG9sIHVsIGRpciwgICAgb2wgbWVudSBkaXIsICAgIG9sIGRpciBkaXIsDQotdWwgb2wgdWwsICAgICB1bCB1bCB1bCwgICAgIHVsIG1lbnUgdWwsICAgICB1bCBkaXIgdWwsDQotdWwgb2wgbWVudSwgICB1bCB1bCBtZW51LCAgIHVsIG1lbnUgbWVudSwgICB1bCBkaXIgbWVudSwNCi11bCBvbCBkaXIsICAgIHVsIHVsIGRpciwgICAgdWwgbWVudSBkaXIsICAgIHVsIGRpciBkaXIsDQotbWVudSBvbCB1bCwgICBtZW51IHVsIHVsLCAgIG1lbnUgbWVudSB1bCwgICBtZW51IGRpciB1bCwNCi1tZW51IG9sIG1lbnUsIG1lbnUgdWwgbWVudSwgbWVudSBtZW51IG1lbnUsIG1lbnUgZGlyIG1lbnUsDQotbWVudSBvbCBkaXIsICBtZW51IHVsIGRpciwgIG1lbnUgbWVudSBkaXIsICBtZW51IGRpciBkaXIsDQotZGlyIG9sIHVsLCAgICBkaXIgdWwgdWwsICAgIGRpciBtZW51IHVsLCAgICBkaXIgZGlyIHVsLA0KLWRpciBvbCBtZW51LCAgZGlyIHVsIG1lbnUsICBkaXIgbWVudSBtZW51LCAgZGlyIGRpciBtZW51LA0KLWRpciBvbCBkaXIsICAgZGlyIHVsIGRpciwgICBkaXIgbWVudSBkaXIsICAgZGlyIGRpciBkaXIgeyBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTt9DQotDQotLyoqDQotICogV2UgZG8gbm90IHdyaXRlIGNvZGVzIHRvIHN1cHBvcnQgc29tZSBlbGVtZW50cy4gVGhpcyBwYXJ0IGRlZmluZXMgcHJvcGVydGllcyBmb3IgdGhlbSANCi0gKiB0byBpbXByb3ZlIHRoZSBsb29rIG9mIHRoZXNlIGVsZW1lbnRzLg0KLSAqLw0KLWFwcGxldCB7Ym9yZGVyOiAxcHggc29saWQ7fQ0KLWZpZWxkc2V0IHtib3JkZXI6IDJweCBncm9vdmU7fQ0KLWFwcGxldCxpZnJhbWUge2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBib3JkZXI6M3B4IGluc2V0OyB9DQotb2JqZWN0IHtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXI6MHB4IG5vbmU7fQ0KLQ0KLQ0KLS8qIA0KLSAqIFNldHMgcmlnaHQgbWFyZ2luIHRvIGhhdmUgZ2FwIGJldHdlZW4gd2lkZ2V0cy4NCi0gKi8NCi1pbnB1dCx0ZXh0YXJlYSxidXR0b24JIHsgbWFyZ2luLXJpZ2h0OiAycHg7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYWMyZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1bMCwgM10gKEgxICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMywgOV0gKHsNCi0NCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzYsIA0KLVs5LCAyMV0gKGNvbG9yOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsyMSwgMjRdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzI0LCAyNV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyNSwgMzBdICgNCi0NCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNSwgDQotWzMwLCA1NF0gKGJhY2tncm91bmQtY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxOS0yNCwgDQotWzU0LCA1OV0gKA0KLQkNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC01LCANCi1bNTksIDYwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwLCA2Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTE1NTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotWzAsIDIzXSAoQGltcG9ydCB1cmwoImhvZ2UuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjMsIA0KLVsyMywgMjRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjQsIDI2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI2LCA2MV0gKEBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogOC0yMSwgQ29udGV4dFJlZ2lvbi0tPiBTOiAyMS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDIyLTM1LCANCi1bNjEsIDYyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzYyLCA2NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NCwgOTZdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzk2LCA5N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs5NywgOTldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTksIDE1NV0gKEBJTVBPUlQgJ2hvZ2UuY3NzJyAsbWVkaWExLG1lZGlhMiwsbWVkaWEzIG1lZGlhNCxtZWRpYTUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDE5LTIwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjAtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAyNi0yNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDI3LTMzLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMzMtMzQsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogMzQtMzUsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAzNS00MS80MiwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiA0Mi00OCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDQ4LTQ5LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNDktNTUvNTYsIA0KLVsxNTUsIDE2OV0gKEBpbXBvcnQgbWVkaWE2KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogOC0xNCwgDQotWzE2OSwgMTcwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzE3MCwgMjIxXSAoDQotDQotPCEtLSAvKiBob2dlaG9nZSAqLw0KLQ0KLS0tPg0KLQ0KLS8qIGNvbW1lbnQgMiAqLw0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIENvbnRleHRSZWdpb24tLT4gQ0RPOiA0LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA5LTIzLCBDb250ZXh0UmVnaW9uLS0+IFM6IDIzLTI3LCBDb250ZXh0UmVnaW9uLS0+IENEQzogMjctMzAvMzQsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMzQtNDksIENvbnRleHRSZWdpb24tLT4gUzogNDktNTEsIA0KLVsyMjEsIDIyN10gKGt1c28NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNiwgDQotDQotLS0tLS0tLQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMWRhZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotWzAsIDI5XSAoQGltcG9ydCB1cmwoIi4uL3NhbXBsZTIuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjksIA0KLVsyOSwgMzBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMzAsIDU3XSAoDQotDQotLyogU2FtcGxlIFN0eWxlcyAqLw0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogNC0yMywgQ29udGV4dFJlZ2lvbi0tPiBTOiAyMy0yNywgDQotWzU3LCA2Ml0gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVs2MiwgNjZdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bNjYsIDc5XSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzc5LCA4MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4MCwgODNdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzgzLCAxMjBdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKDE4MSwgMjUzLCAyMTEpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDE5LTIzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjMtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjgtMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMzMtMzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDM2LTM3LCANCi1bMTIwLCAxMjFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTIxLCAxMjRdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEyNCwgMTQzXSAodGV4dC1hbGlnbiA6IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0xOSwgDQotWzE0MywgMTQ0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE0NCwgMTQ3XSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVsxNDcsIDE4Nl0gKGZvbnQtZmFtaWx5IDogIkhlaXNlaSBNaW5jaG8gVzMiLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMyLTMzLzM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzNC0zOSwgDQotWzE4NiwgMTg4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE4OCwgMTg5XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE4OSwgMTkzXSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5MywgMjA1XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA1LCAyMDddICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMjA3LCAyMjRdIChtYXJnaW4tbGVmdCA6IDRjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTQtMTcsIA0KLVsyMjQsIDIyNV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMjI1LCAyMjZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjI2LCAyMzBdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjMwLCAyNDNdIChAbWVkaWEgYXVyYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsyNDMsIDI0N10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVsyNDcsIDI1NV0gKFAuaGVpZGkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzI1NSwgMjYwXSAoew0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyNjAsIDI4MV0gKGF6aW11dGggOiBjZW50ZXItbGVmdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTIxLCANCi1bMjgxLCAyODJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjgyLCAyODZdICgNCi0JCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyODYsIDMwNV0gKGVsZXZhdGlvbiA6IDEyLjNkZWcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMTksIA0KLVszMDUsIDMwNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszMDYsIDMxMF0gKA0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzMxMCwgMzI3XSAocGF1c2UgOiAzMG1zIDEuNnMpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTMtMTcsIA0KLVszMjcsIDMzMF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzMwLCAzMzFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzMxLCAzMzNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzMzLCAzMzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzM0LCAzMzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVkOTExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNDldIChAaW1wb3J0IHVybCgiaG9nZS5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yMywgDQotWzQ5LCA1MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs1MCwgNTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTIsIDg3XSAoQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcykpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA4LTIxLCBDb250ZXh0UmVnaW9uLS0+IFM6IDIxLTIyLCBDb250ZXh0UmVnaW9uLS0+IFVSSTogMjItMzUsIA0KLVs4NywgODhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bODgsIDkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkwLCAxMjJdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzEyMiwgMTIzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzEyMywgMTI1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNSwgMTY2XSAoQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTMpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAxOS0yNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDI1LTI2LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjYtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAzMy0zNC8zNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDM1LTQxLCANCi1bMTY2LCAxNjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTY3LCAxNzFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTcxLCAxODRdIChAbWVkaWEgcHJpbnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsxODQsIDE4OV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzE4OSwgMTkwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE5MCwgMTk0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5NCwgMjA2XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA2LCAyMTFdICh7DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyMTEsIDIxMl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyMTIsIDIxNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyMTYsIDIyN10gKGgxLCBoMiwgaDMgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAvMTEsIA0KLVsyMjcsIDIzMF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjMwLCAyNTNdIChmb250LWZhbWlseTogc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yMywgDQotWzI1MywgMjU1XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU1LCAyNTZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjU2LCAyNThdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU4LCAyNjRdIChoMSBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMy01LzYsIA0KLVsyNjQsIDI2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjY3LCAyNzhdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVsyNzgsIDI4MF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MCwgMjgxXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzI4MSwgMjgzXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MywgMjk3XSAoZGl2IHAgKltocmVmXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDctOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzI5NywgMzAwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVszMDAsIDMxMV0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzMxMSwgMzEzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzEzLCAzMTRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzE0LCAzMTZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzE2LCAzMjVdIChib2R5ID4gUCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzI1LCAzMjhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMyOCwgMzQ0XSAobGluZS1oZWlnaHQ6IDEuMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTYsIA0KLVszNDQsIDM0Nl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0NiwgMzQ3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM0NywgMzQ5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0OSwgMzYxXSAoZGl2IG9sPmxpIHAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDMtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogOS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEwLTExLzEyLCANCi1bMzYxLCAzNjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMzYzLCAzNjRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzY0LCAzNjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzY2LCAzNzVdIChtYXRoICsgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzc1LCAzNzhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzM3OCwgMzkyXSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMzkyLCAzOTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTQsIDM5NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszOTUsIDM5N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTcsIDQxMl0gKGgxLm9wZW5lciArIGgyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTQvMTUsIA0KLVs0MTIsIDQxNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDE1LCA0MzFdIChtYXJnaW4tdG9wOiAtNW1tKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xNiwgDQotWzQzMSwgNDMzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDMzLCA0MzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNDM0LCA0MzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDM2LCA0NDZdIChoMVt0aXRsZV0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAzLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogOC05LzEwLCANCi1bNDQ2LCA0NDldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ0OSwgNDYwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNDYwLCA0NjFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDYxLCA0NjNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0NjMsIDQ2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0NjQsIDQ2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0NjYsIDQ4Nl0gKHNwYW5bY2xhc3M9ZXhhbXBsZV0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxOC0xOS8yMCwgDQotWzQ4NiwgNDg5XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0ODksIDUwMF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzUwMCwgNTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwMSwgNTAzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTAzLCA1MDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNTA0LCA1MDZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTA2LCA1NTBdIChzcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDQtNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogNS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDEwLTExLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMTEtMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjItMjMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyMy0yNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMjQtMzEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAzMS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDMyLTQyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDQyLTQzLzQ0LCANCi1bNTUwLCA1NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzU1MywgNTY0XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTY0LCA1NjVdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY1LCA1NjddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1NjcsIDU2OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1NjgsIDU3MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1NzAsIDU5MF0gKGFbcmVsfj0iY29weXJpZ2h0Il0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA1LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNTkwLCA1OTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzU5MywgNjA0XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNjA0LCA2MDZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MDYsIDYwN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2MDcsIDYwOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MDksIDYzOF0gKGFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTI3LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI3LTI4LzI5LCANCi1bNjM4LCA2NDFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY0MSwgNjUyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNjUyLCA2NTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NTQsIDY1NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2NTUsIDY1N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NTcsIDY2OF0gKCpbbGFuZz1mcl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogOS0xMC8xMSwgDQotWzY2OCwgNjcxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs2NzEsIDY4NV0gKGRpc3BsYXkgOiBub25lKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMTQsIA0KLVs2ODUsIDY4N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY4NywgNjg4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY4OCwgNjkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY5MCwgNzA0XSAoKltsYW5nfD0iZW4iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDgtMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTItMTMvMTQsIA0KLVs3MDQsIDcwN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNzA3LCA3MThdIChjb2xvciA6IHJlZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMSwgDQotWzcxOCwgNzIwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNzIwLCA3MjFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNzIxLCA3MjNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNzIzLCA3NTBdIChESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogOC05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA5LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTgtMTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxOS0yNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyNC0yNS8yNywgDQotWzc1MCwgNzUzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3NTMsIDgwMF0gKHZvaWNlLWZhbWlseTogIkxhd3JlbmNlIE9saXZpZXIiLCBjaGFybGVzLCBtYWxlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDM0LTQxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0MS00Mi80MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDMtNDcsIA0KLVs4MDAsIDgwMl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzgwMiwgODAzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzgwMywgODA1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzgwNSwgODM3XSAoRElBTE9HVUVbIGNoYXJhY3RlciA9IGp1bGlldCBdDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAxMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMjItMjgvMjksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjktMzAvMzIsIA0KLVs4MzcsIDg0MF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bODQwLCA4ODZdICh2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0yOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjgtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDAtNDYsIA0KLVs4ODYsIDg4OF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzg4OCwgODg5XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzg4OSwgODkxXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzg5MSwgOTAyXSAoKi5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAvMTEsIA0KLVs5MDIsIDkwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTA1LCA5MTddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTE3LCA5MTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MTksIDkyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5MjAsIDkyMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MjIsIDkzMl0gKC5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtOS8xMCwgDQotWzkzMiwgOTM1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MzUsIDk0N10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5NDcsIDk0OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk0OSwgOTUwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzk1MCwgOTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk1MiwgOTY0XSAoSDEucGFzdG9yYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTExLzEyLCANCi1bOTY0LCA5NjddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzk2NywgOTc5XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk3OSwgOTgxXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTgxLCA5ODJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTgyLCA5ODRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTg0LCAxMDAyXSAocC5wYXN0b3JhbC5tYXJpbmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxMC0xNy8xOCwgDQotWzEwMDIsIDEwMDVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEwMDUsIDEwMTddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bMTAxNywgMTAxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMTksIDEwMjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTAyMCwgMTAyMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDIyLCAxMDM0XSAoaDEjY2hhcHRlcjEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0lEOiAyLTExLzEyLCANCi1bMTAzNCwgMTAzN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAzNywgMTA1NV0gKHRleHQtYWxpZ246IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMi0xOCwgDQotWzEwNTUsIDEwNTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDU3LCAxMDU4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEwNTgsIDEwNjBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTA2MCwgMTA4MF0gKGRpdiA+IHA6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTE5LzIwLCANCi1bMTA4MCwgMTA4M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTA4MywgMTA5N10gKHRleHQtaW5kZW50OiAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNCwgDQotWzEwOTcsIDEwOTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDk5LCAxMTAwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExMDAsIDExMDJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTEwMiwgMTExOV0gKHA6Zmlyc3QtY2hpbGQgZW0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMy0xNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDE0LTE2LzE3LCANCi1bMTExOSwgMTEyMl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTEyMiwgMTE0MF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExNDAsIDExNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQyLCAxMTQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExNDMsIDExNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0NSwgMTE2M10gKCogPiBhOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMS8yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDItMy80LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNS0xNy8xOCwgDQotWzExNjMsIDExNjZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzExNjYsIDExODRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMTg0LCAxMTg2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4NiwgMTE4N10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMTg3LCAxMTg5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExODksIDEyMDNdIChhOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTMvMTQsIA0KLVsxMjAzLCAxMjA2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjA2LCAxMjI0XSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTIyNCwgMTIyNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjYsIDEyMjddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTIyNywgMTIyOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjI5LCAxMjQ4XSAoYS5leHRlcm5hbDp2aXNpdGVkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEwLTE4LzE5LCANCi1bMTI0OCwgMTI1MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI1MSwgMTI2Ml0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzEyNjIsIDEyNjRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY0LCAxMjY1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyNjUsIDEyNjddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI2NywgMTI4MV0gKGE6Zm9jdXM6aG92ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNy0xMy8xNCwgDQotWzEyODEsIDEyODRdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyODQsIDEzMDFdIChiYWNrZ3JvdW5kOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMi0xNywgDQotWzEzMDEsIDEzMDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzAzLCAxMzA0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzMDQsIDEzMDZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTMwNiwgMTMyMF0gKGh0bWw6bGFuZyhmcikgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzMjAsIDEzMjNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzMjMsIDEzNDBdIChxdW90ZXM6ICc8PCcgJz4+JykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTMtMTcsIA0KLVsxMzQwLCAxMzQyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0MiwgMTM0M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzQzLCAxMzQ1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzNDUsIDEzNTldIChodG1sOmxhbmcoZGUpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDQtMTMvMTQsIA0KLVsxMzU5LCAxMzYyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMzYyLCAxMzk1XSAocXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE4LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtMzMsIA0KLVsxMzk1LCAxMzk3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM5NywgMTM5OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzk4LCAxNDAwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MDAsIDE0MTRdICg6bGFuZyhmcikgPiBRICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTEzLzE0LCANCi1bMTQxNCwgMTQxN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTQxNywgMTQzNF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzE0MzQsIDE0MzZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM2LCAxNDM3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0MzcsIDE0MzldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQzOSwgMTQ1M10gKDpsYW5nKGRlKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDUzLCAxNDU2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDU2LCAxNDg5XSAocXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE4LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtMzMsIA0KLVsxNDg5LCAxNDkxXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5MSwgMTQ5Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNDkyLCAxNDk0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0OTQsIDE1MDldIChwOmZpcnN0LWxldHRlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTE0LzE1LCANCi1bMTUwOSwgMTUxMl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTUxMiwgMTUyNl0gKGZvbnQtc2l6ZTogM2VtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTEtMTQsIA0KLVsxNTI2LCAxNTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE1MjcsIDE1MjhdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE1MjgsIDE1NDddIChmb250LXdlaWdodDogbm9ybWFsKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTE5LCANCi1bMTU0NywgMTU0OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NDksIDE1NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU1MCwgMTU1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNTUyLCAxNTY5XSAocC5zcGVjaWFsOmJlZm9yZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDktMTYvMTcsIA0KLVsxNTY5LCAxNTcxXSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE1NzEsIDE1OTFdIChjb250ZW50OiAiU3BlY2lhbCEgIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTIwLCANCi1bMTU5MSwgMTU5Ml0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTU5MiwgMTU5M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTkzLCAxNTk1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1OTUsIDE2MThdIChwLnNwZWNpYWw6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0yMi8yMywgDQotWzE2MTgsIDE2MjBdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTYyMCwgMTYzNF0gKGNvbG9yOiAjZmZkODAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTYzNCwgMTYzNV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTYzNSwgMTYzNl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNjM2LCAxNjM4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE2MzgsIDE2NDNdIChCT0RZICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCANCi1bMTY0MywgMTY0NV0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjQ1LCAxNzAzXSAoZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjQtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi00MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogNDMtNDQvNDUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDQ1LTUxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1MS01Mi81MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNTMtNTgsIA0KLVsxNzAzLCAxNzA0XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNzA0LCAxNzA1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3MDUsIDE3MDddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTcwNywgMTcyMV0gKCo6bGFuZyhqYS1qcCkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzE3MjEsIDE3MjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTcyMywgMTc2OF0gKGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiA2LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMC0xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTQtMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNS0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDIwLTM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDAtNDUsIA0KLVsxNzY4LCAxNzY5XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNzY5LCAxNzcwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NzAsIDE3NzJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTc3MiwgMTc4Nl0gKCo6bGFuZyh6aC10dykgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzE3ODYsIDE3ODhdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTc4OCwgMTgyNl0gKGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMy0zOCwgDQotWzE4MjYsIDE4MjddICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE4MjcsIDE4MjhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTgyOCwgMTgzMF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWQ5MTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLVswLCAyMV0gKEBjaGFyc2V0ICJJU08tODg1OS0xIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDSEFSU0VUOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDktMjEsIA0KLVsyMSwgMjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjIsIDI2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI2LCA0OV0gKEBpbXBvcnQgdXJsKCJob2dlLmNzcyIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVVJJOiA4LTIzLCANCi1bNDksIDUwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzUwLCA1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MiwgODddIChAaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDgtMjEsIENvbnRleHRSZWdpb24tLT4gUzogMjEtMjIsIENvbnRleHRSZWdpb24tLT4gVVJJOiAyMi0zNSwgDQotWzg3LCA4OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs4OCwgOTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTAsIDEyMl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDE5LTMyLCANCi1bMTIyLCAxMjNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTIzLCAxMjVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI1LCAxNjZdIChASU1QT1JUICdob2dlLmNzcycgbWVkaWExLG1lZGlhMiAsIG1lZGlhMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDE5LTI1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMjUtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAyNi0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDMzLTM0LzM1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMzUtNDEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzEsIDE4NF0gKEBtZWRpYSBwcmludCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzE4NCwgMTg5XSAoew0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS81LCANCi1bMTg5LCAxOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTkwLCAxOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTk0LCAyMDZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsyMDYsIDIxMV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzIxMSwgMjEyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzIxMiwgMjE2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzIxNiwgMjI3XSAoaDEsIGgyLCBoMyApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAyLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogOC0xMC8xMSwgDQotWzIyNywgMjMwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyMzAsIDI1M10gKGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTIzLCANCi1bMjUzLCAyNTVdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTUsIDI1Nl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyNTYsIDI1OF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTgsIDI2NF0gKGgxIGVtICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAzLTUvNiwgDQotWzI2NCwgMjY3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyNjcsIDI3OF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzI3OCwgMjgwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgwLCAyODFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjgxLCAyODNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgzLCAyOTddIChkaXYgcCAqW2hyZWZdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAzLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNS02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNy04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA4LTEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDEyLTEzLzE0LCANCi1bMjk3LCAzMDBdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMwMCwgMzExXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMzExLCAzMTNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTMsIDMxNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMTQsIDMxNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTYsIDMyNV0gKGJvZHkgPiBQICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszMjUsIDMyOF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzI4LCAzNDRdIChsaW5lLWhlaWdodDogMS4zKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNiwgDQotWzM0NCwgMzQ2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ2LCAzNDddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzQ3LCAzNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ5LCAzNjFdIChkaXYgb2w+bGkgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA5LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTAtMTEvMTIsIA0KLVszNjEsIDM2M10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVszNjMsIDM2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszNjQsIDM2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszNjYsIDM3NV0gKG1hdGggKyBwICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszNzUsIDM3OF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzc4LCAzOTJdICh0ZXh0LWluZGVudDogMCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTQsIA0KLVszOTIsIDM5NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NCwgMzk1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM5NSwgMzk3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NywgNDEyXSAoaDEub3BlbmVyICsgaDIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xNC8xNSwgDQotWzQxMiwgNDE1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0MTUsIDQzMV0gKG1hcmdpbi10b3A6IC01bW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE2LCANCi1bNDMxLCA0MzNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzMsIDQzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0MzQsIDQzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzYsIDQ0Nl0gKGgxW3RpdGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDMtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA4LTkvMTAsIA0KLVs0NDYsIDQ0OV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDQ5LCA0NjBdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs0NjAsIDQ2MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NjEsIDQ2M10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2MywgNDY0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzQ2NCwgNDY2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2NiwgNDg2XSAoc3BhbltjbGFzcz1leGFtcGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDUtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDExLTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNDg2LCA0ODldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ4OSwgNTAwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTAwLCA1MDFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTAxLCA1MDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDMsIDUwNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1MDQsIDUwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDYsIDU1MF0gKHNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyMi0yMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDIzLTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyNC0zMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDMxLTMyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMzItNDIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogNDItNDMvNDQsIA0KLVs1NTAsIDU1M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTUzLCA1NjRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs1NjQsIDU2NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1NjUsIDU2N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU2NywgNTY4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzU2OCwgNTcwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU3MCwgNTkwXSAoYVtyZWx+PSJjb3B5cmlnaHQiXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDUtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTgtMTkvMjAsIA0KLVs1OTAsIDU5M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTkzLCA2MDRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2MDQsIDYwNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwNiwgNjA3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwNywgNjA5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwOSwgNjM4XSAoYVtocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMjcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjctMjgvMjksIA0KLVs2MzgsIDY0MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNjQxLCA2NTJdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2NTIsIDY1NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NCwgNjU1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY1NSwgNjU3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NywgNjY4XSAoKltsYW5nPWZyXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA5LTEwLzExLCANCi1bNjY4LCA2NzFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY3MSwgNjg1XSAoZGlzcGxheSA6IG5vbmUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMC0xNCwgDQotWzY4NSwgNjg3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjg3LCA2ODhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjg4LCA2OTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjkwLCA3MDRdICgqW2xhbmd8PSJlbiJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNi04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzcwNCwgNzA3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3MDcsIDcxOF0gKGNvbG9yIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTExLCANCi1bNzE4LCA3MjBdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjAsIDcyMV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3MjEsIDcyM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjMsIDc1MF0gKERJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDktMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxOC0xOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDE5LTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI0LTI1LzI3LCANCi1bNzUwLCA3NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzc1MywgODAwXSAodm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTMyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMi0zMy8zNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzQtNDEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDQxLTQyLzQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0My00NywgDQotWzgwMCwgODAyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODAyLCA4MDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODAzLCA4MDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODA1LCA4MzddIChESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDEwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAyMi0yOC8yOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyOS0zMC8zMiwgDQotWzgzNywgODQwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs4NDAsIDg4Nl0gKHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NiwgDQotWzg4NiwgODg4XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODg4LCA4ODldICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODg5LCA4OTFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODkxLCA5MDJdICgqLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMC8xMSwgDQotWzkwMiwgOTA1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MDUsIDkxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5MTcsIDkxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkxOSwgOTIwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzkyMCwgOTIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkyMiwgOTMyXSAoLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC05LzEwLCANCi1bOTMyLCA5MzVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzkzNSwgOTQ3XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk0NywgOTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTQ5LCA5NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTUwLCA5NTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTUyLCA5NjRdIChIMS5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDItMTEvMTIsIA0KLVs5NjQsIDk2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTY3LCA5NzldIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTc5LCA5ODFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODEsIDk4Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5ODIsIDk4NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODQsIDEwMDJdIChwLnBhc3RvcmFsLm1hcmluZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEwLTE3LzE4LCANCi1bMTAwMiwgMTAwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAwNSwgMTAxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsxMDE3LCAxMDE5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTAxOSwgMTAyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMDIwLCAxMDIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMjIsIDEwMzRdIChoMSNjaGFwdGVyMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfSUQ6IDItMTEvMTIsIA0KLVsxMDM0LCAxMDM3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDM3LCAxMDU1XSAodGV4dC1hbGlnbjogY2VudGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE4LCANCi1bMTA1NSwgMTA1N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwNTcsIDEwNThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTA1OCwgMTA2MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDYwLCAxMDgwXSAoZGl2ID4gcDpmaXJzdC1jaGlsZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDctMTkvMjAsIA0KLVsxMDgwLCAxMDgzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDgzLCAxMDk3XSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMTA5NywgMTA5OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwOTksIDExMDBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTEwMCwgMTEwMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTAyLCAxMTE5XSAocDpmaXJzdC1jaGlsZCBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEzLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTQtMTYvMTcsIA0KLVsxMTE5LCAxMTIyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMTIyLCAxMTQwXSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTE0MCwgMTE0Ml0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNDIsIDExNDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE0MywgMTE0NV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQ1LCAxMTYzXSAoKiA+IGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLzIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA1LTE3LzE4LCANCi1bMTE2MywgMTE2Nl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTE2NiwgMTE4NF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExODQsIDExODZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTg2LCAxMTg3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExODcsIDExODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4OSwgMTIwM10gKGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzEyMDMsIDEyMDZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyMDYsIDEyMjRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMjI0LCAxMjI2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTIyNiwgMTIyN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjI3LCAxMjI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjksIDEyNDhdIChhLmV4dGVybmFsOnZpc2l0ZWQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMTAtMTgvMTksIA0KLVsxMjQ4LCAxMjUxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjUxLCAxMjYyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMTI2MiwgMTI2NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNjQsIDEyNjVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTI2NSwgMTI2N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY3LCAxMjgxXSAoYTpmb2N1czpob3ZlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTEzLzE0LCANCi1bMTI4MSwgMTI4NF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI4NCwgMTMwMV0gKGJhY2tncm91bmQ6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE3LCANCi1bMTMwMSwgMTMwM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzMDMsIDEzMDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTMwNCwgMTMwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzA2LCAxMzIwXSAoaHRtbDpsYW5nKGZyKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA0LTEzLzE0LCANCi1bMTMyMCwgMTMyM10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTMyMywgMTM0MF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzEzNDAsIDEzNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzQyLCAxMzQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzNDMsIDEzNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0NSwgMTM1OV0gKGh0bWw6bGFuZyhkZSkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzNTksIDEzNjJdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzNjIsIDEzOTVdIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzEzOTUsIDEzOTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzk3LCAxMzk4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzOTgsIDE0MDBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQwMCwgMTQxNF0gKDpsYW5nKGZyKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDE0LCAxNDE3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDE3LCAxNDM0XSAocXVvdGVzOiAnPDwnICc+PicpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LCANCi1bMTQzNCwgMTQzNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MzYsIDE0MzddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTQzNywgMTQzOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM5LCAxNDUzXSAoOmxhbmcoZGUpID4gUSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xMy8xNCwgDQotWzE0NTMsIDE0NTZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzE0NTYsIDE0ODldIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzE0ODksIDE0OTFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDkxLCAxNDkyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0OTIsIDE0OTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5NCwgMTUwOV0gKHA6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTQvMTUsIA0KLVsxNTA5LCAxNTEyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNTEyLCAxNTI2XSAoZm9udC1zaXplOiAzZW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDktMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMS0xNCwgDQotWzE1MjYsIDE1MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyNywgMTUyOF0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTUyOCwgMTU0N10gKGZvbnQtd2VpZ2h0OiBub3JtYWwpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxNTQ3LCAxNTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU0OSwgMTU1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTUwLCAxNTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NTIsIDE1NjldIChwLnNwZWNpYWw6YmVmb3JlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0xNi8xNywgDQotWzE1NjksIDE1NzFdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTU3MSwgMTU5MV0gKGNvbnRlbnQ6ICJTcGVjaWFsISAiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDktMjAsIA0KLVsxNTkxLCAxNTkyXSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNTkyLCAxNTkzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE1OTMsIDE1OTVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU5NSwgMTYxOF0gKHAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA5LTIyLzIzLCANCi1bMTYxOCwgMTYyMF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjIwLCAxNjM0XSAoY29sb3I6ICNmZmQ4MDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0g6IDctMTQsIA0KLVsxNjM0LCAxNjM1XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNjM1LCAxNjM2XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE2MzYsIDE2MzhdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTYzOCwgMTY0M10gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVsxNjQzLCAxNjQ1XSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE2NDUsIDE3MDNdIChmb250LWZhbWlseTogQmFza2VydmlsbGUsICJIZWlzaSBNaW5jaG8gVzMiLCBTeW1ib2wsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDI2LTQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0My00NC80NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDUtNTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDUxLTUyLzUzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA1My01OCwgDQotWzE3MDMsIDE3MDRdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3MDQsIDE3MDVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTcwNSwgMTcwN10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzA3LCAxNzIxXSAoKjpsYW5nKGphLWpwKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTcyMSwgMTcyM10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzIzLCAxNzY4XSAoZm9udDogOTAwIDE0cHQvMTZwdCAiSGVpc2VpIE1pbmNobyBXOSIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NSwgDQotWzE3NjgsIDE3NjldICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3NjksIDE3NzBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3MCwgMTc3Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzcyLCAxNzg2XSAoKjpsYW5nKHpoLXR3KSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTc4NiwgMTc4OF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzg4LCAxODI2XSAoZm9udDogODAwIDE0cHQvMTYuNXB0ICJMaSBTdW5nIiwgc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogNi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTAtMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE0LTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMzLTM4LCANCi1bMTgyNiwgMTgyN10gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTgyNywgMTgyOF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxODI4LCAxODMwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzdjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1bMCwgMTJdIChkZWNsYXJhdGlvbiApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTExLzEyLCANCi1bMTIsIDE2XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzE2LCAzM10gKGRpbWVuc2lvbiA6IDEwMGV4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE3LCANCi1bMzMsIDM0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM0LCAzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzcsIDEzM10gKGZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiAxMS0xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIxLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI2LTI5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOS0zMC8zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDMxLTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzNC0zNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzUtMzYvMzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDM3LTQ0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogNDQtNTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDU3LTU4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1OC01OS82MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNjAtNjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA2Ni05NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogOTUtOTYsIA0KLVsxMzMsIDEzNF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMzQsIDEzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTM3LCAxNTFdIChoYXNoIDogI2FhYmJjYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTUxLCAxNTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyLCAxNTVdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzE1NSwgMTY2XSAoaWRlbnQgOiBhbnkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDgtMTEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTcwLCAxODRdIChudW1iZXIgOiA5OTk5OSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDktMTQsIA0KLVsxODQsIDE4NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxODUsIDE4OF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTg4LCAyMDVdIChwZXJjZW50YWdlIDogMTAwJSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0U6IDEzLTE3LCANCi1bMjA1LCAyMDZdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjA2LCAyMDldICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIwOSwgMjI2XSAoc3RyaW5nIDogInN0cmluZyIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTE3LCANCi1bMjI2LCAyMjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjI3LCAyMzBdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIzMCwgMjY4XSAodW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz8pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAxNi0yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDMzLTM4LCANCi1bMjY4LCAyNjldICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjY5LCAyNzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjcxLCAyNzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjcyLCAyNzRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4NzlhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNzBdIChAaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0dikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDMwLTQwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogNDAtNDEvNDIsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA0Mi00NCwgDQotWzcwLCA3MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs3MSwgNzVdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNzUsIDgwXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzgwLCA4N10gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVs4NywgMTAwXSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzEwMCwgMTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwMSwgMTA3XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxMDcsIDEyNl0gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxMjYsIDEyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjcsIDEzM10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTMzLCAxNzJdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKCAxODEsIDI1MywgMjExICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTktMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNy8zOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzgtMzksIA0KLVsxNzIsIDE3NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzQsIDE3NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzUsIDE3OV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzksIDE4Ml0gKFVMICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMTgyLCAxODldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTg5LCAyMDJdIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bMjAyLCAyMDNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjAzLCAyMDldICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzIwOSwgMjUxXSAobGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxOS00MiwgDQotWzI1MSwgMjUyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzI1MiwgMjU4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsyNTgsIDI4N10gKGxpc3Qtc3R5bGUtcG9zaXRpb24gOiBvdXRzaWRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIyLTI5LCANCi1bMjg3LCAyODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjg5LCAyOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjkwLCAyOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjk0LCAyOTddIChIMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgDQotWzI5NywgMzA0XSAoew0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgDQotWzMwNCwgMzE3XSAoY29sb3IgOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzMxNywgMzE4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzMxOCwgMzI0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszMjQsIDM0M10gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVszNDMsIDM0NF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszNDQsIDM1MF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMzUwLCAzNzddIChib3JkZXItbGVmdC1jb2xvciA6ICM5OTY2NjYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiAyMC0yNywgDQotWzM3NywgMzc4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM3OCwgMzg0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszODQsIDQwMV0gKHBhZGRpbmctdG9wIDogMHB4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzQwMSwgNDAyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQwMiwgNDA4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0MDgsIDQyN10gKHBhZGRpbmctcmlnaHQgOiAxY20pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCANCi1bNDI3LCA0MjhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDI4LCA0MzRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzQzNCwgNDUyXSAocGFkZGluZy1ib3R0b20gOiAyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTUtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNy0xOCwgDQotWzQ1MiwgNDUzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQ1MywgNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0NTksIDQ3N10gKHBhZGRpbmctbGVmdCA6IDNlbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMTgsIA0KLVs0NzcsIDQ3OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NzgsIDQ4NF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNDg0LCA1MDRdIChib3JkZXItc3R5bGUgOiBzb2xpZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0yMCwgDQotWzUwNCwgNTA1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwNSwgNTExXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs1MTEsIDUzNV0gKGJvcmRlci10b3Atd2lkdGggOiA0LjVleCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTktMjQsIA0KLVs1MzUsIDUzNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1MzYsIDU0Ml0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNTQyLCA1NjZdIChib3JkZXItcmlnaHQtd2lkdGggOiA1aW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDIxLTI0LCANCi1bNTY2LCA1NjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY3LCA1NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzU3MywgNjAxXSAoYm9yZGVyLWJvdHRvbS13aWR0aCA6IDYuMDJtbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMjItMjgsIA0KLVs2MDEsIDYwMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs2MDIsIDYwOF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNjA4LCA2MjldIChib3JkZXItbGVmdC13aWR0aCA6IDcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIwLTIxLCANCi1bNjI5LCA2MzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjMxLCA2MzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjMyLCA2MzZdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNjM2LCA2NDZdIChIMTpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMi05LzEwLCANCi1bNjQ2LCA2NTNdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bNjUzLCA2OTddIChjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMC0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMjEtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM3LzM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDQwLTQ0LCANCi1bNjk3LCA2OThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNjk4LCA3MDRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzcwNCwgNzMxXSAoY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTgtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIwLTI3LCANCi1bNzMxLCA3MzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNzMyLCA3MzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzczOCwgNzYxXSAoY291bnRlci1yZXNldCA6IHNlY3Rpb24pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTYtMjMsIA0KLVs3NjEsIDc2M10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3NjMsIDc2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3NjQsIDc2OF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs3NjgsIDc3OV0gKElNRzpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMy0xMC8xMSwgDQotWzc3OSwgNzgwXSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzc4MCwgNzk5XSAoY29udGVudCA6IGF0dHIoYWx0KSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDEwLTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMTgtMTksIA0KLVs3OTksIDgwMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs4MDAsIDgwNF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs4MDQsIDgxNV0gKERJVi5zYW1wbGUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAzLTEwLzExLCANCi1bODE1LCA4MjJdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bODIyLCA4NjNdIChmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI5LTMwLzMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMS00MSwgDQotWzg2MywgODY0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzg2NCwgODcwXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs4NzAsIDg4OV0gKHBvc2l0aW9uIDogYWJzb2x1dGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOS0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTEtMTksIA0KLVs4ODksIDg5MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4OTAsIDg5Nl0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bODk2LCA5MTBdIChsZWZ0IDogODMzLjVwYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDctMTQsIA0KLVs5MTAsIDkxMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5MTEsIDkxN10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTE3LCA5MjZdICh0b3AgOiA5MCUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMy80LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRTogNi05LCANCi1bOTI2LCA5MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTI3LCA5MzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzkzMywgOTQ2XSAod2lkdGggOiAxMDBwdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTMsIA0KLVs5NDYsIDk0N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5NDcsIDk1M10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTUzLCA5NzFdIChoZWlnaHQgOiAxMTAuNzc3cHgpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA5LTE4LCANCi1bOTcxLCA5NzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTcyLCA5NzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzk3OCwgMTAxNV0gKGNsaXAgOiByZWN0KCAtNXB4LCA4MHB4LCAxMzBweCwgMHB4ICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDctMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxOS0yMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjMtMjQvMjUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAyNS0zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzAtMzEvMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAzMi0zNS8zNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzYtMzcsIA0KLVsxMDE1LCAxMDE3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMTcsIDEwMThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTAxOCwgMTAyMl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxMDIyLCAxMDMzXSAoQGZvbnQtZmFjZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gRk9OVF9GQUNFOiAwLTEwLzExLCANCi1bMTAzMywgMTA0MF0gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVsxMDQwLCAxMDY1XSAoZm9udC1mYW1pbHkgOiAiU3dpc3MgNzIxIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjUsIA0KLVsxMDY1LCAxMDY2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwNjYsIDEwNzJdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEwNzIsIDExNThdIChzcmMgOiB1cmwoInN3aXNzNzIxdC5wZnIiKSBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VUkk6IDYtMjYvMjcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDI3LTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMzQtNDcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDQ3LTQ4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0OC00OS81MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNTAtNTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA1Ni04NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogODUtODYsIA0KLVsxMTU4LCAxMTU5XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzExNTksIDExNjVdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzExNjUsIDEyMDNdICh1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDE2LTIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyMC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMzMtMzgsIA0KLVsxMjAzLCAxMjA0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyMDQsIDEyMTBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEyMTAsIDEyNDddIChmb250LXdlaWdodCA6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNC0xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxOS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjItMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNywgDQotWzEyNDcsIDEyNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI0OSwgMTI1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjUwLCAxMjU0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzEyNTQsIDEyNjZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsxMjY2LCAxMjY3XSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzEyNjcsIDEyODRdIChtYXJnaW4tbGVmdCA6IDRjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTQtMTcsIA0KLVsxMjg0LCAxMjg1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyODUsIDEyODldICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTI4OSwgMTMwMl0gKEBtZWRpYSBhdXJhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzEzMDIsIDEzMDldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTMwOSwgMTMzMl0gKEgxLCBIMiwgSDMsIEg0LCBINSwgSDYgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMTQtMTUvMTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxNi0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDE4LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMjAtMjIvMjMsIA0KLVsxMzMyLCAxMzQzXSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTM0MywgMTM2OV0gKHZvaWNlLWZhbWlseSA6IHBhdWwsIGNoaWxkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIA0KLVsxMzY5LCAxMzcwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEzNzAsIDEzODBdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTM4MCwgMTM5MV0gKHN0cmVzcyA6IDIwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDctOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogOS0xMSwgDQotWzEzOTEsIDEzOTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTM5MiwgMTQwMl0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNDAyLCAxNDE1XSAocmljaG5lc3MgOiA5MCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTEtMTMsIA0KLVsxNDE1LCAxNDE2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE0MTYsIDE0MjZdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTQyNiwgMTQ1M10gKGN1ZS1iZWZvcmUgOiB1cmwoInBpbmcuYXUiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VSSTogMTMtMjcsIA0KLVsxNDUzLCAxNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxNDU5LCAxNDYwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0NjAsIDE0NjZdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE0NjYsIDE0NzRdIChQLmhlaWRpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS03LzgsIA0KLVsxNDc0LCAxNDg1XSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTQ4NSwgMTUwNl0gKGF6aW11dGggOiBjZW50ZXItbGVmdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTIxLCANCi1bMTUwNiwgMTUwN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTA3LCAxNTE3XSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE1MTcsIDE1MzZdIChlbGV2YXRpb24gOiAxMi4zZGVnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE5LCANCi1bMTUzNiwgMTUzN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTM3LCAxNTQ3XSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE1NDcsIDE1NjRdIChwYXVzZSA6IDMwbXMgMS42cykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgDQotWzE1NjQsIDE1NzBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE1NzAsIDE1NzFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU3MSwgMTU3N10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTU3NywgMTU4NV0gKFAucGV0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzE1ODUsIDE1OTZdICh7DQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMTEsIA0KLVsxNTk2LCAxNjExXSAoYXppbXV0aCA6IHJpZ2h0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMTUsIA0KLVsxNjExLCAxNjEyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE2MTIsIDE2MjJdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTYyMiwgMTY0Ml0gKGVsZXZhdGlvbiA6IC0wLjM2cmFkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTIwLCANCi1bMTY0MiwgMTY0M10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjQzLCAxNjUzXSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE2NTMsIDE2NjZdIChwaXRjaCA6IDIxMEh6KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xMywgDQotWzE2NjYsIDE2NzJdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE2NzIsIDE2NzNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTY3MywgMTY3OV0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTY3OSwgMTY4Nl0gKFAuZ29hdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtNi83LCANCi1bMTY4NiwgMTY5N10gKHsNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8xMSwgDQotWzE2OTcsIDE3MTJdICh2b2x1bWUgOiB4LXNvZnQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDktMTUsIA0KLVsxNzEyLCAxNzEzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE3MTMsIDE3MjNdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTcyMywgMTc0MV0gKGVsZXZhdGlvbiA6IDY2Z3JhZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xOCwgDQotWzE3NDEsIDE3NDJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTc0MiwgMTc1Ml0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNzUyLCAxNzY3XSAocGl0Y2ggOiAwLjE3a0h6KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xNSwgDQotWzE3NjcsIDE3NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE3NzMsIDE3NzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3NCwgMTc3Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzc2LCAxNzc3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NzcsIDE3ODFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwOC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkYzlhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLVswLCAxOF0gKGEubmV3V2luZG93IC8qICovICkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDEyLTE3LCBDb250ZXh0UmVnaW9uLS0+IFM6IDE3LTE4LCAKLVsxOCwgMjVdICh7Ci0gICAgKQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgCi1bMjUsIDc3XSAoYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy90ZXN0LnBuZykgIWltcG9ydGFudCkKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTYtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxOC00MS80MiwgQ29udGV4dFJlZ2lvbi0tPiBDU1NfREVDTEFSQVRJT05fVkFMVUVfSU1QT1JUQU5UOiA0Mi01MiwgCi1bNzcsIDc4XSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVs3OCwgODBdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi1bODAsIDgxXSAofSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCAKLVs4MSwgODNdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAzYTQzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDAsIDINCi1bIF0gUyAtIDIsIDENCi1be10gTEJSQUNFIC0gMywgMQ0KLVsNCi0NCi0JXSBTIC0gNCwgNQ0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0LCAxDQotWyBdIFMgLSAxNSwgMQ0KLVt3aGl0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNiwgNQ0KLVsNCi0JXSBTIC0gMjEsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjQsIDENCi1bDQotDQotCV0gUyAtIDI1LCA1DQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAsIDE2DQotWyBdIFMgLSA0NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NywgMQ0KLVsgXSBTIC0gNDgsIDENCi1bYmxhY2tdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDksIDUNCi1bDQotCQ0KLV0gUyAtIDU0LCA1DQotW31dIFJCUkFDRSAtIDU5LCAxDQotWw0KLV0gUyAtIDYwLCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmNjA0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1bQGltcG9ydF0gSU1QT1JUIC0gMCwgNw0KLVsgXSBTIC0gNywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDgsIDE1DQotWztdIERFTElNSVRFUiAtIDIzLCAxDQotWw0KLV0gUyAtIDI0LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMzQsIDEzDQotWyBdIFMgLSA0NywgMQ0KLVt1cmwoaG9nZS5jc3MpXSBVUkkgLSA0OCwgMTMNCi1bO10gREVMSU1JVEVSIC0gNjEsIDENCi1bDQotXSBTIC0gNjIsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gNjQsIDcNCi1bIF0gUyAtIDcxLCAxDQotWyJob2dlLmNzcyJdIFNUUklORyAtIDcyLCAxMA0KLVsgXSBTIC0gODIsIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDgzLCAxMw0KLVs7XSBERUxJTUlURVIgLSA5NiwgMQ0KLVsNCi1dIFMgLSA5NywgMg0KLVtASU1QT1JUXSBJTVBPUlQgLSA5OSwgNw0KLVsgXSBTIC0gMTA2LCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEwNywgMTANCi1bIF0gUyAtIDExNywgMQ0KLVssXSB1bmRlZmluZWQgLSAxMTgsIDENCi1bbWVkaWExXSBNRURJVU0gLSAxMTksIDYNCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTI1LCAxDQotW21lZGlhMl0gTUVESVVNIC0gMTI2LCA2DQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDEzMiwgMQ0KLVssXSB1bmRlZmluZWQgLSAxMzMsIDENCi1bbWVkaWEzXSBNRURJVU0gLSAxMzQsIDYNCi1bIF0gUyAtIDE0MCwgMQ0KLVttXSB1bmRlZmluZWQgLSAxNDEsIDENCi1bZV0gdW5kZWZpbmVkIC0gMTQyLCAxDQotW2RdIHVuZGVmaW5lZCAtIDE0MywgMQ0KLVtpXSB1bmRlZmluZWQgLSAxNDQsIDENCi1bYV0gdW5kZWZpbmVkIC0gMTQ1LCAxDQotWzRdIHVuZGVmaW5lZCAtIDE0NiwgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNDcsIDENCi1bbWVkaWE1XSBNRURJVU0gLSAxNDgsIDYNCi1bIF0gUyAtIDE1NCwgMQ0KLVtAaW1wb3J0XSBJTVBPUlQgLSAxNTUsIDcNCi1bIF0gUyAtIDE2MiwgMQ0KLVttXSB1bmRlZmluZWQgLSAxNjMsIDENCi1bZV0gdW5kZWZpbmVkIC0gMTY0LCAxDQotW2RdIHVuZGVmaW5lZCAtIDE2NSwgMQ0KLVtpXSB1bmRlZmluZWQgLSAxNjYsIDENCi1bYV0gdW5kZWZpbmVkIC0gMTY3LCAxDQotWzZdIHVuZGVmaW5lZCAtIDE2OCwgMQ0KLVs7XSBERUxJTUlURVIgLSAxNjksIDENCi1bDQotDQotXSBTIC0gMTcwLCA0DQotWzwhLS1dIENETyAtIDE3NCwgNA0KLVsgXSBTIC0gMTc4LCAxDQotWy8qIGhvZ2Vob2dlICovXSBDT01NRU5UIC0gMTc5LCAxNA0KLVsNCi0NCi1dIFMgLSAxOTMsIDQNCi1bLS0+XSBDREMgLSAxOTcsIDMNCi1bDQotDQotXSBTIC0gMjAwLCA0DQotWy8qIGNvbW1lbnQgMiAqL10gQ09NTUVOVCAtIDIwNCwgMTUNCi1bDQotXSBTIC0gMjE5LCAyDQotW2t1c29dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMSwgNA0KLVsNCi1dIFMgLSAyMjUsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTNlMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1bQGltcG9ydF0gSU1QT1JUIC0gMCwgNw0KLVsgXSBTIC0gNywgMQ0KLVt1cmwoIi4uL3NhbXBsZTIuY3NzIildIFVSSSAtIDgsIDIxDQotWztdIERFTElNSVRFUiAtIDI5LCAxDQotWw0KLQ0KLV0gUyAtIDMwLCA0DQotWy8qIFNhbXBsZSBTdHlsZXMgKi9dIENPTU1FTlQgLSAzNCwgMTkNCi1bDQotDQotXSBTIC0gNTMsIDQNCi1bQk9EWV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTcsIDQNCi1bIF0gUyAtIDYxLCAxDQotW3tdIExCUkFDRSAtIDYyLCAxDQotWw0KLQldIFMgLSA2MywgMw0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NiwgNQ0KLVsgXSBTIC0gNzEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzIsIDENCi1bIF0gUyAtIDczLCAxDQotW2JsYWNrXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc0LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDc5LCAxDQotWw0KLQldIFMgLSA4MCwgMw0KLVtiYWNrZ3JvdW5kLWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDgzLCAxNg0KLVsgXSBTIC0gOTksIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTAwLCAxDQotWyBdIFMgLSAxMDEsIDENCi1bcmdiKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSAxMDIsIDQNCi1bMTgxXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMDYsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMDksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExMCwgMQ0KLVsyNTNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDExMSwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExNCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTE1LCAxDQotWzIxMV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTE2LCAzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTE5LCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyMCwgMQ0KLVsNCi0JXSBTIC0gMTIxLCAzDQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI0LCAxMA0KLVsgXSBTIC0gMTM0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNSwgMQ0KLVsgXSBTIC0gMTM2LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMzcsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTQzLCAxDQotWw0KLQldIFMgLSAxNDQsIDMNCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ3LCAxMQ0KLVsgXSBTIC0gMTU4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1OSwgMQ0KLVsgXSBTIC0gMTYwLCAxDQotWyJIZWlzZWkgTWluY2hvIFczIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTYxLCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3OSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgwLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE4MSwgNQ0KLVsNCi1dIFMgLSAxODYsIDINCi1bfV0gUkJSQUNFIC0gMTg4LCAxDQotWw0KLQ0KLV0gUyAtIDE4OSwgNA0KLVtAcGFnZV0gUEFHRSAtIDE5MywgNQ0KLVsgXSBTIC0gMTk4LCAxDQotWzpsZWZ0XSBDU1NfUEFHRV9TRUxFQ1RPUiAtIDE5OSwgNQ0KLVsgXSBTIC0gMjA0LCAxDQotW3tdIExCUkFDRSAtIDIwNSwgMQ0KLVsgXSBTIC0gMjA2LCAxDQotW21hcmdpbi1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwNywgMTENCi1bIF0gUyAtIDIxOCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMTksIDENCi1bIF0gUyAtIDIyMCwgMQ0KLVs0Y21dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDIyMSwgMw0KLVsgXSBTIC0gMjI0LCAxDQotW31dIFJCUkFDRSAtIDIyNSwgMQ0KLVsNCi0NCi1dIFMgLSAyMjYsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDIzMCwgNg0KLVsgXSBTIC0gMjM2LCAxDQotW2F1cmFsXSBNRURJVU0gLSAyMzcsIDUNCi1bIF0gUyAtIDI0MiwgMQ0KLVt7XSBMQlJBQ0UgLSAyNDMsIDENCi1bDQotCV0gUyAtIDI0NCwgMw0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNDcsIDENCi1bLmhlaWRpXSBTRUxFQ1RPUl9DTEFTUyAtIDI0OCwgNg0KLVsgXSBTIC0gMjU0LCAxDQotW3tdIExCUkFDRSAtIDI1NSwgMQ0KLVsNCi0JCV0gUyAtIDI1NiwgNA0KLVthemltdXRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI2MCwgNw0KLVsgXSBTIC0gMjY3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI2OCwgMQ0KLVsgXSBTIC0gMjY5LCAxDQotW2NlbnRlci1sZWZ0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI3MCwgMTENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjgxLCAxDQotWw0KLQkJXSBTIC0gMjgyLCA0DQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyODYsIDkNCi1bIF0gUyAtIDI5NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyOTYsIDENCi1bIF0gUyAtIDI5NywgMQ0KLVsxMi4zZGVnXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAyOTgsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzA1LCAxDQotWw0KLQkJXSBTIC0gMzA2LCA0DQotW3BhdXNlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMxMCwgNQ0KLVsgXSBTIC0gMzE1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMxNiwgMQ0KLVsgXSBTIC0gMzE3LCAxDQotWzMwbXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDMxOCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMzIyLCAxDQotWzEuNnNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDMyMywgNA0KLVsNCi0JXSBTIC0gMzI3LCAzDQotW31dIFJCUkFDRSAtIDMzMCwgMQ0KLVsNCi1dIFMgLSAzMzEsIDINCi1bfV0gUkJSQUNFIC0gMzMzLCAxDQotWw0KLV0gUyAtIDMzNCwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNWQyZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzA2ICswLDAgQEAKLVtAY2hhcnNldF0gQ0hBUlNFVCAtIDAsIDgNCi1bIF0gUyAtIDgsIDENCi1bIklTTy04ODU5LTEiXSBTVFJJTkcgLSA5LCAxMg0KLVs7XSBERUxJTUlURVIgLSAyMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMiwgNA0KLVtAaW1wb3J0XSBJTVBPUlQgLSAyNiwgNw0KLVsgXSBTIC0gMzMsIDENCi1bdXJsKCJob2dlLmNzcyIpXSBVUkkgLSAzNCwgMTUNCi1bO10gREVMSU1JVEVSIC0gNDksIDENCi1bDQotXSBTIC0gNTAsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gNTIsIDcNCi1bIF0gUyAtIDU5LCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSA2MCwgMTMNCi1bIF0gUyAtIDczLCAxDQotW3VybChob2dlLmNzcyldIFVSSSAtIDc0LCAxMw0KLVs7XSBERUxJTUlURVIgLSA4NywgMQ0KLVsNCi1dIFMgLSA4OCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA5MCwgNw0KLVsgXSBTIC0gOTcsIDENCi1bImhvZ2UuY3NzIl0gU1RSSU5HIC0gOTgsIDEwDQotWyBdIFMgLSAxMDgsIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDEwOSwgMTMNCi1bO10gREVMSU1JVEVSIC0gMTIyLCAxDQotWw0KLV0gUyAtIDEyMywgMg0KLVtASU1QT1JUXSBJTVBPUlQgLSAxMjUsIDcNCi1bIF0gUyAtIDEzMiwgMQ0KLVsnaG9nZS5jc3MnXSBTVFJJTkcgLSAxMzMsIDEwDQotWyBdIFMgLSAxNDMsIDENCi1bbWVkaWExXSBNRURJVU0gLSAxNDQsIDYNCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTUwLCAxDQotW21lZGlhMl0gTUVESVVNIC0gMTUxLCA2DQotWyBdIFMgLSAxNTcsIDENCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTU4LCAxDQotWyBdIFMgLSAxNTksIDENCi1bbWVkaWEzXSBNRURJVU0gLSAxNjAsIDYNCi1bO10gREVMSU1JVEVSIC0gMTY2LCAxDQotWw0KLQ0KLV0gUyAtIDE2NywgNA0KLVtAbWVkaWFdIE1FRElBIC0gMTcxLCA2DQotWyBdIFMgLSAxNzcsIDENCi1bcHJpbnRdIE1FRElVTSAtIDE3OCwgNQ0KLVsgXSBTIC0gMTgzLCAxDQotW3tdIExCUkFDRSAtIDE4NCwgMQ0KLVsNCi0NCi1dIFMgLSAxODUsIDQNCi1bfV0gUkJSQUNFIC0gMTg5LCAxDQotWw0KLQ0KLV0gUyAtIDE5MCwgNA0KLVtAcGFnZV0gUEFHRSAtIDE5NCwgNQ0KLVsgXSBTIC0gMTk5LCAxDQotWzpsZWZ0XSBDU1NfUEFHRV9TRUxFQ1RPUiAtIDIwMCwgNQ0KLVsgXSBTIC0gMjA1LCAxDQotW3tdIExCUkFDRSAtIDIwNiwgMQ0KLVsNCi0NCi1dIFMgLSAyMDcsIDQNCi1bfV0gUkJSQUNFIC0gMjExLCAxDQotWw0KLQ0KLV0gUyAtIDIxMiwgNA0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjE2LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDIxOCwgMQ0KLVsgXSBTIC0gMjE5LCAxDQotW2gyXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMjAsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjIyLCAxDQotWyBdIFMgLSAyMjMsIDENCi1baDNdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyNCwgMg0KLVsgXSBTIC0gMjI2LCAxDQotW3tdIExCUkFDRSAtIDIyNywgMQ0KLVsgIF0gUyAtIDIyOCwgMg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMzAsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI0MSwgMQ0KLVsgXSBTIC0gMjQyLCAxDQotW3NhbnMtc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjQzLCAxMA0KLVsgIF0gUyAtIDI1MywgMg0KLVt9XSBSQlJBQ0UgLSAyNTUsIDENCi1bDQotXSBTIC0gMjU2LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNTgsIDINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI2MCwgMQ0KLVtlbV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjYxLCAyDQotWyBdIFMgLSAyNjMsIDENCi1be10gTEJSQUNFIC0gMjY0LCAxDQotWyAgXSBTIC0gMjY1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI2NywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNzIsIDENCi1bIF0gUyAtIDI3MywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI3NCwgNA0KLVsgIF0gUyAtIDI3OCwgMg0KLVt9XSBSQlJBQ0UgLSAyODAsIDENCi1bDQotXSBTIC0gMjgxLCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjgzLCAzDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyODYsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjg3LCAxDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyODgsIDENCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMjg5LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDI5MCwgMQ0KLVtocmVmXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDI5MSwgNA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gMjk1LCAxDQotWyBdIFMgLSAyOTYsIDENCi1be10gTEJSQUNFIC0gMjk3LCAxDQotWyAgXSBTIC0gMjk4LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMwMCwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMDUsIDENCi1bIF0gUyAtIDMwNiwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDMwNywgNA0KLVsgIF0gUyAtIDMxMSwgMg0KLVt9XSBSQlJBQ0UgLSAzMTMsIDENCi1bDQotXSBTIC0gMzE0LCAyDQotW2JvZHldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMxNiwgNA0KLVsgXSBTIC0gMzIwLCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzMjEsIDENCi1bIF0gUyAtIDMyMiwgMQ0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzMjMsIDENCi1bIF0gUyAtIDMyNCwgMQ0KLVt7XSBMQlJBQ0UgLSAzMjUsIDENCi1bICBdIFMgLSAzMjYsIDINCi1bbGluZS1oZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzI4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMzksIDENCi1bIF0gUyAtIDM0MCwgMQ0KLVsxLjNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM0MSwgMw0KLVsgIF0gUyAtIDM0NCwgMg0KLVt9XSBSQlJBQ0UgLSAzNDYsIDENCi1bDQotXSBTIC0gMzQ3LCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzQ5LCAzDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTIsIDENCi1bb2xdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1MywgMg0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU1LCAxDQotW2xpXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTYsIDINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1OCwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTksIDENCi1bIF0gUyAtIDM2MCwgMQ0KLVt7XSBMQlJBQ0UgLSAzNjEsIDENCi1bIF0gUyAtIDM2MiwgMQ0KLVt9XSBSQlJBQ0UgLSAzNjMsIDENCi1bDQotXSBTIC0gMzY0LCAyDQotW21hdGhdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM2NiwgNA0KLVsgXSBTIC0gMzcwLCAxDQotWytdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNzEsIDENCi1bIF0gUyAtIDM3MiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNzMsIDENCi1bIF0gUyAtIDM3NCwgMQ0KLVt7XSBMQlJBQ0UgLSAzNzUsIDENCi1bICBdIFMgLSAzNzYsIDINCi1bdGV4dC1pbmRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzc4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzODksIDENCi1bIF0gUyAtIDM5MCwgMQ0KLVswXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAzOTEsIDENCi1bICBdIFMgLSAzOTIsIDINCi1bfV0gUkJSQUNFIC0gMzk0LCAxDQotWw0KLV0gUyAtIDM5NSwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzk3LCAyDQotWy5vcGVuZXJdIFNFTEVDVE9SX0NMQVNTIC0gMzk5LCA3DQotWyBdIFMgLSA0MDYsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDQwNywgMQ0KLVsgXSBTIC0gNDA4LCAxDQotW2gyXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0MDksIDINCi1bIF0gUyAtIDQxMSwgMQ0KLVt7XSBMQlJBQ0UgLSA0MTIsIDENCi1bICBdIFMgLSA0MTMsIDINCi1bbWFyZ2luLXRvcF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0MTUsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQyNSwgMQ0KLVsgXSBTIC0gNDI2LCAxDQotWy01bW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQyNywgNA0KLVsgIF0gUyAtIDQzMSwgMg0KLVt9XSBSQlJBQ0UgLSA0MzMsIDENCi1bDQotXSBTIC0gNDM0LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0MzYsIDINCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNDM4LCAxDQotW3RpdGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDQzOSwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNDQ0LCAxDQotWyBdIFMgLSA0NDUsIDENCi1be10gTEJSQUNFIC0gNDQ2LCAxDQotWyAgXSBTIC0gNDQ3LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ0OSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NTQsIDENCi1bIF0gUyAtIDQ1NSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ1NiwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0NjAsIDENCi1bICBdIFMgLSA0NjEsIDINCi1bfV0gUkJSQUNFIC0gNDYzLCAxDQotWw0KLV0gUyAtIDQ2NCwgMg0KLVtzcGFuXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0NjYsIDQNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNDcwLCAxDQotW2NsYXNzXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDQ3MSwgNQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA0NzYsIDENCi1bZXhhbXBsZV0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNDc3LCA3DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0ODQsIDENCi1bIF0gUyAtIDQ4NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0ODYsIDENCi1bICBdIFMgLSA0ODcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDg5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ5NCwgMQ0KLVsgXSBTIC0gNDk1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDk2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDUwMCwgMQ0KLVsgIF0gUyAtIDUwMSwgMg0KLVt9XSBSQlJBQ0UgLSA1MDMsIDENCi1bDQotXSBTIC0gNTA0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDUwNiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1MTAsIDENCi1baGVsbG9dIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTExLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUxNiwgMQ0KLVsiQ2xldmVsYW5kIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTE3LCAxMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTI4LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUyOSwgMQ0KLVtnb29kYnllXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDUzMCwgNw0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1MzcsIDENCi1bIkNvbHVtYnVzIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTM4LCAxMA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTQ4LCAxDQotWyBdIFMgLSA1NDksIDENCi1be10gTEJSQUNFIC0gNTUwLCAxDQotWyAgXSBTIC0gNTUxLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDU1MywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1NTgsIDENCi1bIF0gUyAtIDU1OSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDU2MCwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1NjQsIDENCi1bICBdIFMgLSA1NjUsIDINCi1bfV0gUkJSQUNFIC0gNTY3LCAxDQotWw0KLV0gUyAtIDU2OCwgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1NzAsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTcxLCAxDQotW3JlbF0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1NzIsIDMNCi1bfj1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDU3NSwgMg0KLVsiY29weXJpZ2h0Il0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTc3LCAxMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTg4LCAxDQotWyBdIFMgLSA1ODksIDENCi1be10gTEJSQUNFIC0gNTkwLCAxDQotWyAgXSBTIC0gNTkxLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDU5MywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1OTgsIDENCi1bIF0gUyAtIDU5OSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDYwMCwgNA0KLVsgIF0gUyAtIDYwNCwgMg0KLVt9XSBSQlJBQ0UgLSA2MDYsIDENCi1bDQotXSBTIC0gNjA3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDYwOSwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2MTAsIDENCi1baHJlZl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2MTEsIDQNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjE1LCAxDQotWyJodHRwOi8vd3d3LnczLm9yZy8iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2MTYsIDIwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2MzYsIDENCi1bIF0gUyAtIDYzNywgMQ0KLVt7XSBMQlJBQ0UgLSA2MzgsIDENCi1bICBdIFMgLSA2MzksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjQxLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY0NiwgMQ0KLVsgXSBTIC0gNjQ3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjQ4LCA0DQotWyAgXSBTIC0gNjUyLCAyDQotW31dIFJCUkFDRSAtIDY1NCwgMQ0KLVsNCi1dIFMgLSA2NTUsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gNjU3LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDY1OCwgMQ0KLVtsYW5nXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDY1OSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2NjMsIDENCi1bZnJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDY2NCwgMg0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNjY2LCAxDQotWyBdIFMgLSA2NjcsIDENCi1be10gTEJSQUNFIC0gNjY4LCAxDQotWyAgXSBTIC0gNjY5LCAyDQotW2Rpc3BsYXldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjcxLCA3DQotWyBdIFMgLSA2NzgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjc5LCAxDQotWyBdIFMgLSA2ODAsIDENCi1bbm9uZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2ODEsIDQNCi1bICBdIFMgLSA2ODUsIDINCi1bfV0gUkJSQUNFIC0gNjg3LCAxDQotWw0KLV0gUyAtIDY4OCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2OTAsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjkxLCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjkyLCA0DQotW3w9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2OTYsIDINCi1bImVuIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjk4LCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA3MDIsIDENCi1bIF0gUyAtIDcwMywgMQ0KLVt7XSBMQlJBQ0UgLSA3MDQsIDENCi1bICBdIFMgLSA3MDUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzA3LCA1DQotWyBdIFMgLSA3MTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzEzLCAxDQotWyBdIFMgLSA3MTQsIDENCi1bcmVkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDcxNSwgMw0KLVsgIF0gUyAtIDcxOCwgMg0KLVt9XSBSQlJBQ0UgLSA3MjAsIDENCi1bDQotXSBTIC0gNzIxLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA3MjMsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNzMxLCAxDQotW2NoYXJhY3Rlcl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA3MzIsIDkNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNzQxLCAxDQotW3JvbWVvXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA3NDIsIDUNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDc0NywgMQ0KLVsNCi1dIFMgLSA3NDgsIDINCi1be10gTEJSQUNFIC0gNzUwLCAxDQotWyAgXSBTIC0gNzUxLCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3NTMsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc2NSwgMQ0KLVsgXSBTIC0gNzY2LCAxDQotWyJMYXdyZW5jZSBPbGl2aWVyIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNzY3LCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDc4NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNzg2LCAxDQotW2NoYXJsZXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzg3LCA3DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzk0LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3OTUsIDENCi1bbWFsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3OTYsIDQNCi1bICBdIFMgLSA4MDAsIDINCi1bfV0gUkJSQUNFIC0gODAyLCAxDQotWw0KLV0gUyAtIDgwMywgMg0KLVtESUFMT0dVRV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gODA1LCA4DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDgxMywgMQ0KLVsgXSBTIC0gODE0LCAxDQotW2NoYXJhY3Rlcl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA4MTUsIDkNCi1bIF0gUyAtIDgyNCwgMQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA4MjUsIDENCi1bIF0gUyAtIDgyNiwgMQ0KLVtqdWxpZXRdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDgyNywgNg0KLVsgXSBTIC0gODMzLCAxDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA4MzQsIDENCi1bDQotXSBTIC0gODM1LCAyDQotW3tdIExCUkFDRSAtIDgzNywgMQ0KLVsgIF0gUyAtIDgzOCwgMg0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODQwLCAxMg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA4NTIsIDENCi1bIF0gUyAtIDg1MywgMQ0KLVsiVml2aWVuIExlaWdoIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODU0LCAxNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg2OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODY5LCAxDQotW3ZpY3RvcmlhXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg3MCwgOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg3OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODc5LCAxDQotW2ZlbWFsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4ODAsIDYNCi1bICBdIFMgLSA4ODYsIDINCi1bfV0gUkJSQUNFIC0gODg4LCAxDQotWw0KLV0gUyAtIDg4OSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA4OTEsIDENCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDg5MiwgOQ0KLVsgXSBTIC0gOTAxLCAxDQotW3tdIExCUkFDRSAtIDkwMiwgMQ0KLVsgIF0gUyAtIDkwMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTEwLCAxDQotWyBdIFMgLSA5MTEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTEyLCA1DQotWyAgXSBTIC0gOTE3LCAyDQotW31dIFJCUkFDRSAtIDkxOSwgMQ0KLVsNCi1dIFMgLSA5MjAsIDINCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDkyMiwgOQ0KLVsgXSBTIC0gOTMxLCAxDQotW3tdIExCUkFDRSAtIDkzMiwgMQ0KLVsgIF0gUyAtIDkzMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MzUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTQwLCAxDQotWyBdIFMgLSA5NDEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTQyLCA1DQotWyAgXSBTIC0gOTQ3LCAyDQotW31dIFJCUkFDRSAtIDk0OSwgMQ0KLVsNCi1dIFMgLSA5NTAsIDINCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk1MiwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTU0LCA5DQotWyBdIFMgLSA5NjMsIDENCi1be10gTEJSQUNFIC0gOTY0LCAxDQotWyAgXSBTIC0gOTY1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk2NywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NzIsIDENCi1bIF0gUyAtIDk3MywgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NzQsIDUNCi1bICBdIFMgLSA5NzksIDINCi1bfV0gUkJSQUNFIC0gOTgxLCAxDQotWw0KLV0gUyAtIDk4MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA5ODQsIDENCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDk4NSwgOQ0KLVsubWFyaW5lXSBTRUxFQ1RPUl9DTEFTUyAtIDk5NCwgNw0KLVsgXSBTIC0gMTAwMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDAyLCAxDQotWyAgXSBTIC0gMTAwMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDA1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwMTAsIDENCi1bIF0gUyAtIDEwMTEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTAxMiwgNQ0KLVsgIF0gUyAtIDEwMTcsIDINCi1bfV0gUkJSQUNFIC0gMTAxOSwgMQ0KLVsNCi1dIFMgLSAxMDIwLCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDIyLCAyDQotWyNjaGFwdGVyMV0gU0VMRUNUT1JfSUQgLSAxMDI0LCA5DQotWyBdIFMgLSAxMDMzLCAxDQotW3tdIExCUkFDRSAtIDEwMzQsIDENCi1bICBdIFMgLSAxMDM1LCAyDQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTAzNywgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA0NywgMQ0KLVsgXSBTIC0gMTA0OCwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTA0OSwgNg0KLVsgIF0gUyAtIDEwNTUsIDINCi1bfV0gUkJSQUNFIC0gMTA1NywgMQ0KLVsNCi1dIFMgLSAxMDU4LCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTA2MCwgMw0KLVsgXSBTIC0gMTA2MywgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTA2NCwgMQ0KLVsgXSBTIC0gMTA2NSwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDY2LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTA2NywgMTINCi1bIF0gUyAtIDEwNzksIDENCi1be10gTEJSQUNFIC0gMTA4MCwgMQ0KLVsgIF0gUyAtIDEwODEsIDINCi1bdGV4dC1pbmRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTA4MywgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA5NCwgMQ0KLVsgXSBTIC0gMTA5NSwgMQ0KLVswXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMDk2LCAxDQotWyAgXSBTIC0gMTA5NywgMg0KLVt9XSBSQlJBQ0UgLSAxMDk5LCAxDQotWw0KLV0gUyAtIDExMDAsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTEwMiwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExMDMsIDEyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTE1LCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTE2LCAyDQotWyBdIFMgLSAxMTE4LCAxDQotW3tdIExCUkFDRSAtIDExMTksIDENCi1bICBdIFMgLSAxMTIwLCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExMjIsIDExDQotWyBdIFMgLSAxMTMzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExMzQsIDENCi1bIF0gUyAtIDExMzUsIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMTM2LCA0DQotWyAgXSBTIC0gMTE0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMTQyLCAxDQotWw0KLV0gUyAtIDExNDMsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTE0NSwgMQ0KLVsgXSBTIC0gMTE0NiwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTE0NywgMQ0KLVsgXSBTIC0gMTE0OCwgMQ0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTQ5LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTE1MCwgMTINCi1bIF0gUyAtIDExNjIsIDENCi1be10gTEJSQUNFIC0gMTE2MywgMQ0KLVsgIF0gUyAtIDExNjQsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTE2NiwgMTENCi1bIF0gUyAtIDExNzcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE3OCwgMQ0KLVsgXSBTIC0gMTE3OSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExODAsIDQNCi1bICBdIFMgLSAxMTg0LCAyDQotW31dIFJCUkFDRSAtIDExODYsIDENCi1bDQotXSBTIC0gMTE4NywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTg5LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTE5MCwgMTINCi1bIF0gUyAtIDEyMDIsIDENCi1be10gTEJSQUNFIC0gMTIwMywgMQ0KLVsgIF0gUyAtIDEyMDQsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTIwNiwgMTENCi1bIF0gUyAtIDEyMTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTIxOCwgMQ0KLVsgXSBTIC0gMTIxOSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyMjAsIDQNCi1bICBdIFMgLSAxMjI0LCAyDQotW31dIFJCUkFDRSAtIDEyMjYsIDENCi1bDQotXSBTIC0gMTIyNywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMjI5LCAxDQotWy5leHRlcm5hbF0gU0VMRUNUT1JfQ0xBU1MgLSAxMjMwLCA5DQotWzp2aXNpdGVkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjM5LCA4DQotWyBdIFMgLSAxMjQ3LCAxDQotW3tdIExCUkFDRSAtIDEyNDgsIDENCi1bICBdIFMgLSAxMjQ5LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyNTEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI1NiwgMQ0KLVsgXSBTIC0gMTI1NywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyNTgsIDQNCi1bICBdIFMgLSAxMjYyLCAyDQotW31dIFJCUkFDRSAtIDEyNjQsIDENCi1bDQotXSBTIC0gMTI2NSwgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMjY3LCAxDQotWzpmb2N1c10gU0VMRUNUT1JfUFNFVURPIC0gMTI2OCwgNg0KLVs6aG92ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDEyNzQsIDYNCi1bIF0gUyAtIDEyODAsIDENCi1be10gTEJSQUNFIC0gMTI4MSwgMQ0KLVsgIF0gUyAtIDEyODIsIDINCi1bYmFja2dyb3VuZF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjg0LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjk0LCAxDQotWyBdIFMgLSAxMjk1LCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyOTYsIDUNCi1bICBdIFMgLSAxMzAxLCAyDQotW31dIFJCUkFDRSAtIDEzMDMsIDENCi1bDQotXSBTIC0gMTMwNCwgMg0KLVtodG1sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzA2LCA0DQotWzpsYW5nKGZyKV0gU0VMRUNUT1JfUFNFVURPIC0gMTMxMCwgOQ0KLVsgXSBTIC0gMTMxOSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzIwLCAxDQotWyAgXSBTIC0gMTMyMSwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTMyMywgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzI5LCAxDQotWyBdIFMgLSAxMzMwLCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzMzEsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzMzUsIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzNiwgNA0KLVsgIF0gUyAtIDEzNDAsIDINCi1bfV0gUkJSQUNFIC0gMTM0MiwgMQ0KLVsNCi1dIFMgLSAxMzQzLCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzNDUsIDQNCi1bOmxhbmcoZGUpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzQ5LCA5DQotWyBdIFMgLSAxMzU4LCAxDQotW3tdIExCUkFDRSAtIDEzNTksIDENCi1bICBdIFMgLSAxMzYwLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzYyLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNjgsIDENCi1bIF0gUyAtIDEzNjksIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM3MCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM3NCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzc1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc5LCAxDQotWydcMjAzOSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzODAsIDcNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzODcsIDENCi1bJ1wyMDNBJ10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4OCwgNw0KLVsgIF0gUyAtIDEzOTUsIDINCi1bfV0gUkJSQUNFIC0gMTM5NywgMQ0KLVsNCi1dIFMgLSAxMzk4LCAyDQotWzpsYW5nKGZyKV0gU0VMRUNUT1JfUFNFVURPIC0gMTQwMCwgOQ0KLVsgXSBTIC0gMTQwOSwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTQxMCwgMQ0KLVsgXSBTIC0gMTQxMSwgMQ0KLVtRXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDEyLCAxDQotWyBdIFMgLSAxNDEzLCAxDQotW3tdIExCUkFDRSAtIDE0MTQsIDENCi1bICBdIFMgLSAxNDE1LCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDE3LCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MjMsIDENCi1bIF0gUyAtIDE0MjQsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQyNSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQyOSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDMwLCA0DQotWyAgXSBTIC0gMTQzNCwgMg0KLVt9XSBSQlJBQ0UgLSAxNDM2LCAxDQotWw0KLV0gUyAtIDE0MzcsIDINCi1bOmxhbmcoZGUpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDM5LCA5DQotWyBdIFMgLSAxNDQ4LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDQ5LCAxDQotWyBdIFMgLSAxNDUwLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0NTEsIDENCi1bIF0gUyAtIDE0NTIsIDENCi1be10gTEJSQUNFIC0gMTQ1MywgMQ0KLVsgIF0gUyAtIDE0NTQsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0NTYsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQ2MiwgMQ0KLVsgXSBTIC0gMTQ2MywgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDY0LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDY4LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjksIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NzMsIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ3NCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ4MSwgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDgyLCA3DQotWyAgXSBTIC0gMTQ4OSwgMg0KLVt9XSBSQlJBQ0UgLSAxNDkxLCAxDQotWw0KLV0gUyAtIDE0OTIsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ5NCwgMQ0KLVs6Zmlyc3QtbGV0dGVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDk1LCAxMw0KLVsgXSBTIC0gMTUwOCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTA5LCAxDQotWyAgXSBTIC0gMTUxMCwgMg0KLVtmb250LXNpemVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUxMiwgOQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTIxLCAxDQotWyBdIFMgLSAxNTIyLCAxDQotWzNlbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTUyMywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTI2LCAxDQotWyBdIFMgLSAxNTI3LCAxDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MzksIDENCi1bIF0gUyAtIDE1NDAsIDENCi1bbm9ybWFsXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE1NDEsIDYNCi1bICBdIFMgLSAxNTQ3LCAyDQotW31dIFJCUkFDRSAtIDE1NDksIDENCi1bDQotXSBTIC0gMTU1MCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTUyLCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1NTMsIDgNCi1bOmJlZm9yZV0gU0VMRUNUT1JfUFNFVURPIC0gMTU2MSwgNw0KLVsgXSBTIC0gMTU2OCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTY5LCAxDQotWyBdIFMgLSAxNTcwLCAxDQotW2NvbnRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU3MSwgNw0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTc4LCAxDQotWyBdIFMgLSAxNTc5LCAxDQotWyJTcGVjaWFsISAiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNTgwLCAxMQ0KLVsgXSBTIC0gMTU5MSwgMQ0KLVt9XSBSQlJBQ0UgLSAxNTkyLCAxDQotWw0KLV0gUyAtIDE1OTMsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU5NSwgMQ0KLVsuc3BlY2lhbF0gU0VMRUNUT1JfQ0xBU1MgLSAxNTk2LCA4DQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE2MDQsIDEzDQotWyBdIFMgLSAxNjE3LCAxDQotW3tdIExCUkFDRSAtIDE2MTgsIDENCi1bIF0gUyAtIDE2MTksIDENCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYyMCwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjI1LCAxDQotWyBdIFMgLSAxNjI2LCAxDQotWyNmZmQ4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAxNjI3LCA3DQotWyBdIFMgLSAxNjM0LCAxDQotW31dIFJCUkFDRSAtIDE2MzUsIDENCi1bDQotXSBTIC0gMTYzNiwgMg0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNjM4LCA0DQotWyBdIFMgLSAxNjQyLCAxDQotW3tdIExCUkFDRSAtIDE2NDMsIDENCi1bIF0gUyAtIDE2NDQsIDENCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY0NSwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTY1NiwgMQ0KLVsgXSBTIC0gMTY1NywgMQ0KLVtCYXNrZXJ2aWxsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjU4LCAxMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2NjksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2NzAsIDENCi1bIkhlaXNpIE1pbmNobyBXMyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE2NzEsIDE3DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY4OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY4OSwgMQ0KLVtTeW1ib2xdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY5MCwgNg0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2OTYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2OTcsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY5OCwgNQ0KLVsgXSBTIC0gMTcwMywgMQ0KLVt9XSBSQlJBQ0UgLSAxNzA0LCAxDQotWw0KLV0gUyAtIDE3MDUsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTcwNywgMQ0KLVs6bGFuZyhqYS1qcCldIFNFTEVDVE9SX1BTRVVETyAtIDE3MDgsIDEyDQotWyBdIFMgLSAxNzIwLCAxDQotW3tdIExCUkFDRSAtIDE3MjEsIDENCi1bIF0gUyAtIDE3MjIsIDENCi1bZm9udF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzIzLCA0DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3MjcsIDENCi1bIF0gUyAtIDE3MjgsIDENCi1bOTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNzI5LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzMyLCAxDQotWzE0cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzMsIDQNCi1bL10gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzM3LCAxDQotWzE2cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzgsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3NDIsIDENCi1bIkhlaXNlaSBNaW5jaG8gVzkiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNzQzLCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3NjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3NjIsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTc2MywgNQ0KLVsgXSBTIC0gMTc2OCwgMQ0KLVt9XSBSQlJBQ0UgLSAxNzY5LCAxDQotWw0KLV0gUyAtIDE3NzAsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTc3MiwgMQ0KLVs6bGFuZyh6aC10dyldIFNFTEVDVE9SX1BTRVVETyAtIDE3NzMsIDEyDQotWyBdIFMgLSAxNzg1LCAxDQotW3tdIExCUkFDRSAtIDE3ODYsIDENCi1bIF0gUyAtIDE3ODcsIDENCi1bZm9udF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzg4LCA0DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3OTIsIDENCi1bIF0gUyAtIDE3OTMsIDENCi1bODAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNzk0LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzk3LCAxDQotWzE0cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3OTgsIDQNCi1bL10gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxODAyLCAxDQotWzE2LjVwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTgwMywgNg0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgwOSwgMQ0KLVsiTGkgU3VuZyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE4MTAsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxODE5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODIwLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE4MjEsIDUNCi1bIF0gUyAtIDE4MjYsIDENCi1bfV0gUkJSQUNFIC0gMTgyNywgMQ0KLVsNCi1dIFMgLSAxODI4LCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ1ZDJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MDYgKzAsMCBAQAotW0BjaGFyc2V0XSBDSEFSU0VUIC0gMCwgOA0KLVsgXSBTIC0gOCwgMQ0KLVsiSVNPLTg4NTktMSJdIFNUUklORyAtIDksIDEyDQotWztdIERFTElNSVRFUiAtIDIxLCAxDQotWw0KLQ0KLV0gUyAtIDIyLCA0DQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDM0LCAxNQ0KLVs7XSBERUxJTUlURVIgLSA0OSwgMQ0KLVsNCi1dIFMgLSA1MCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA1MiwgNw0KLVsgXSBTIC0gNTksIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDYwLCAxMw0KLVsgXSBTIC0gNzMsIDENCi1bdXJsKGhvZ2UuY3NzKV0gVVJJIC0gNzQsIDEzDQotWztdIERFTElNSVRFUiAtIDg3LCAxDQotWw0KLV0gUyAtIDg4LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDkwLCA3DQotWyBdIFMgLSA5NywgMQ0KLVsiaG9nZS5jc3MiXSBTVFJJTkcgLSA5OCwgMTANCi1bIF0gUyAtIDEwOCwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMTA5LCAxMw0KLVs7XSBERUxJTUlURVIgLSAxMjIsIDENCi1bDQotXSBTIC0gMTIzLCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDEyNSwgNw0KLVsgXSBTIC0gMTMyLCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEzMywgMTANCi1bIF0gUyAtIDE0MywgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDE0NCwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTAsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxNTEsIDYNCi1bIF0gUyAtIDE1NywgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTgsIDENCi1bIF0gUyAtIDE1OSwgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDE2MCwgNg0KLVs7XSBERUxJTUlURVIgLSAxNjYsIDENCi1bDQotDQotXSBTIC0gMTY3LCA0DQotW0BtZWRpYV0gTUVESUEgLSAxNzEsIDYNCi1bIF0gUyAtIDE3NywgMQ0KLVtwcmludF0gTUVESVVNIC0gMTc4LCA1DQotWyBdIFMgLSAxODMsIDENCi1be10gTEJSQUNFIC0gMTg0LCAxDQotWw0KLQ0KLV0gUyAtIDE4NSwgNA0KLVt9XSBSQlJBQ0UgLSAxODksIDENCi1bDQotDQotXSBTIC0gMTkwLCA0DQotW0BwYWdlXSBQQUdFIC0gMTk0LCA1DQotWyBdIFMgLSAxOTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMjAwLCA1DQotWyBdIFMgLSAyMDUsIDENCi1be10gTEJSQUNFIC0gMjA2LCAxDQotWw0KLQ0KLV0gUyAtIDIwNywgNA0KLVt9XSBSQlJBQ0UgLSAyMTEsIDENCi1bDQotDQotXSBTIC0gMjEyLCA0DQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMTYsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjE4LCAxDQotWyBdIFMgLSAyMTksIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMCwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMjIsIDENCi1bIF0gUyAtIDIyMywgMQ0KLVtoM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjI0LCAyDQotWyBdIFMgLSAyMjYsIDENCi1be10gTEJSQUNFIC0gMjI3LCAxDQotWyAgXSBTIC0gMjI4LCAyDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIzMCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQxLCAxDQotWyBdIFMgLSAyNDIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNDMsIDEwDQotWyAgXSBTIC0gMjUzLCAyDQotW31dIFJCUkFDRSAtIDI1NSwgMQ0KLVsNCi1dIFMgLSAyNTYsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI1OCwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjYwLCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNjEsIDINCi1bIF0gUyAtIDI2MywgMQ0KLVt7XSBMQlJBQ0UgLSAyNjQsIDENCi1bICBdIFMgLSAyNjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI3MiwgMQ0KLVsgXSBTIC0gMjczLCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjc0LCA0DQotWyAgXSBTIC0gMjc4LCAyDQotW31dIFJCUkFDRSAtIDI4MCwgMQ0KLVsNCi1dIFMgLSAyODEsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODMsIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4NiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODcsIDENCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4OCwgMQ0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAyODksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gMjkwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gMjkxLCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSAyOTUsIDENCi1bIF0gUyAtIDI5NiwgMQ0KLVt7XSBMQlJBQ0UgLSAyOTcsIDENCi1bICBdIFMgLSAyOTgsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMwNSwgMQ0KLVsgXSBTIC0gMzA2LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzA3LCA0DQotWyAgXSBTIC0gMzExLCAyDQotW31dIFJCUkFDRSAtIDMxMywgMQ0KLVsNCi1dIFMgLSAzMTQsIDINCi1bYm9keV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzE2LCA0DQotWyBdIFMgLSAzMjAsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDMyMSwgMQ0KLVsgXSBTIC0gMzIyLCAxDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMyMywgMQ0KLVsgXSBTIC0gMzI0LCAxDQotW3tdIExCUkFDRSAtIDMyNSwgMQ0KLVsgIF0gUyAtIDMyNiwgMg0KLVtsaW5lLWhlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzOSwgMQ0KLVsgXSBTIC0gMzQwLCAxDQotWzEuM10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzQxLCAzDQotWyAgXSBTIC0gMzQ0LCAyDQotW31dIFJCUkFDRSAtIDM0NiwgMQ0KLVsNCi1dIFMgLSAzNDcsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNDksIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1MiwgMQ0KLVtvbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzUzLCAyDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTUsIDENCi1bbGldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1NiwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU4LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1OSwgMQ0KLVsgXSBTIC0gMzYwLCAxDQotW3tdIExCUkFDRSAtIDM2MSwgMQ0KLVsgXSBTIC0gMzYyLCAxDQotW31dIFJCUkFDRSAtIDM2MywgMQ0KLVsNCi1dIFMgLSAzNjQsIDINCi1bbWF0aF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzY2LCA0DQotWyBdIFMgLSAzNzAsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM3MSwgMQ0KLVsgXSBTIC0gMzcyLCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM3MywgMQ0KLVsgXSBTIC0gMzc0LCAxDQotW3tdIExCUkFDRSAtIDM3NSwgMQ0KLVsgIF0gUyAtIDM3NiwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNzgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM4OSwgMQ0KLVsgXSBTIC0gMzkwLCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM5MSwgMQ0KLVsgIF0gUyAtIDM5MiwgMg0KLVt9XSBSQlJBQ0UgLSAzOTQsIDENCi1bDQotXSBTIC0gMzk1LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzOTcsIDINCi1bLm9wZW5lcl0gU0VMRUNUT1JfQ0xBU1MgLSAzOTksIDcNCi1bIF0gUyAtIDQwNiwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gNDA3LCAxDQotWyBdIFMgLSA0MDgsIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQwOSwgMg0KLVsgXSBTIC0gNDExLCAxDQotW3tdIExCUkFDRSAtIDQxMiwgMQ0KLVsgIF0gUyAtIDQxMywgMg0KLVttYXJnaW4tdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQxNSwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDI1LCAxDQotWyBdIFMgLSA0MjYsIDENCi1bLTVtbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI3LCA0DQotWyAgXSBTIC0gNDMxLCAyDQotW31dIFJCUkFDRSAtIDQzMywgMQ0KLVsNCi1dIFMgLSA0MzQsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQzNiwgMg0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0MzgsIDENCi1bdGl0bGVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDM5LCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0NDQsIDENCi1bIF0gUyAtIDQ0NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0NDYsIDENCi1bICBdIFMgLSA0NDcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDQ5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ1NCwgMQ0KLVsgXSBTIC0gNDU1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDU2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQ2MCwgMQ0KLVsgIF0gUyAtIDQ2MSwgMg0KLVt9XSBSQlJBQ0UgLSA0NjMsIDENCi1bDQotXSBTIC0gNDY0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQ2NiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0NzAsIDENCi1bY2xhc3NdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDcxLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDQ3NiwgMQ0KLVtleGFtcGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA0NzcsIDcNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ4NCwgMQ0KLVsgXSBTIC0gNDg1LCAxDQotW3tdIExCUkFDRSAtIDQ4NiwgMQ0KLVsgIF0gUyAtIDQ4NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0ODksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDk0LCAxDQotWyBdIFMgLSA0OTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTAwLCAxDQotWyAgXSBTIC0gNTAxLCAyDQotW31dIFJCUkFDRSAtIDUwMywgMQ0KLVsNCi1dIFMgLSA1MDQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTA2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUxMCwgMQ0KLVtoZWxsb10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MTEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTE2LCAxDQotWyJDbGV2ZWxhbmQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MTcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1MjgsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTI5LCAxDQotW2dvb2RieWVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTMwLCA3DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUzNywgMQ0KLVsiQ29sdW1idXMiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MzgsIDEwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1NDgsIDENCi1bIF0gUyAtIDU0OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1NTAsIDENCi1bICBdIFMgLSA1NTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTUzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU1OCwgMQ0KLVsgXSBTIC0gNTU5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNTYwLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDU2NCwgMQ0KLVsgIF0gUyAtIDU2NSwgMg0KLVt9XSBSQlJBQ0UgLSA1NjcsIDENCi1bDQotXSBTIC0gNTY4LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDU3MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1NzEsIDENCi1bcmVsXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDU3MiwgMw0KLVt+PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTc1LCAyDQotWyJjb3B5cmlnaHQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1NzcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1ODgsIDENCi1bIF0gUyAtIDU4OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1OTAsIDENCi1bICBdIFMgLSA1OTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTkzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU5OCwgMQ0KLVsgXSBTIC0gNTk5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjAwLCA0DQotWyAgXSBTIC0gNjA0LCAyDQotW31dIFJCUkFDRSAtIDYwNiwgMQ0KLVsNCi1dIFMgLSA2MDcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjA5LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDYxMCwgMQ0KLVtocmVmXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDYxMSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2MTUsIDENCi1bImh0dHA6Ly93d3cudzMub3JnLyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDYxNiwgMjANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDYzNiwgMQ0KLVsgXSBTIC0gNjM3LCAxDQotW3tdIExCUkFDRSAtIDYzOCwgMQ0KLVsgIF0gUyAtIDYzOSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NDEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjQ2LCAxDQotWyBdIFMgLSA2NDcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2NDgsIDQNCi1bICBdIFMgLSA2NTIsIDINCi1bfV0gUkJSQUNFIC0gNjU0LCAxDQotWw0KLV0gUyAtIDY1NSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2NTcsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjU4LCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjU5LCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY2MywgMQ0KLVtmcl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjY0LCAyDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2NjYsIDENCi1bIF0gUyAtIDY2NywgMQ0KLVt7XSBMQlJBQ0UgLSA2NjgsIDENCi1bICBdIFMgLSA2NjksIDINCi1bZGlzcGxheV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NzEsIDcNCi1bIF0gUyAtIDY3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NzksIDENCi1bIF0gUyAtIDY4MCwgMQ0KLVtub25lXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY4MSwgNA0KLVsgIF0gUyAtIDY4NSwgMg0KLVt9XSBSQlJBQ0UgLSA2ODcsIDENCi1bDQotXSBTIC0gNjg4LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY5MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2OTEsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2OTIsIDQNCi1bfD1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY5NiwgMg0KLVsiZW4iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2OTgsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDcwMiwgMQ0KLVsgXSBTIC0gNzAzLCAxDQotW3tdIExCUkFDRSAtIDcwNCwgMQ0KLVsgIF0gUyAtIDcwNSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3MDcsIDUNCi1bIF0gUyAtIDcxMiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MTMsIDENCi1bIF0gUyAtIDcxNCwgMQ0KLVtyZWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzE1LCAzDQotWyAgXSBTIC0gNzE4LCAyDQotW31dIFJCUkFDRSAtIDcyMCwgMQ0KLVsNCi1dIFMgLSA3MjEsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDcyMywgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA3MzEsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDczMiwgOQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA3NDEsIDENCi1bcm9tZW9dIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDc0MiwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzQ3LCAxDQotWw0KLV0gUyAtIDc0OCwgMg0KLVt7XSBMQlJBQ0UgLSA3NTAsIDENCi1bICBdIFMgLSA3NTEsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc1MywgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzY1LCAxDQotWyBdIFMgLSA3NjYsIDENCi1bIkxhd3JlbmNlIE9saXZpZXIiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA3NjcsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzg1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3ODYsIDENCi1bY2hhcmxlc10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3ODcsIDcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3OTQsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc5NSwgMQ0KLVttYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc5NiwgNA0KLVsgIF0gUyAtIDgwMCwgMg0KLVt9XSBSQlJBQ0UgLSA4MDIsIDENCi1bDQotXSBTIC0gODAzLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDUsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gODEzLCAxDQotWyBdIFMgLSA4MTQsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDgxNSwgOQ0KLVsgXSBTIC0gODI0LCAxDQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDgyNSwgMQ0KLVsgXSBTIC0gODI2LCAxDQotW2p1bGlldF0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gODI3LCA2DQotWyBdIFMgLSA4MzMsIDENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDgzNCwgMQ0KLVsNCi1dIFMgLSA4MzUsIDINCi1be10gTEJSQUNFIC0gODM3LCAxDQotWyAgXSBTIC0gODM4LCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4NDAsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg1MiwgMQ0KLVsgXSBTIC0gODUzLCAxDQotWyJWaXZpZW4gTGVpZ2giXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4NTQsIDE0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODY4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NjksIDENCi1bdmljdG9yaWFdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODcwLCA4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODc4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NzksIDENCi1bZmVtYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MCwgNg0KLVsgIF0gUyAtIDg4NiwgMg0KLVt9XSBSQlJBQ0UgLSA4ODgsIDENCi1bDQotXSBTIC0gODg5LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDg5MSwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gODkyLCA5DQotWyBdIFMgLSA5MDEsIDENCi1be10gTEJSQUNFIC0gOTAyLCAxDQotWyAgXSBTIC0gOTAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MTAsIDENCi1bIF0gUyAtIDkxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5MTIsIDUNCi1bICBdIFMgLSA5MTcsIDINCi1bfV0gUkJSQUNFIC0gOTE5LCAxDQotWw0KLV0gUyAtIDkyMCwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTIyLCA5DQotWyBdIFMgLSA5MzEsIDENCi1be10gTEJSQUNFIC0gOTMyLCAxDQotWyAgXSBTIC0gOTMzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NDAsIDENCi1bIF0gUyAtIDk0MSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NDIsIDUNCi1bICBdIFMgLSA5NDcsIDINCi1bfV0gUkJSQUNFIC0gOTQ5LCAxDQotWw0KLV0gUyAtIDk1MCwgMg0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTUyLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5NTQsIDkNCi1bIF0gUyAtIDk2MywgMQ0KLVt7XSBMQlJBQ0UgLSA5NjQsIDENCi1bICBdIFMgLSA5NjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk3MiwgMQ0KLVsgXSBTIC0gOTczLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk3NCwgNQ0KLVsgIF0gUyAtIDk3OSwgMg0KLVt9XSBSQlJBQ0UgLSA5ODEsIDENCi1bDQotXSBTIC0gOTgyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk4NCwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTg1LCA5DQotWy5tYXJpbmVdIFNFTEVDVE9SX0NMQVNTIC0gOTk0LCA3DQotWyBdIFMgLSAxMDAxLCAxDQotW3tdIExCUkFDRSAtIDEwMDIsIDENCi1bICBdIFMgLSAxMDAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTAxMCwgMQ0KLVsgXSBTIC0gMTAxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDEyLCA1DQotWyAgXSBTIC0gMTAxNywgMg0KLVt9XSBSQlJBQ0UgLSAxMDE5LCAxDQotWw0KLV0gUyAtIDEwMjAsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwMjIsIDINCi1bI2NoYXB0ZXIxXSBTRUxFQ1RPUl9JRCAtIDEwMjQsIDkNCi1bIF0gUyAtIDEwMzMsIDENCi1be10gTEJSQUNFIC0gMTAzNCwgMQ0KLVsgIF0gUyAtIDEwMzUsIDINCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDM3LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDQ3LCAxDQotWyBdIFMgLSAxMDQ4LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDQ5LCA2DQotWyAgXSBTIC0gMTA1NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMDU3LCAxDQotWw0KLV0gUyAtIDEwNTgsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDYwLCAzDQotWyBdIFMgLSAxMDYzLCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMDY0LCAxDQotWyBdIFMgLSAxMDY1LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjYsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMDY3LCAxMg0KLVsgXSBTIC0gMTA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDgwLCAxDQotWyAgXSBTIC0gMTA4MSwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDgzLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDk0LCAxDQotWyBdIFMgLSAxMDk1LCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEwOTYsIDENCi1bICBdIFMgLSAxMDk3LCAyDQotW31dIFJCUkFDRSAtIDEwOTksIDENCi1bDQotXSBTIC0gMTEwMCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTAyLCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTEwMywgMTINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExMTUsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMTYsIDINCi1bIF0gUyAtIDExMTgsIDENCi1be10gTEJSQUNFIC0gMTExOSwgMQ0KLVsgIF0gUyAtIDExMjAsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTEyMiwgMTENCi1bIF0gUyAtIDExMzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTEzNCwgMQ0KLVsgXSBTIC0gMTEzNSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExMzYsIDQNCi1bICBdIFMgLSAxMTQwLCAyDQotW31dIFJCUkFDRSAtIDExNDIsIDENCi1bDQotXSBTIC0gMTE0MywgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxMTQ1LCAxDQotWyBdIFMgLSAxMTQ2LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTQ3LCAxDQotWyBdIFMgLSAxMTQ4LCAxDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExNDksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTUwLCAxMg0KLVsgXSBTIC0gMTE2MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTYzLCAxDQotWyAgXSBTIC0gMTE2NCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTY2LCAxMQ0KLVsgXSBTIC0gMTE3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTc4LCAxDQotWyBdIFMgLSAxMTc5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTE4MCwgNA0KLVsgIF0gUyAtIDExODQsIDINCi1bfV0gUkJSQUNFIC0gMTE4NiwgMQ0KLVsNCi1dIFMgLSAxMTg3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExODksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTkwLCAxMg0KLVsgXSBTIC0gMTIwMiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjAzLCAxDQotWyAgXSBTIC0gMTIwNCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjA2LCAxMQ0KLVsgXSBTIC0gMTIxNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjE4LCAxDQotWyBdIFMgLSAxMjE5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIyMCwgNA0KLVsgIF0gUyAtIDEyMjQsIDINCi1bfV0gUkJSQUNFIC0gMTIyNiwgMQ0KLVsNCi1dIFMgLSAxMjI3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyMjksIDENCi1bLmV4dGVybmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDEyMzAsIDkNCi1bOnZpc2l0ZWRdIFNFTEVDVE9SX1BTRVVETyAtIDEyMzksIDgNCi1bIF0gUyAtIDEyNDcsIDENCi1be10gTEJSQUNFIC0gMTI0OCwgMQ0KLVsgIF0gUyAtIDEyNDksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI1MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjU2LCAxDQotWyBdIFMgLSAxMjU3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI1OCwgNA0KLVsgIF0gUyAtIDEyNjIsIDINCi1bfV0gUkJSQUNFIC0gMTI2NCwgMQ0KLVsNCi1dIFMgLSAxMjY1LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyNjcsIDENCi1bOmZvY3VzXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjY4LCA2DQotWzpob3Zlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTI3NCwgNg0KLVsgXSBTIC0gMTI4MCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjgxLCAxDQotWyAgXSBTIC0gMTI4MiwgMg0KLVtiYWNrZ3JvdW5kXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyODQsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyOTQsIDENCi1bIF0gUyAtIDEyOTUsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI5NiwgNQ0KLVsgIF0gUyAtIDEzMDEsIDINCi1bfV0gUkJSQUNFIC0gMTMwMywgMQ0KLVsNCi1dIFMgLSAxMzA0LCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMDYsIDQNCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzEwLCA5DQotWyBdIFMgLSAxMzE5LCAxDQotW3tdIExCUkFDRSAtIDEzMjAsIDENCi1bICBdIFMgLSAxMzIxLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzIzLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzMjksIDENCi1bIF0gUyAtIDEzMzAsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzMSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTMzNSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzM2LCA0DQotWyAgXSBTIC0gMTM0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMzQyLCAxDQotWw0KLV0gUyAtIDEzNDMsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTM0NSwgNA0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDEzNDksIDkNCi1bIF0gUyAtIDEzNTgsIDENCi1be10gTEJSQUNFIC0gMTM1OSwgMQ0KLVsgIF0gUyAtIDEzNjAsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNjIsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM2OCwgMQ0KLVsgXSBTIC0gMTM2OSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzcwLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzksIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4MCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM4NywgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzg4LCA3DQotWyAgXSBTIC0gMTM5NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzk3LCAxDQotWw0KLV0gUyAtIDEzOTgsIDINCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDAwLCA5DQotWyBdIFMgLSAxNDA5LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDEwLCAxDQotWyBdIFMgLSAxNDExLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0MTIsIDENCi1bIF0gUyAtIDE0MTMsIDENCi1be10gTEJSQUNFIC0gMTQxNCwgMQ0KLVsgIF0gUyAtIDE0MTUsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MTcsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyMywgMQ0KLVsgXSBTIC0gMTQyNCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDI1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDI5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MzAsIDQNCi1bICBdIFMgLSAxNDM0LCAyDQotW31dIFJCUkFDRSAtIDE0MzYsIDENCi1bDQotXSBTIC0gMTQzNywgMg0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDE0MzksIDkNCi1bIF0gUyAtIDE0NDgsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0NDksIDENCi1bIF0gUyAtIDE0NTAsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ1MSwgMQ0KLVsgXSBTIC0gMTQ1MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNDUzLCAxDQotWyAgXSBTIC0gMTQ1NCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ1NiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDYyLCAxDQotWyBdIFMgLSAxNDYzLCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjQsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NjgsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2OSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ3MywgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDc0LCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDgxLCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0ODIsIDcNCi1bICBdIFMgLSAxNDg5LCAyDQotW31dIFJCUkFDRSAtIDE0OTEsIDENCi1bDQotXSBTIC0gMTQ5MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDk0LCAxDQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE0OTUsIDEzDQotWyBdIFMgLSAxNTA4LCAxDQotW3tdIExCUkFDRSAtIDE1MDksIDENCi1bICBdIFMgLSAxNTEwLCAyDQotW2ZvbnQtc2l6ZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTEyLCA5DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MjEsIDENCi1bIF0gUyAtIDE1MjIsIDENCi1bM2VtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MjYsIDENCi1bIF0gUyAtIDE1MjcsIDENCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUzOSwgMQ0KLVsgXSBTIC0gMTU0MCwgMQ0KLVtub3JtYWxdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTU0MSwgNg0KLVsgIF0gUyAtIDE1NDcsIDINCi1bfV0gUkJSQUNFIC0gMTU0OSwgMQ0KLVsNCi1dIFMgLSAxNTUwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1NTIsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU1MywgOA0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNTYxLCA3DQotWyBdIFMgLSAxNTY4LCAxDQotW3tdIExCUkFDRSAtIDE1NjksIDENCi1bIF0gUyAtIDE1NzAsIDENCi1bY29udGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTcxLCA3DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1NzgsIDENCi1bIF0gUyAtIDE1NzksIDENCi1bIlNwZWNpYWwhICJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE1ODAsIDExDQotWyBdIFMgLSAxNTkxLCAxDQotW31dIFJCUkFDRSAtIDE1OTIsIDENCi1bDQotXSBTIC0gMTU5MywgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTk1LCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1OTYsIDgNCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTYwNCwgMTMNCi1bIF0gUyAtIDE2MTcsIDENCi1be10gTEJSQUNFIC0gMTYxOCwgMQ0KLVsgXSBTIC0gMTYxOSwgMQ0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjIwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MjUsIDENCi1bIF0gUyAtIDE2MjYsIDENCi1bI2ZmZDgwMF0gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE2MjcsIDcNCi1bIF0gUyAtIDE2MzQsIDENCi1bfV0gUkJSQUNFIC0gMTYzNSwgMQ0KLVsNCi1dIFMgLSAxNjM2LCAyDQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE2MzgsIDQNCi1bIF0gUyAtIDE2NDIsIDENCi1be10gTEJSQUNFIC0gMTY0MywgMQ0KLVsgXSBTIC0gMTY0NCwgMQ0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjQ1LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjU2LCAxDQotWyBdIFMgLSAxNjU3LCAxDQotW0Jhc2tlcnZpbGxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2NTgsIDExDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY2OSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY3MCwgMQ0KLVsiSGVpc2kgTWluY2hvIFczIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTY3MSwgMTcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjg4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjg5LCAxDQotW1N5bWJvbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjkwLCA2DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY5NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY5NywgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjk4LCA1DQotWyBdIFMgLSAxNzAzLCAxDQotW31dIFJCUkFDRSAtIDE3MDQsIDENCi1bDQotXSBTIC0gMTcwNSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzA3LCAxDQotWzpsYW5nKGphLWpwKV0gU0VMRUNUT1JfUFNFVURPIC0gMTcwOCwgMTINCi1bIF0gUyAtIDE3MjAsIDENCi1be10gTEJSQUNFIC0gMTcyMSwgMQ0KLVsgXSBTIC0gMTcyMiwgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3MjMsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTcyNywgMQ0KLVsgXSBTIC0gMTcyOCwgMQ0KLVs5MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3MjksIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3MzIsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczMywgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3MzcsIDENCi1bMTZwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczOCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc0MiwgMQ0KLVsiSGVpc2VpIE1pbmNobyBXOSJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE3NDMsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTc2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc2MiwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNzYzLCA1DQotWyBdIFMgLSAxNzY4LCAxDQotW31dIFJCUkFDRSAtIDE3NjksIDENCi1bDQotXSBTIC0gMTc3MCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzcyLCAxDQotWzpsYW5nKHpoLXR3KV0gU0VMRUNUT1JfUFNFVURPIC0gMTc3MywgMTINCi1bIF0gUyAtIDE3ODUsIDENCi1be10gTEJSQUNFIC0gMTc4NiwgMQ0KLVsgXSBTIC0gMTc4NywgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3ODgsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc5MiwgMQ0KLVsgXSBTIC0gMTc5MywgMQ0KLVs4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3OTQsIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3OTcsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTc5OCwgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MDIsIDENCi1bMTYuNXB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxODAzLCA2DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODA5LCAxDQotWyJMaSBTdW5nIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTgxMCwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MTksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MjAsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTgyMSwgNQ0KLVsgXSBTIC0gMTgyNiwgMQ0KLVt9XSBSQlJBQ0UgLSAxODI3LCAxDQotWw0KLV0gUyAtIDE4MjgsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjIxN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA2LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi1bZGVjbGFyYXRpb25dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDAsIDExDQotWyBdIFMgLSAxMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMiwgMQ0KLVsNCi0JXSBTIC0gMTMsIDMNCi1bZGltZW5zaW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2LCA5DQotWyBdIFMgLSAyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNiwgMQ0KLVsgXSBTIC0gMjcsIDENCi1bMTAwZXhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDI4LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDMzLCAxDQotWw0KLQldIFMgLSAzNCwgMw0KLVtmdW5jdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNywgOA0KLVsgXSBTIC0gNDUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDYsIDENCi1bIF0gUyAtIDQ3LCAxDQotW3JlY3QoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDQ4LCA1DQotWzEwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNTMsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA1NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNTcsIDENCi1bMjAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA1OCwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDYxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2MiwgMQ0KLVszMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDYzLCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNjYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY3LCAxDQotWzQwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNjgsIDMNCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSA3MSwgMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDcyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3MywgMQ0KLVtmb3JtYXQoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDc0LCA3DQotWyJpbnRlbGxpZm9udCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDgxLCAxMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDk0LCAxDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gOTUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDk2LCAxDQotW2xvY2FsKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSA5NywgNg0KLVsiRXhjZWxzaW9yIEN5cmlsbGxpYyBVcHJpZ2h0Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTAzLCAyOQ0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDEzMiwgMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMzMsIDENCi1bDQotCV0gUyAtIDEzNCwgMw0KLVtoYXNoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNywgNA0KLVsgXSBTIC0gMTQxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MiwgMQ0KLVsgXSBTIC0gMTQzLCAxDQotWyNhYWJiY2NdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAxNDQsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUxLCAxDQotWw0KLQldIFMgLSAxNTIsIDMNCi1baWRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU1LCA1DQotWyBdIFMgLSAxNjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYxLCAxDQotWyBdIFMgLSAxNjIsIDENCi1bYW55XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2MywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNjYsIDENCi1bDQotCV0gUyAtIDE2NywgMw0KLVtudW1iZXJdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcwLCA2DQotWyBdIFMgLSAxNzYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc3LCAxDQotWyBdIFMgLSAxNzgsIDENCi1bOTk5OTldIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3OSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxODQsIDENCi1bDQotCV0gUyAtIDE4NSwgMw0KLVtwZXJjZW50YWdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE4OCwgMTANCi1bIF0gUyAtIDE5OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxOTksIDENCi1bIF0gUyAtIDIwMCwgMQ0KLVsxMDAlXSBERUNMQVJBVElPTl9WQUxVRV9QRVJDRU5UQUdFIC0gMjAxLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDIwNSwgMQ0KLVsNCi0JXSBTIC0gMjA2LCAzDQotW3N0cmluZ10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMDksIDYNCi1bIF0gUyAtIDIxNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMTYsIDENCi1bIF0gUyAtIDIxNywgMQ0KLVsic3RyaW5nIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMjE4LCA4DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDIyNiwgMQ0KLVsNCi0JXSBTIC0gMjI3LCAzDQotW3VuaWNvZGUtcmFuZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjMwLCAxMw0KLVsgXSBTIC0gMjQzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI0NCwgMQ0KLVsgXSBTIC0gMjQ1LCAxDQotW1UrPz9dIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAyNDYsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAyNTAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDI1MSwgMQ0KLVtVKzEwMC0yMjBdIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAyNTIsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAyNjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDI2MiwgMQ0KLVtVKzQ/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI2MywgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNjgsIDENCi1bDQotXSBTIC0gMjY5LCAyDQotW31dIFJCUkFDRSAtIDI3MSwgMQ0KLVsNCi1dIFMgLSAyNzIsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmVkNWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU4MyArMCwwIEBACi1bQGNoYXJzZXRdIENIQVJTRVQgLSAwLCA4DQotWyBdIFMgLSA4LCAxDQotWyJJU08tODg1OS0xIl0gU1RSSU5HIC0gOSwgMTINCi1bO10gREVMSU1JVEVSIC0gMjEsIDENCi1bDQotDQotXSBTIC0gMjIsIDQNCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotW3VybCgiLi4vc2FtcGxlMi5jc3MiKV0gVVJJIC0gMzQsIDIxDQotWyBdIFMgLSA1NSwgMQ0KLVtwcm9qZWN0aW9uXSBNRURJVU0gLSA1NiwgMTANCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gNjYsIDENCi1bIF0gUyAtIDY3LCAxDQotW3R2XSBNRURJVU0gLSA2OCwgMg0KLVs7XSBERUxJTUlURVIgLSA3MCwgMQ0KLVsNCi0NCi1dIFMgLSA3MSwgNA0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA3NSwgNA0KLVsgXSBTIC0gNzksIDENCi1be10gTEJSQUNFIC0gODAsIDENCi1bDQotICAgIF0gUyAtIDgxLCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg3LCA1DQotWyBdIFMgLSA5MiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MywgMQ0KLVsgXSBTIC0gOTQsIDENCi1bYmxhY2tdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTUsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTAwLCAxDQotWw0KLSAgICBdIFMgLSAxMDEsIDYNCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDcsIDEwDQotWyBdIFMgLSAxMTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE4LCAxDQotWyBdIFMgLSAxMTksIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyMCwgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMjYsIDENCi1bDQotICAgIF0gUyAtIDEyNywgNg0KLVtiYWNrZ3JvdW5kLWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzMywgMTYNCi1bIF0gUyAtIDE0OSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTAsIDENCi1bIF0gUyAtIDE1MSwgMQ0KLVtyZ2IoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDE1MiwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTU2LCAxDQotWzE4MV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTU3LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTYwLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjEsIDENCi1bMjUzXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNjIsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2NiwgMQ0KLVsyMTFdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE2NywgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTcwLCAxDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTcxLCAxDQotWw0KLV0gUyAtIDE3MiwgMg0KLVt9XSBSQlJBQ0UgLSAxNzQsIDENCi1bDQotDQotXSBTIC0gMTc1LCA0DQotW1VMXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNzksIDINCi1bIF0gUyAtIDE4MSwgMQ0KLVt7XSBMQlJBQ0UgLSAxODIsIDENCi1bDQotICAgIF0gUyAtIDE4MywgNg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxODksIDUNCi1bIF0gUyAtIDE5NCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxOTUsIDENCi1bIF0gUyAtIDE5NiwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxOTcsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjAyLCAxDQotWw0KLSAgICBdIFMgLSAyMDMsIDYNCi1bbGlzdC1zdHlsZS1pbWFnZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMDksIDE2DQotWyBdIFMgLSAyMjUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjI2LCAxDQotWyBdIFMgLSAyMjcsIDENCi1bdXJsKCJpbWFnZXMvbF9hMDEuZ2lmIildIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDIyOCwgMjMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjUxLCAxDQotWw0KLSAgICBdIFMgLSAyNTIsIDYNCi1bbGlzdC1zdHlsZS1wb3NpdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNTgsIDE5DQotWyBdIFMgLSAyNzcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjc4LCAxDQotWyBdIFMgLSAyNzksIDENCi1bb3V0c2lkZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyODAsIDcNCi1bDQotXSBTIC0gMjg3LCAyDQotW31dIFJCUkFDRSAtIDI4OSwgMQ0KLVsNCi0NCi1dIFMgLSAyOTAsIDQNCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI5NCwgMg0KLVsgXSBTIC0gMjk2LCAxDQotW3tdIExCUkFDRSAtIDI5NywgMQ0KLVsNCi0gICAgXSBTIC0gMjk4LCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMwNCwgNQ0KLVsgXSBTIC0gMzA5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMxMCwgMQ0KLVsgXSBTIC0gMzExLCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDMxMiwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAzMTcsIDENCi1bDQotICAgIF0gUyAtIDMxOCwgNg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMyNCwgMTANCi1bIF0gUyAtIDMzNCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMzUsIDENCi1bIF0gUyAtIDMzNiwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzM3LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDM0MywgMQ0KLVsNCi0gICAgXSBTIC0gMzQ0LCA2DQotW2JvcmRlci1sZWZ0LWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM1MCwgMTcNCi1bIF0gUyAtIDM2NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzNjgsIDENCi1bIF0gUyAtIDM2OSwgMQ0KLVsjOTk2NjY2XSBERUNMQVJBVElPTl9WQUxVRV9IQVNIIC0gMzcwLCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDM3NywgMQ0KLVsNCi0gICAgXSBTIC0gMzc4LCA2DQotW3BhZGRpbmctdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM4NCwgMTENCi1bIF0gUyAtIDM5NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzOTYsIDENCi1bIF0gUyAtIDM5NywgMQ0KLVswcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDM5OCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0MDEsIDENCi1bDQotICAgIF0gUyAtIDQwMiwgNg0KLVtwYWRkaW5nLXJpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQwOCwgMTMNCi1bIF0gUyAtIDQyMSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MjIsIDENCi1bIF0gUyAtIDQyMywgMQ0KLVsxY21dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQyNCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0MjcsIDENCi1bDQotICAgIF0gUyAtIDQyOCwgNg0KLVtwYWRkaW5nLWJvdHRvbV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0MzQsIDE0DQotWyBdIFMgLSA0NDgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDQ5LCAxDQotWyBdIFMgLSA0NTAsIDENCi1bMl0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNDUxLCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQ1MiwgMQ0KLVsNCi0gICAgXSBTIC0gNDUzLCA2DQotW3BhZGRpbmctbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0NTksIDEyDQotWyBdIFMgLSA0NzEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDcyLCAxDQotWyBdIFMgLSA0NzMsIDENCi1bM2VtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA0NzQsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDc3LCAxDQotWw0KLSAgICBdIFMgLSA0NzgsIDYNCi1bYm9yZGVyLXN0eWxlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ4NCwgMTINCi1bIF0gUyAtIDQ5NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0OTcsIDENCi1bIF0gUyAtIDQ5OCwgMQ0KLVtzb2xpZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OTksIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTA0LCAxDQotWw0KLSAgICBdIFMgLSA1MDUsIDYNCi1bYm9yZGVyLXRvcC13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1MTEsIDE2DQotWyBdIFMgLSA1MjcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTI4LCAxDQotWyBdIFMgLSA1MjksIDENCi1bNC41ZXhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDUzMCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MzUsIDENCi1bDQotICAgIF0gUyAtIDUzNiwgNg0KLVtib3JkZXItcmlnaHQtd2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTQyLCAxOA0KLVsgXSBTIC0gNTYwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU2MSwgMQ0KLVsgXSBTIC0gNTYyLCAxDQotWzVpbl0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTYzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDU2NiwgMQ0KLVsNCi0gICAgXSBTIC0gNTY3LCA2DQotW2JvcmRlci1ib3R0b20td2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTczLCAxOQ0KLVsgXSBTIC0gNTkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU5MywgMQ0KLVsgXSBTIC0gNTk0LCAxDQotWzYuMDJtbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTk1LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDYwMSwgMQ0KLVsNCi0gICAgXSBTIC0gNjAyLCA2DQotW2JvcmRlci1sZWZ0LXdpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDYwOCwgMTcNCi1bIF0gUyAtIDYyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2MjYsIDENCi1bIF0gUyAtIDYyNywgMQ0KLVs3XSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA2MjgsIDENCi1bDQotXSBTIC0gNjI5LCAyDQotW31dIFJCUkFDRSAtIDYzMSwgMQ0KLVsNCi0NCi1dIFMgLSA2MzIsIDQNCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDYzNiwgMg0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSA2MzgsIDcNCi1bIF0gUyAtIDY0NSwgMQ0KLVt7XSBMQlJBQ0UgLSA2NDYsIDENCi1bDQotICAgIF0gUyAtIDY0NywgNg0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY1MywgNw0KLVsgXSBTIC0gNjYwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY2MSwgMQ0KLVsgXSBTIC0gNjYyLCAxDQotWyJDaGFwdGVyICJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDY2MywgMTANCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY3MywgMQ0KLVtjb3VudGVyKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSA2NzQsIDgNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY4MiwgMQ0KLVtjaGFwdGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY4MywgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjkwLCAxDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gNjkxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2OTIsIDENCi1bIi4gIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNjkzLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDY5NywgMQ0KLVsNCi0gICAgXSBTIC0gNjk4LCA2DQotW2NvdW50ZXItaW5jcmVtZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDcwNCwgMTcNCi1bIF0gUyAtIDcyMSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MjIsIDENCi1bIF0gUyAtIDcyMywgMQ0KLVtjaGFwdGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDcyNCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA3MzEsIDENCi1bDQotICAgIF0gUyAtIDczMiwgNg0KLVtjb3VudGVyLXJlc2V0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDczOCwgMTMNCi1bIF0gUyAtIDc1MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3NTIsIDENCi1bIF0gUyAtIDc1MywgMQ0KLVtzZWN0aW9uXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc1NCwgNw0KLVsNCi1dIFMgLSA3NjEsIDINCi1bfV0gUkJSQUNFIC0gNzYzLCAxDQotWw0KLQ0KLV0gUyAtIDc2NCwgNA0KLVtJTUddIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDc2OCwgMw0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSA3NzEsIDcNCi1bIF0gUyAtIDc3OCwgMQ0KLVt7XSBMQlJBQ0UgLSA3NzksIDENCi1bY29udGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3ODAsIDcNCi1bIF0gUyAtIDc4NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3ODgsIDENCi1bIF0gUyAtIDc4OSwgMQ0KLVthdHRyKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSA3OTAsIDUNCi1bYWx0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc5NSwgMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDc5OCwgMQ0KLVt9XSBSQlJBQ0UgLSA3OTksIDENCi1bDQotDQotXSBTIC0gODAwLCA0DQotW0RJVl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gODA0LCAzDQotWy5zYW1wbGVdIFNFTEVDVE9SX0NMQVNTIC0gODA3LCA3DQotWyBdIFMgLSA4MTQsIDENCi1be10gTEJSQUNFIC0gODE1LCAxDQotWw0KLSAgICBdIFMgLSA4MTYsIDYNCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODIyLCAxMQ0KLVsgXSBTIC0gODMzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDgzNCwgMQ0KLVsgXSBTIC0gODM1LCAxDQotWyJSb2Jzb24gQ2VsdGljIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODM2LCAxNQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg1MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODUyLCAxDQotW3NhbnMtc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODUzLCAxMA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA4NjMsIDENCi1bDQotICAgIF0gUyAtIDg2NCwgNg0KLVtwb3NpdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4NzAsIDgNCi1bIF0gUyAtIDg3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA4NzksIDENCi1bIF0gUyAtIDg4MCwgMQ0KLVthYnNvbHV0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4ODEsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gODg5LCAxDQotWw0KLSAgICBdIFMgLSA4OTAsIDYNCi1bbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4OTYsIDQNCi1bIF0gUyAtIDkwMCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MDEsIDENCi1bIF0gUyAtIDkwMiwgMQ0KLVs4MzMuNXBjXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA5MDMsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gOTEwLCAxDQotWw0KLSAgICBdIFMgLSA5MTEsIDYNCi1bdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkxNywgMw0KLVsgXSBTIC0gOTIwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkyMSwgMQ0KLVsgXSBTIC0gOTIyLCAxDQotWzkwJV0gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRSAtIDkyMywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5MjYsIDENCi1bDQotICAgIF0gUyAtIDkyNywgNg0KLVt3aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MzMsIDUNCi1bIF0gUyAtIDkzOCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MzksIDENCi1bIF0gUyAtIDk0MCwgMQ0KLVsxMDBwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTQxLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDk0NiwgMQ0KLVsNCi0gICAgXSBTIC0gOTQ3LCA2DQotW2hlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5NTMsIDYNCi1bIF0gUyAtIDk1OSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NjAsIDENCi1bIF0gUyAtIDk2MSwgMQ0KLVsxMTAuNzc3cHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDk2MiwgOQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5NzEsIDENCi1bDQotICAgIF0gUyAtIDk3MiwgNg0KLVtjbGlwXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk3OCwgNA0KLVsgXSBTIC0gOTgyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk4MywgMQ0KLVsgXSBTIC0gOTg0LCAxDQotW3JlY3QoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDk4NSwgNQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTkwLCAxDQotWy01cHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDk5MSwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDk5NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTk2LCAxDQotWzgwcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDk5NywgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEwMDEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwMDIsIDENCi1bMTMwcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDEwMDMsIDUNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMDA4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDA5LCAxDQotWzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTAxMCwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTAxMywgMQ0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDEwMTQsIDENCi1bDQotXSBTIC0gMTAxNSwgMg0KLVt9XSBSQlJBQ0UgLSAxMDE3LCAxDQotWw0KLQ0KLV0gUyAtIDEwMTgsIDQNCi1bQGZvbnQtZmFjZV0gRk9OVF9GQUNFIC0gMTAyMiwgMTANCi1bIF0gUyAtIDEwMzIsIDENCi1be10gTEJSQUNFIC0gMTAzMywgMQ0KLVsNCi0gICAgXSBTIC0gMTAzNCwgNg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDQwLCAxMQ0KLVsgXSBTIC0gMTA1MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDUyLCAxDQotWyBdIFMgLSAxMDUzLCAxDQotWyJTd2lzcyA3MjEiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMDU0LCAxMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMDY1LCAxDQotWw0KLSAgICBdIFMgLSAxMDY2LCA2DQotW3NyY10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDcyLCAzDQotWyBdIFMgLSAxMDc1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNzYsIDENCi1bIF0gUyAtIDEwNzcsIDENCi1bdXJsKCJzd2lzczcyMXQucGZyIildIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDEwNzgsIDIwDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDk4LCAxDQotW2Zvcm1hdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTA5OSwgNw0KLVsiaW50ZWxsaWZvbnQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMTA2LCAxMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDExMTksIDENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTIwLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTIxLCAxDQotW2xvY2FsKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSAxMTIyLCA2DQotWyJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMTI4LCAyOQ0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDExNTcsIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTE1OCwgMQ0KLVsNCi0gICAgXSBTIC0gMTE1OSwgNg0KLVt1bmljb2RlLXJhbmdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExNjUsIDEzDQotWyBdIFMgLSAxMTc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExNzksIDENCi1bIF0gUyAtIDExODAsIDENCi1bVSs/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDExODEsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTg1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTg2LCAxDQotW1UrMTAwLTIyMF0gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDExODcsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTk2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTk3LCAxDQotW1UrND8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMTE5OCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMjAzLCAxDQotWw0KLSAgICBdIFMgLSAxMjA0LCA2DQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyMTAsIDExDQotWyBdIFMgLSAxMjIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyMjIsIDENCi1bIF0gUyAtIDEyMjMsIDENCi1bMTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjI0LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTIyNywgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTIyOCwgMQ0KLVsyMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMjksIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjMyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjMzLCAxDQotWzMwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTIzNCwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEyMzcsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEyMzgsIDENCi1bNDAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjM5LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTI0MiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTI0MywgMQ0KLVs1MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyNDQsIDMNCi1bDQotXSBTIC0gMTI0NywgMg0KLVt9XSBSQlJBQ0UgLSAxMjQ5LCAxDQotWw0KLQ0KLV0gUyAtIDEyNTAsIDQNCi1bQHBhZ2VdIFBBR0UgLSAxMjU0LCA1DQotWyBdIFMgLSAxMjU5LCAxDQotWzpsZWZ0XSBDU1NfUEFHRV9TRUxFQ1RPUiAtIDEyNjAsIDUNCi1bIF0gUyAtIDEyNjUsIDENCi1be10gTEJSQUNFIC0gMTI2NiwgMQ0KLVttYXJnaW4tbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjY3LCAxMQ0KLVsgXSBTIC0gMTI3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjc5LCAxDQotWyBdIFMgLSAxMjgwLCAxDQotWzRjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTI4MSwgMw0KLVt9XSBSQlJBQ0UgLSAxMjg0LCAxDQotWw0KLQ0KLV0gUyAtIDEyODUsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDEyODksIDYNCi1bIF0gUyAtIDEyOTUsIDENCi1bYXVyYWxdIE1FRElVTSAtIDEyOTYsIDUNCi1bIF0gUyAtIDEzMDEsIDENCi1be10gTEJSQUNFIC0gMTMwMiwgMQ0KLVsNCi0gICAgXSBTIC0gMTMwMywgNg0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMwOSwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzExLCAxDQotWyBdIFMgLSAxMzEyLCAxDQotW0gyXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzEzLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMTUsIDENCi1bIF0gUyAtIDEzMTYsIDENCi1bSDNdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMTcsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMxOSwgMQ0KLVsgXSBTIC0gMTMyMCwgMQ0KLVtINF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMyMSwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzIzLCAxDQotWyBdIFMgLSAxMzI0LCAxDQotW0g1XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzI1LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMjcsIDENCi1bIF0gUyAtIDEzMjgsIDENCi1bSDZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMjksIDINCi1bIF0gUyAtIDEzMzEsIDENCi1be10gTEJSQUNFIC0gMTMzMiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDEzMzMsIDEwDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzQzLCAxMg0KLVsgXSBTIC0gMTM1NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzU2LCAxDQotWyBdIFMgLSAxMzU3LCAxDQotW3BhdWxdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTM1OCwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEzNjIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNjMsIDENCi1bY2hpbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTM2NCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMzY5LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTM3MCwgMTANCi1bc3RyZXNzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzODAsIDYNCi1bIF0gUyAtIDEzODYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM4NywgMQ0KLVsgXSBTIC0gMTM4OCwgMQ0KLVsyMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTM4OSwgMg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMzkxLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTM5MiwgMTANCi1bcmljaG5lc3NdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQwMiwgOA0KLVsgXSBTIC0gMTQxMCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDExLCAxDQotWyBdIFMgLSAxNDEyLCAxDQotWzkwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNDEzLCAyDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE0MTUsIDENCi1bDQotICAgICAgICBdIFMgLSAxNDE2LCAxMA0KLVtjdWUtYmVmb3JlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MjYsIDEwDQotWyBdIFMgLSAxNDM2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MzcsIDENCi1bIF0gUyAtIDE0MzgsIDENCi1bdXJsKCJwaW5nLmF1IildIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDE0MzksIDE0DQotWw0KLSAgICBdIFMgLSAxNDUzLCA2DQotW31dIFJCUkFDRSAtIDE0NTksIDENCi1bDQotICAgIF0gUyAtIDE0NjAsIDYNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ2NiwgMQ0KLVsuaGVpZGldIFNFTEVDVE9SX0NMQVNTIC0gMTQ2NywgNg0KLVsgXSBTIC0gMTQ3MywgMQ0KLVt7XSBMQlJBQ0UgLSAxNDc0LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTQ3NSwgMTANCi1bYXppbXV0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDg1LCA3DQotWyBdIFMgLSAxNDkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0OTMsIDENCi1bIF0gUyAtIDE0OTQsIDENCi1bY2VudGVyLWxlZnRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTQ5NSwgMTENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUwNiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE1MDcsIDEwDQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTE3LCA5DQotWyBdIFMgLSAxNTI2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MjcsIDENCi1bIF0gUyAtIDE1MjgsIDENCi1bMTIuM2RlZ10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTUyOSwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTM2LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTUzNywgMTANCi1bcGF1c2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU0NywgNQ0KLVsgXSBTIC0gMTU1MiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTUzLCAxDQotWyBdIFMgLSAxNTU0LCAxDQotWzMwbXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1NTUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE1NTksIDENCi1bMS42c10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTU2MCwgNA0KLVsNCi0gICAgXSBTIC0gMTU2NCwgNg0KLVt9XSBSQlJBQ0UgLSAxNTcwLCAxDQotWw0KLSAgICBdIFMgLSAxNTcxLCA2DQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1NzcsIDENCi1bLnBldGVyXSBTRUxFQ1RPUl9DTEFTUyAtIDE1NzgsIDYNCi1bIF0gUyAtIDE1ODQsIDENCi1be10gTEJSQUNFIC0gMTU4NSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE1ODYsIDEwDQotW2F6aW11dGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU5NiwgNw0KLVsgXSBTIC0gMTYwMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjA0LCAxDQotWyBdIFMgLSAxNjA1LCAxDQotW3JpZ2h0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2MDYsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTYxMSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE2MTIsIDEwDQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjIyLCA5DQotWyBdIFMgLSAxNjMxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MzIsIDENCi1bIF0gUyAtIDE2MzMsIDENCi1bLTAuMzZyYWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE2MzQsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTY0MiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE2NDMsIDEwDQotW3BpdGNoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2NTMsIDUNCi1bIF0gUyAtIDE2NTgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTY1OSwgMQ0KLVsgXSBTIC0gMTY2MCwgMQ0KLVsyMTBIel0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTY2MSwgNQ0KLVsNCi0gICAgXSBTIC0gMTY2NiwgNg0KLVt9XSBSQlJBQ0UgLSAxNjcyLCAxDQotWw0KLSAgICBdIFMgLSAxNjczLCA2DQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE2NzksIDENCi1bLmdvYXRdIFNFTEVDVE9SX0NMQVNTIC0gMTY4MCwgNQ0KLVsgXSBTIC0gMTY4NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxNjg2LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTY4NywgMTANCi1bdm9sdW1lXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2OTcsIDYNCi1bIF0gUyAtIDE3MDMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTcwNCwgMQ0KLVsgXSBTIC0gMTcwNSwgMQ0KLVt4LXNvZnRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTcwNiwgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNzEyLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTcxMywgMTANCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3MjMsIDkNCi1bIF0gUyAtIDE3MzIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTczMywgMQ0KLVsgXSBTIC0gMTczNCwgMQ0KLVs2NmdyYWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzUsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTc0MSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE3NDIsIDEwDQotW3BpdGNoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3NTIsIDUNCi1bIF0gUyAtIDE3NTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc1OCwgMQ0KLVsgXSBTIC0gMTc1OSwgMQ0KLVswLjE3a0h6XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzYwLCA3DQotWw0KLSAgICBdIFMgLSAxNzY3LCA2DQotW31dIFJCUkFDRSAtIDE3NzMsIDENCi1bDQotXSBTIC0gMTc3NCwgMg0KLVt9XSBSQlJBQ0UgLSAxNzc2LCAxDQotWw0KLQ0KLV0gUyAtIDE3NzcsIDQNCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDguY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDguY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGRiZmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAwLCAxCi1bLm5ld1dpbmRvd10gU0VMRUNUT1JfQ0xBU1MgLSAxLCAxMAotWyBdIFMgLSAxMSwgMQotWy8qICovXSBDT01NRU5UIC0gMTIsIDUKLVsgXSBTIC0gMTcsIDEKLVt7XSBMQlJBQ0UgLSAxOCwgMQotWwotICAgIF0gUyAtIDE5LCA2Ci1bYmFja2dyb3VuZC1pbWFnZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNSwgMTYKLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MSwgMQotWyBdIFMgLSA0MiwgMQotW3VybCguLi9pbWFnZXMvdGVzdC5wbmcpXSBERUNMQVJBVElPTl9WQUxVRV9VUkkgLSA0MywgMjMKLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjYsIDEKLVshaW1wb3J0YW50XSBDU1NfREVDTEFSQVRJT05fVkFMVUVfSU1QT1JUQU5UIC0gNjcsIDEwCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNzcsIDEKLVsKLV0gUyAtIDc4LCAyCi1bfV0gUkJSQUNFIC0gODAsIDEKLVsKLV0gUyAtIDgxLCAyCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg5ODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUgxIHsNCi0NCi0JY29sb3I6IHdoaXRlDQotCTsNCi0NCi0JYmFja2dyb3VuZC1jb2xvciA6IGJsYWNrDQotCQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0YzRkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnICxtZWRpYTEsbWVkaWEyLCxtZWRpYTMgbWVkaWE0LG1lZGlhNSBAaW1wb3J0IG1lZGlhNjsNCi0NCi08IS0tIC8qIGhvZ2Vob2dlICovDQotDQotLS0+DQotDQotLyogY29tbWVudCAyICovDQota3Vzbw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTdjY2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1AaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKTsNCi0NCi0vKiBTYW1wbGUgU3R5bGVzICovDQotDQotQk9EWSB7DQotCWNvbG9yIDogYmxhY2s7DQotCWJhY2tncm91bmQtY29sb3IgOiByZ2IoMTgxLCAyNTMsIDIxMSk7DQotCXRleHQtYWxpZ24gOiBjZW50ZXI7DQotCWZvbnQtZmFtaWx5IDogIkhlaXNlaSBNaW5jaG8gVzMiLCBzZXJpZg0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7IG1hcmdpbi1sZWZ0IDogNGNtIH0NCi0NCi1AbWVkaWEgYXVyYWwgew0KLQlQLmhlaWRpIHsNCi0JCWF6aW11dGggOiBjZW50ZXItbGVmdDsNCi0JCWVsZXZhdGlvbiA6IDEyLjNkZWc7DQotCQlwYXVzZSA6IDMwbXMgMS42cw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRlNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktMSI7DQotDQotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTM7DQotDQotQG1lZGlhIHByaW50IHsNCi0NCi19DQotDQotQHBhZ2UgOmxlZnQgew0KLQ0KLX0NCi0NCi1oMSwgaDIsIGgzIHsgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmICB9DQotaDEgZW0geyAgY29sb3I6IGJsdWUgIH0NCi1kaXYgcCAqW2hyZWZdIHsgIGNvbG9yOiBibHVlICB9DQotYm9keSA+IFAgeyAgbGluZS1oZWlnaHQ6IDEuMyAgfQ0KLWRpdiBvbD5saSBwIHsgfQ0KLW1hdGggKyBwIHsgIHRleHQtaW5kZW50OiAwICB9DQotaDEub3BlbmVyICsgaDIgeyAgbWFyZ2luLXRvcDogLTVtbSAgfQ0KLWgxW3RpdGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2NsYXNzPWV4YW1wbGVdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLXNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0geyAgY29sb3I6IGJsdWU7ICB9DQotYVtyZWx+PSJjb3B5cmlnaHQiXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0geyAgY29sb3I6IGJsdWUgIH0NCi0qW2xhbmc9ZnJdIHsgIGRpc3BsYXkgOiBub25lICB9DQotKltsYW5nfD0iZW4iXSB7ICBjb2xvciA6IHJlZCAgfQ0KLURJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi17ICB2b2ljZS1mYW1pbHk6ICJMYXdyZW5jZSBPbGl2aWVyIiwgY2hhcmxlcywgbWFsZSAgfQ0KLURJQUxPR1VFWyBjaGFyYWN0ZXIgPSBqdWxpZXQgXQ0KLXsgIHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUgIH0NCi0qLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1IMS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1wLnBhc3RvcmFsLm1hcmluZSB7ICBjb2xvcjogZ3JlZW4gIH0NCi1oMSNjaGFwdGVyMSB7ICB0ZXh0LWFsaWduOiBjZW50ZXIgIH0NCi1kaXYgPiBwOmZpcnN0LWNoaWxkIHsgIHRleHQtaW5kZW50OiAwICB9DQotcDpmaXJzdC1jaGlsZCBlbSB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi0qID4gYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hOmZpcnN0LWNoaWxkIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLWEuZXh0ZXJuYWw6dmlzaXRlZCB7ICBjb2xvcjogYmx1ZSAgfQ0KLWE6Zm9jdXM6aG92ZXIgeyAgYmFja2dyb3VuZDogd2hpdGUgIH0NCi1odG1sOmxhbmcoZnIpIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotaHRtbDpsYW5nKGRlKSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi06bGFuZyhmcikgPiBRIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotOmxhbmcoZGUpID4gUSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi1wOmZpcnN0LWxldHRlciB7ICBmb250LXNpemU6IDNlbTsgZm9udC13ZWlnaHQ6IG5vcm1hbCAgfQ0KLXAuc3BlY2lhbDpiZWZvcmUgeyBjb250ZW50OiAiU3BlY2lhbCEgIiB9DQotcC5zcGVjaWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiAjZmZkODAwIH0NCi1CT0RZIHsgZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZiB9DQotKjpsYW5nKGphLWpwKSB7IGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZiB9DQotKjpsYW5nKHpoLXR3KSB7IGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkZTRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTEiOw0KLQ0KLUBpbXBvcnQgdXJsKCJob2dlLmNzcyIpOw0KLUBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpOw0KLUBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovOw0KLUBJTVBPUlQgJ2hvZ2UuY3NzJyBtZWRpYTEsbWVkaWEyICwgbWVkaWEzOw0KLQ0KLUBtZWRpYSBwcmludCB7DQotDQotfQ0KLQ0KLUBwYWdlIDpsZWZ0IHsNCi0NCi19DQotDQotaDEsIGgyLCBoMyB7ICBmb250LWZhbWlseTogc2Fucy1zZXJpZiAgfQ0KLWgxIGVtIHsgIGNvbG9yOiBibHVlICB9DQotZGl2IHAgKltocmVmXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWJvZHkgPiBQIHsgIGxpbmUtaGVpZ2h0OiAxLjMgIH0NCi1kaXYgb2w+bGkgcCB7IH0NCi1tYXRoICsgcCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLWgxLm9wZW5lciArIGgyIHsgIG1hcmdpbi10b3A6IC01bW0gIH0NCi1oMVt0aXRsZV0geyAgY29sb3I6IGJsdWU7ICB9DQotc3BhbltjbGFzcz1leGFtcGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLWFbcmVsfj0iY29weXJpZ2h0Il0geyAgY29sb3I6IGJsdWUgIH0NCi1hW2hyZWY9Imh0dHA6Ly93d3cudzMub3JnLyJdIHsgIGNvbG9yOiBibHVlICB9DQotKltsYW5nPWZyXSB7ICBkaXNwbGF5IDogbm9uZSAgfQ0KLSpbbGFuZ3w9ImVuIl0geyAgY29sb3IgOiByZWQgIH0NCi1ESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQoteyAgdm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUgIH0NCi1ESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi17ICB2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlICB9DQotKi5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi0ucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotSDEucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotcC5wYXN0b3JhbC5tYXJpbmUgeyAgY29sb3I6IGdyZWVuICB9DQotaDEjY2hhcHRlcjEgeyAgdGV4dC1hbGlnbjogY2VudGVyICB9DQotZGl2ID4gcDpmaXJzdC1jaGlsZCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLXA6Zmlyc3QtY2hpbGQgZW0geyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotKiA+IGE6Zmlyc3QtY2hpbGQgeyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hLmV4dGVybmFsOnZpc2l0ZWQgeyAgY29sb3I6IGJsdWUgIH0NCi1hOmZvY3VzOmhvdmVyIHsgIGJhY2tncm91bmQ6IHdoaXRlICB9DQotaHRtbDpsYW5nKGZyKSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLWh0bWw6bGFuZyhkZSkgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotOmxhbmcoZnIpID4gUSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLTpsYW5nKGRlKSA+IFEgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotcDpmaXJzdC1sZXR0ZXIgeyAgZm9udC1zaXplOiAzZW07IGZvbnQtd2VpZ2h0OiBub3JtYWwgIH0NCi1wLnNwZWNpYWw6YmVmb3JlIHsgY29udGVudDogIlNwZWNpYWwhICIgfQ0KLXAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogI2ZmZDgwMCB9DQotQk9EWSB7IGZvbnQtZmFtaWx5OiBCYXNrZXJ2aWxsZSwgIkhlaXNpIE1pbmNobyBXMyIsIFN5bWJvbCwgc2VyaWYgfQ0KLSo6bGFuZyhqYS1qcCkgeyBmb250OiA5MDAgMTRwdC8xNnB0ICJIZWlzZWkgTWluY2hvIFc5Iiwgc2VyaWYgfQ0KLSo6bGFuZyh6aC10dykgeyBmb250OiA4MDAgMTRwdC8xNi41cHQgIkxpIFN1bmciLCBzZXJpZiB9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzNjZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWRlY2xhcmF0aW9uIHsNCi0JZGltZW5zaW9uIDogMTAwZXg7DQotCWZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKTsNCi0JaGFzaCA6ICNhYWJiY2M7DQotCWlkZW50IDogYW55Ow0KLQludW1iZXIgOiA5OTk5OTsNCi0JcGVyY2VudGFnZSA6IDEwMCU7DQotCXN0cmluZyA6ICJzdHJpbmciOw0KLQl1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PzsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMzQ3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS0xIjsNCi0NCi1AaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0djsNCi0NCi1CT0RZIHsNCi0gICAgY29sb3IgOiBibGFjazsNCi0gICAgdGV4dC1hbGlnbiA6IGNlbnRlcjsNCi0gICAgYmFja2dyb3VuZC1jb2xvciA6IHJnYiggMTgxLCAyNTMsIDIxMSApDQotfQ0KLQ0KLVVMIHsNCi0gICAgY29sb3IgOiBibGFjazsNCi0gICAgbGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpOw0KLSAgICBsaXN0LXN0eWxlLXBvc2l0aW9uIDogb3V0c2lkZQ0KLX0NCi0NCi1IMSB7DQotICAgIGNvbG9yIDogd2hpdGU7DQotICAgIHRleHQtYWxpZ24gOiBjZW50ZXI7DQotICAgIGJvcmRlci1sZWZ0LWNvbG9yIDogIzk5NjY2NjsNCi0gICAgcGFkZGluZy10b3AgOiAwcHg7DQotICAgIHBhZGRpbmctcmlnaHQgOiAxY207DQotICAgIHBhZGRpbmctYm90dG9tIDogMjsNCi0gICAgcGFkZGluZy1sZWZ0IDogM2VtOw0KLSAgICBib3JkZXItc3R5bGUgOiBzb2xpZDsNCi0gICAgYm9yZGVyLXRvcC13aWR0aCA6IDQuNWV4Ow0KLSAgICBib3JkZXItcmlnaHQtd2lkdGggOiA1aW47DQotICAgIGJvcmRlci1ib3R0b20td2lkdGggOiA2LjAybW07DQotICAgIGJvcmRlci1sZWZ0LXdpZHRoIDogNw0KLX0NCi0NCi1IMTpiZWZvcmUgew0KLSAgICBjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIjsNCi0gICAgY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyOw0KLSAgICBjb3VudGVyLXJlc2V0IDogc2VjdGlvbg0KLX0NCi0NCi1JTUc6YmVmb3JlIHtjb250ZW50IDogYXR0cihhbHQpfQ0KLQ0KLURJVi5zYW1wbGUgew0KLSAgICBmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZjsNCi0gICAgcG9zaXRpb24gOiBhYnNvbHV0ZTsNCi0gICAgbGVmdCA6IDgzMy41cGM7DQotICAgIHRvcCA6IDkwJTsNCi0gICAgd2lkdGggOiAxMDBwdDsNCi0gICAgaGVpZ2h0IDogMTEwLjc3N3B4Ow0KLSAgICBjbGlwIDogcmVjdCggLTVweCwgODBweCwgMTMwcHgsIDBweCApDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLSAgICBmb250LWZhbWlseSA6ICJTd2lzcyA3MjEiOw0KLSAgICBzcmMgOiB1cmwoInN3aXNzNzIxdC5wZnIiKSBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKTsNCi0gICAgdW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz87DQotICAgIGZvbnQtd2VpZ2h0IDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDANCi19DQotDQotQHBhZ2UgOmxlZnQge21hcmdpbi1sZWZ0IDogNGNtfQ0KLQ0KLUBtZWRpYSBhdXJhbCB7DQotICAgIEgxLCBIMiwgSDMsIEg0LCBINSwgSDYgew0KLSAgICAgICAgdm9pY2UtZmFtaWx5IDogcGF1bCwgY2hpbGQ7DQotICAgICAgICBzdHJlc3MgOiAyMDsNCi0gICAgICAgIHJpY2huZXNzIDogOTA7DQotICAgICAgICBjdWUtYmVmb3JlIDogdXJsKCJwaW5nLmF1IikNCi0gICAgfQ0KLSAgICBQLmhlaWRpIHsNCi0gICAgICAgIGF6aW11dGggOiBjZW50ZXItbGVmdDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IDEyLjNkZWc7DQotICAgICAgICBwYXVzZSA6IDMwbXMgMS42cw0KLSAgICB9DQotICAgIFAucGV0ZXIgew0KLSAgICAgICAgYXppbXV0aCA6IHJpZ2h0Ow0KLSAgICAgICAgZWxldmF0aW9uIDogLTAuMzZyYWQ7DQotICAgICAgICBwaXRjaCA6IDIxMEh6DQotICAgIH0NCi0gICAgUC5nb2F0IHsNCi0gICAgICAgIHZvbHVtZSA6IHgtc29mdDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IDY2Z3JhZDsNCi0gICAgICAgIHBpdGNoIDogMC4xN2tIeg0KLSAgICB9DQotfQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDguY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDE5YTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWEubmV3V2luZG93IC8qICovIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL3Rlc3QucG5nKSAhaW1wb3J0YW50OwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGY2YmQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOwotCi0JcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZUZpbGUoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMiKTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOyAvLyROT04tTkxTLTEkCi0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvLyBwdWJsaWMgc3RhdGljIFJlYWRlciBjcmVhdGVSZWFkZXIoRmlsZSBmaWxlKSB0aHJvd3MKLQkvLyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCS8vIHJldHVybiBuZXcgRmlsZVJlYWRlcihmaWxlKTsKLQkvLyB9Ci0JLy8JCi0JLy8gcHVibGljIHN0YXRpYyBSZWFkZXIgY3JlYXRlUmVhZGVyKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSkKLQkvLyB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIEZpbGUgZmlsZSA9IGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci0JLy8gcmV0dXJuIGNyZWF0ZVJlYWRlcihmaWxlKTsKLQkvLyB9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVTdHJpbmcoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKSk7Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJU3RyaW5nIGxpbmU7Ci0JCXdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlidWYuYXBwZW5kKGxpbmUpOwotCQkJYnVmLmFwcGVuZChjb21tb25FT0wpOwotCQl9Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQkJLy8gcmV0dXJuIG5ldyBEYXRhSW5wdXRTdHJlYW0obmV3Ci0JCS8vIEZpbGVJbnB1dFN0cmVhbShjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpKSkucmVhZFVURigpOwotCX0KLQotCXN0YXRpYyBpbnQgdW5pcXVlTnVtID0gMDsKLQotCXB1YmxpYyBzdGF0aWMgSUNTU01vZGVsIGNyZWF0ZU1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QiICsgdW5pcXVlTnVtKysgKyAiLmNzcyIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihjb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIChJQ1NTTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXBTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpOwotCQlXcml0ZXIgd3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZSk7Ci0JCXdyaXRlci53cml0ZShzdHJpbmcpOwotCQl3cml0ZXIuY2xvc2UoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvTnVsbElucHV0U3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL051bGxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGVlOWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvTnVsbElucHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrKGludCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KSB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFya1N1cHBvcnRlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gbWFya1N1cHBvcnRlZCgpIHsKLQkJLy8gd2UgY2FuIG1hcmsgbm90aGluZy4KLQkJLy8gYW5kLCB3ZSBhcmUgdXNpbmcgdGhpcyBOdWxsIGNsYXNzIHNwZWNpZmljYWxseSBmb3IKLQkJLy8gYSAiZmFrZSIgcmVzZXR0YWJsZSBzdHJlYW0uCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVzZXQoKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jc2tpcChsb25nKQotCSAqLwotCXB1YmxpYyBsb25nIHNraXAobG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YjM3MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1M2EzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5DU1NDb3JlVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZWE2ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnRlc3RJbXBvcnRzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2RjYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgotICAgIDx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9InRlc3RJbXBvcnRzIj4KLSAgICAgICAgPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbnRleHQtcm9vdCIgdmFsdWU9InRlc3RJbXBvcnRzIi8+Ci0gICAgPC93Yi1tb2R1bGU+Ci08L3Byb2plY3QtbW9kdWxlcz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdmNzdmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmFjZXRlZC1wcm9qZWN0PgotICA8Zml4ZWQgZmFjZXQ9IndzdC53ZWIiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0id3N0LndlYiIgdmVyc2lvbj0iMS4wIi8+Ci08L2ZhY2V0ZWQtcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9iYXNlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9iYXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4ZTNhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvYmFzZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNjb250ZW50IHsKLSAgd2lkdGg6IDc1MHB4OwotICBtYXJnaW46IDAgYXV0bzsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvY3ljbGUwLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDVjYTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTAuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1AaW1wb3J0IHVybCgiY3ljbGUxLmNzcyIpOw0KLSNjeWNsZTAgew0KLSAgY29sb3I6IHJlZDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2N5Y2xlMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvY3ljbGUxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMwZTU2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvY3ljbGUxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotQGltcG9ydCB1cmwoImN5Y2xlMi5jc3MiKTsNCi0jY3ljbGUxIHsNCi0gIGNvbG9yOiBibHVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvY3ljbGUyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI1ZWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9jeWNsZTIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1AaW1wb3J0IHVybCgiY3ljbGUwLmNzcyIpOw0KLSNjeWNsZTIgew0KLSAgY29sb3I6IGJsYWNrOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvaW1wb3J0RE5FLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9pbXBvcnRETkUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDFkM2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9pbXBvcnRETkUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQGltcG9ydCB1cmwoInRoaXNmaWxlZG9lc250ZXhpc3QuY3NzIik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2ltcG9ydE1ldGhvZHMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L2ltcG9ydE1ldGhvZHMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDNmOTIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdEltcG9ydHMvV2ViQ29udGVudC9pbXBvcnRNZXRob2RzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotQGltcG9ydCB1cmwoImJhc2UuY3NzIik7DQotQGltcG9ydCB1cmwoYmFzZS5jc3MpOw0KLUBpbXBvcnQgImJhc2UuY3NzIjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvc2l0ZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvc2l0ZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YjJlZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L3NpdGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotQGltcG9ydCB1cmwoImJhc2UuY3NzIik7Ci0KLWEgewotICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gIGNvbG9yOiBibHVlOwotfQotCi1hOmhvdmVyIHsKLSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0SW1wb3J0cy9XZWJDb250ZW50L3N0eWxlL3N1Yi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvc3R5bGUvc3ViLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0Yzk0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RJbXBvcnRzL1dlYkNvbnRlbnQvc3R5bGUvc3ViLmNzcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUBpbXBvcnQgdXJsKCIuLi9iYXNlLmNzcyIpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODQ3MWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1jc3NlbmNvZGluZ3Rlc3RzLmphcgotamF2YUNvbXBpbGVyLmNzc2VuY29kaW5ndGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTM1OGQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMzc0Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjYwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGNzc2VuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY5ZTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGNzc2VuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGNzc2VuY29kaW5ndGVzdHMuamFyCi1zb3VyY2UuY3NzZW5jb2Rpbmd0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzZW5jb2Rpbmd0ZXN0cy5qYXIgPSBiaW4vCi0gICAgICAgICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0MzQyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gQ1NTIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MGQ1NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTRW5jb2RpbmdUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1M7Ci0KLXB1YmxpYyBjbGFzcyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtDU1NFbmNvZGluZ1Rlc3Rlci5jbGFzcywgQ1NTSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkNTUyBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3OTljMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTQ4Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDU1NFbmNvZGluZ1Rlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJjc3MvIjsKLQkvLyBwcml2YXRlIGZpbmFsIFN0cmluZyBwbHVnaW5Mb2NhdGlvbiA9Ci0JLy8gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZVN0cmVhbShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZElBTkFFbmNvZGluZywgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gbnVsbDsKLQotCQkJaWYgKGVuY29kaW5nTWVtZW50byAhPSBudWxsKSB7Ci0JCQkJZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZSgpOwotCQkJfQotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJaWYgKGV4cGVjdGVkSUFOQUVuY29kaW5nID09IG51bGwpIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZyA9PSBmb3VuZElBTkFFbmNvZGluZzsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCQkJfQotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKQotCQkJLy8gaWYKLQkJCS8vIHRocm93cyBleGNlcHRpb24uCi0JCQlpZiAoZm91bmRJQU5BRW5jb2RpbmcgIT0gbnVsbCkgewotCQkJCWVuc3VyZUNhblJlYWQoZmlsZW5hbWUsIGZvdW5kSUFOQUVuY29kaW5nLCBpc3RyZWFtKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmQuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbXB0eUZpbGUuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgbnVsbCwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RVVDSlAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiRVVDLUpQIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tMjAyMi1KUCIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9FbmNvZGluZy5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBudWxsLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub25TdGFuZGFyZElsbEZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaGlmdEpJUygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X3NqaXMuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlNISUZUX0pJUyIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmUuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZU1hbGZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlTWFsZm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2Qk9NLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjYwMzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBDU1NIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCWJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIFN0cmluZyBmY2hhcnNldDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImNzcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IHRoaXMuZmlsZUhvbWUgKyB0aGlzLmZpbGVEaXI7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUpIHsKLQkJdHJ5IHsKLQkJCWRvVGVzdEZpbGUoQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKSwgZXhwZWN0ZWROYW1lLCBmaW5hbFRva2VuVHlwZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igb3BlbmluZyBmaWxlIFwiIiArIGZpbGVuYW1lICsiXCIiKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFJlYWRlciBmaWxlUmVhZGVyLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNTU0hlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJdG9rZW5pemVyID0gbmV3IENTU0hlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0KLQkJSGVhZFBhcnNlclRva2VuIHJlc3VsdFRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gdGhpcy5mY2hhcnNldDsKLQkJZmlsZVJlYWRlci5jbG9zZSgpOwotCQlpZiAoZmluYWxUb2tlblR5cGUgIT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBlbmQgYXMgZXhwZWN0ZWQuIGZvdW5kOiAgIiArIHRva2VuLmdldFR5cGUoKSwgZmluYWxUb2tlblR5cGUuZXF1YWxzKHRva2VuLmdldFR5cGUoKSkpOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGV4cGVjdGVkTmFtZSA9PSBudWxsKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRUb2tlbiA9PSBudWxsKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUpKTsKLQkJCX0KLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlID09IG51bGwpIHsKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWVsc2UgewotCQkJcmVzdWx0ID0gdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5TdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VbkRlbGltaXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBHaXZlJ3MgcHJpb3JpdHkgdG8gZW5jb2RpbmcgdmFsdWUsIGlmIGZvdW5kIGVsc2UsIGxvb2tzIGZvciBjb250ZW50VHlwZQotCSAqIHZhbHVlOwotCSAqLwotCXByaXZhdGUgSGVhZFBhcnNlclRva2VuIHBhcnNlSGVhZGVyKENTU0hlYWRUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gZmluYWxUb2tlbiA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJU3RyaW5nIHRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCWlmKGNhbkhhbmRsZUFzVW5pY29kZVN0cmVhbSh0b2tlblR5cGUpKSB7Ci0KLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gQ1NTSGVhZFRva2VuaXplckNvbnN0YW50cy5DSEFSU0VUX1JVTEUpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJdGhpcy5mY2hhcnNldCA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpOwotCQlmaW5hbFRva2VuID0gdG9rZW47Ci0JCXJldHVybiBmaW5hbFRva2VuOwotCi0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBjYW5IYW5kbGVBc1VuaWNvZGVTdHJlYW0oU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIGNhbkhhbmRsZUFzVW5pY29kZSA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjgzQnl0ZUJPTSkgewotCQkJY2FuSGFuZGxlQXNVbmljb2RlID0gdHJ1ZTsKLQkJCXRoaXMuZmNoYXJzZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2QkUgfHwgdG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2TEUpIHsKLQkJCWNhbkhhbmRsZUFzVW5pY29kZSA9IHRydWU7Ci0JCQl0aGlzLmZjaGFyc2V0ID0gIlVURi0xNiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gY2FuSGFuZGxlQXNVbmljb2RlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW1wdHlGaWxlLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0RVVDSlAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJFVUMtSlAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9qaXMuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy0yMDIyLUpQIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub0VuY29kaW5nLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub25TdGFuZGFyZElsbEZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0U2hpZnRKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X3NqaXMuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlNISUZUX0pJUyIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZMRSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZU1hbGZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlTWFsZm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZU1hbGZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlTWFsZm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZMRSIpOwotCX0KLQkKLQkvKgotCQlzdW4uaW8uTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24KLQkJYXQgc3VuLmlvLkJ5dGVUb0NoYXJVVEY4LmNvbnZlcnQoQnl0ZVRvQ2hhclVURjguamF2YToyNjIpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2RlciRDb252ZXJ0ZXJTRC5jb252ZXJ0SW50byhTdHJlYW1EZWNvZGVyLmphdmE6MzE0KQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuaW1wbFJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjM2NCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyLnJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjI1MCkKLQkJYXQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlci5yZWFkKElucHV0U3RyZWFtUmVhZGVyLmphdmE6MjEyKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplci55eV9hZHZhbmNlKENTU0hlYWRUb2tlbml6ZXIuamF2YTozMzcpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5DU1NIZWFkVG9rZW5pemVyLnByaW1HZXROZXh0VG9rZW4oQ1NTSGVhZFRva2VuaXplci5qYXZhOjQ3MCkKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXIuZ2V0TmV4dFRva2VuKENTU0hlYWRUb2tlbml6ZXIuamF2YToyMjkpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0hlYWRUb2tlbml6ZXJUZXN0ZXIucGFyc2VIZWFkZXIoQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjg4KQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjUyKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjMxKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLnRlc3RVVEYxNkJPTShDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MTg2KQotCSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLypTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uY3NzIjsKLQkJWmlwcGVkVGVzdCB0ZXN0ID0gbmV3IFppcHBlZFRlc3QoKTsKLQkJdGVzdC5zZXRVcCgpOwotCQlJRmlsZSBmaWxlID0gdGVzdC5nZXRGaWxlKGZpbGVuYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlLmdldExvY2F0aW9uVVJJKCkuZ2V0UGF0aCgpKTsKLQkJZG9UZXN0RmlsZShmaWxlUmVhZGVyLCAiVVRGLTE2IiwgbnVsbCk7Ci0JCXRlc3Quc2h1dERvd24oKTsqLwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0VuY29kaW5nUGFyc2VyQ29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9FbmNvZGluZ1BhcnNlckNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDE0NGE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0VuY29kaW5nUGFyc2VyQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLQotcHVibGljIGludGVyZmFjZSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cyB7Ci0KLQlmaW5hbCBTdHJpbmcgRU9GID0gIkVPRiI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSA9ICJJbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBJbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlID0gIkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIE1BWF9DSEFSU19SRUFDSEVEID0gIk1BWF9DSEFSU19SRUFDSEVEIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBTdHJpbmdWYWx1ZSA9ICJzdHJ2YWwiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUgPSAiVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjE2QkUgPSAiVVRGMTZCRSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjE2TEUgPSAiVVRGMTZMRSI7IC8vJE5PTi1OTFMtMSQKLQotCi0JcHVibGljIGZpbmFsIFN0cmluZyBVVEY4M0J5dGVCT00gPSAiVVRGODNCeXRlQk9NIjsgLy8kTk9OLU5MUy0xJAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVkMTU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvdXRmMTZiZS5jc3MiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy91dGYxNmxlLmNzcyIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZU1hbGZvcm1lZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL3V0ZjE2YmVNYWxmb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlTWFsZm9ybWVkKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvdXRmMTZsZU1hbGZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzIiwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNjUzMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI1NmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIkVVQy1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIqPNo9Mgo9CltKW3pcOlryI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ3NjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tMjAyMi1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIhskQiNNI1MbKEIgGyRCI1AlNCU3JUMlLxsoQiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjljZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJTSElGVF9KSVMiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKCbIJyIIJvg1ODVoNig04iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjA2YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQk9EWSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk1TIFNhbnMgU2VyaWYiOw0KLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLX0NCi0NCi1URCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotVEggew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLUgxIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDE0cHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBjZW50ZXINCi19DQotDQotSDIgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXINCi19DQotDQotSDMgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBpdGFsaWMgIA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5OTdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTY7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjOGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotDQotDQotICAgIEBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNTFkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGMwNWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1MjdjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZU1hbGZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOTRmZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGUuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2RkNjc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlTWFsZm9ybWVkLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjYyMWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0c18xLjAuMC5qYXIKLWNzc3VpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotUGVyZm9ybWFuY2VSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxZDE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWQ5ZDI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuQ1NTVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS51aS5pZGUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3N1aXRlc3RzLmphcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQxYTg4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgY3NzdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBzcmMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IGNzc3VpdGVzdHMuamFyCi1zb3VyY2UuY3NzdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxMmE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gQ1NTIFVJIFRlc3RzIFBsdWctaW4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkMTc4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJzb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyIiB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5DU1NDb2RlRm9sZGluZ1Rlc3QiLz4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uCi0JICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jc3MudWkucHJvcG9zYWxJbmZvIj4KLSAgICA8cHJvcG9zYWxJbmZvCi0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuY29udGVudGFzc2lzdC5Qcm9wb3NhbEluZm8iPgotICAgIDwvcHJvcG9zYWxJbmZvPgotCTwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTRlMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuY29udGVudGFzc2lzdC5UZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5DU1NDb2RlRm9sZGluZ1Rlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci0KLXB1YmxpYyBjbGFzcyBDU1NVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IENTU1VJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIENTU1VJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIFVJIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MsICJDU1MgVUkgRXhpc3RlbmNlIFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuY2xhc3MpKTsKLQkJYWRkVGVzdChDU1NDb2RlRm9sZGluZ1Rlc3Quc3VpdGUoKSk7Ci0JCWFkZFRlc3QoVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuc3VpdGUoKSk7Ci0JfQotfQkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWYwZjA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgQ1NTVUlUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIENTU1VJVGVzdHNQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQ1NTVUlUZXN0c1BsdWdpbigpIHsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENTU1VJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSBmaWxlIGF0IHRoZSBnaXZlbgotCSAqIHBsdWctaW4gcmVsYXRpdmUgcGF0aC4KLQkgKgotCSAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoCi0JICogQHJldHVybiB0aGUgaW1hZ2UgZGVzY3JpcHRvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgewotCQlyZXR1cm4gQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKCJvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzIiwgcGF0aCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzMTI3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5pbnRlcm5hbC5DU1NVSVBsdWdpbjsKLQotLyoqCi0gKiAKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogdGVzdHMgaWYgQ1NTVUlQbHVnaW4gY2FuIGJlIGxvYWRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeGlzdHMoKSB7Ci0JCVBsdWdpbiBwID0gQ1NTVUlQbHVnaW4uZ2V0RGVmYXVsdCgpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBsb2FkIENTUyBVSSBwbHVnaW4iLCBwKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTVmZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLQotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gQ1NTVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGVudHJ5UGF0aCArICIgLT4gIiArIHRhcmdldFBhdGgpOwotCQl9Ci0JfQotCi0Jc3RhdGljIElGaWxlIF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gQ1NTVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIgKGVnLgotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aAotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlIChlZy4KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWFkNGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogCi0gKiAvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXh0LklDU1NQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudmlld3MuY29udGVudG91dGxpbmUuQ1NTQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudmlld3MucHJvcGVydGllcy5DU1NQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgY3NzIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgQ1NTQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvLmdldENsYXNzKCksIENTU1Byb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvY3VtZW50YXRpb25UZXh0SG92ZXIoKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5ET0NVTUVOVEFUSU9OVEVYVEhPVkVSLCBJQ1NTUGFydGl0aW9ucy5TVFlMRSk7Ci0JCWFzc2VydE51bGwoInVuZXhwZWN0ZWQgZG9jdW1lbnRhdGlvbiB0ZXh0IGhvdmVyIGZvciAiICsgSUNTU1BhcnRpdGlvbnMuU1RZTEUsIG8pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvY29udGVudGFzc2lzdC9Qcm9wb3NhbEluZm8uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvY29udGVudGFzc2lzdC9Qcm9wb3NhbEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmNGQxNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Byb3Bvc2FsSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5pbnRlcm5hbC50ZXh0Lmh0bWwuQnJvd3NlckluZm9ybWF0aW9uQ29udHJvbElucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5tZXRhbW9kZWwuQ1NTTU1Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5JUHJvcG9zYWxJbmZvOwotCi1wdWJsaWMgY2xhc3MgUHJvcG9zYWxJbmZvIGV4dGVuZHMgQnJvd3NlckluZm9ybWF0aW9uQ29udHJvbElucHV0IGltcGxlbWVudHMgSVByb3Bvc2FsSW5mbyB7Ci0KLQlwcml2YXRlIENTU01NTm9kZSBmTm9kZTsKLQotCXB1YmxpYyBQcm9wb3NhbEluZm8oKSB7Ci0JCXN1cGVyKG51bGwpOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0SW5wdXRFbGVtZW50KCkgewotCQlyZXR1cm4gZk5vZGU7Ci0JfQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5JUHJvcG9zYWxJbmZvI3NldElucHV0RWxlbWVudChvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwubWV0YW1vZGVsLkNTU01NTm9kZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbnB1dEVsZW1lbnQoQ1NTTU1Ob2RlIG5vZGUpIHsKLQkJZk5vZGUgPSBub2RlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SHRtbCgpIHsKLQkJcmV0dXJuIG51bGw7Ly9mTm9kZSAhPSBudWxsID8gICI8Yj4iICsgZk5vZGUuZ2V0TmFtZSgpICsgIjwvYj4iIDogIiI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRJbnB1dE5hbWUoKSB7Ci0JCXJldHVybiBmTm9kZSAhPSBudWxsID8gZk5vZGUuZ2V0TmFtZSgpIDogIiI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjBlNjQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsRXh0ZW5zaW9uNTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycyI7Ci0JCi0JLyoqIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVwZW5kIG9uIEpTRFQgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9TQ1JJUFRfTkFUVVJFX0lEID0gIm9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuanNOYXR1cmUiOwotCQotCS8qKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0IjsKLQkKLQkvKiogVGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlIHRlc3RzIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCS8qKgotCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWxyZWFkeSBvcGVuIGVkaXRvcnMgc28gdGhhdCB0aGUgdGVzdHMgZG9uJ3QgZ28gdGhyb3VnaAotCSAqIHRoZSB0cm91YmxlIG9mIG9wZW5pbmcgdGhlIHNhbWUgZWRpdG9ycyBvdmVyIGFuZCBvdmVyIGFnYWluCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgTWFwIGZGaWxlVG9FZGl0b3JNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzKCkgewotCQlzdXBlcigiVGVzdCBDU1MgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5jbGFzcywgIlRlc3QgQ1NTIENvbnRlbnQgQXNzaXN0IENvbXB1dGVycyIpOwotCQlyZXR1cm4gbmV3IFRlc3RDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAodHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3JQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEwMSwgMCwgMTAxLCAxMDF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmNzcyIsIDIsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIyLCAwLCAxMjIsIDEyMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuY3NzIiwgNSwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvblZhbHVlUHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMSwgMCwgMTEsIDExfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5jc3MiLCA5LCAxNiwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eURvYygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTAzLCAxLCAxMDIsIDEwM307Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDIuY3NzIiwgMCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hTZWxlY3RvclByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MjAsIDAsIDIwLCAyMH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuY3NzIiwgMiwgMSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hEZWNsYXJhdGlvblByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NCwgMCwgNCwgNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDQuY3NzIiwgMywgMTQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluaXNoRGVjbGFyYXRpb25WYWx1ZVByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NCwgMCwgNCwgNH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDQuY3NzIiwgNywgMjMsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRpdGlvbmFsUHJvcG9zYWxJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJ0ZXN0NC5jc3MiKTsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlpbnQgb2Zmc2V0ID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZUxlbmd0aCg3KSArIDIzOwotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IGdldFByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCwgNCk7Ci0JCQotCQlhc3NlcnRUcnVlKCJOb3QgZW5vdWdoIHBhZ2VzIiwgcGFnZXMubGVuZ3RoID4gMCk7Ci0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wb3NhbHMgPSBwYWdlc1swXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wb3NhbHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChwcm9wb3NhbHNbaV0gaW5zdGFuY2VvZiBJQ29tcGxldGlvblByb3Bvc2FsRXh0ZW5zaW9uNSkgewotCQkJCU9iamVjdCBvYmogPSAoKElDb21wbGV0aW9uUHJvcG9zYWxFeHRlbnNpb241KSBwcm9wb3NhbHNbaV0pLmdldEFkZGl0aW9uYWxQcm9wb3NhbEluZm8obnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiQWRkaXRpb25hbCBpbmZvIG11c3QgYmUgb2YgdHlwZSBQcm9wb3NhbEluZm8iLCBvYmogaW5zdGFuY2VvZiBQcm9wb3NhbEluZm8pOwotCQkJCVByb3Bvc2FsSW5mbyBpbmZvID0gKFByb3Bvc2FsSW5mbykgb2JqOwotCQkJCWFzc2VydE5vdE51bGwoIkNTU01NTm9kZSBmb3IgUHJvcG9zYWwgSW5mbyBzaG91bGQgbm90IGJlIG51bGwiLCBpbmZvKTsKLQkJCX0KLQkJfQotCX0KLQkvKioKLQkgKiA8cD5SdW4gYSBwcm9wb3NhbCB0ZXN0IGJ5IG9wZW5pbmcgdGhlIGdpdmVuIGZpbGUgYW5kIGludm9raW5nIGNvbnRlbnQgYXNzaXN0IGZvcgotCSAqIGVhY2ggZXhwZWN0ZWQgcHJvcG9zYWwgY291bnQgYXQgdGhlIGdpdmVuIGxpbmUgbnVtYmVyIGFuZCBsaW5lIGNoYXJhY3RlcgotCSAqIG9mZnNldCBhbmQgdGhlbiBjb21wYXJlIHRoZSBudW1iZXIgb2YgcHJvcG9zYWxzIGZvciBlYWNoIGludm9jYXRpb24gKHBhZ2VzKSB0byB0aGUKLQkgKiBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZU5hbWUKLQkgKiBAcGFyYW0gbGluZU51bQotCSAqIEBwYXJhbSBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0Ci0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcnVuUHJvcG9zYWxUZXN0KFN0cmluZyBmaWxlTmFtZSwKLQkJCWludCBsaW5lTnVtLCBpbnQgbGluZVJlbGF0aXZlQ2hhck9mZnNldCwKLQkJCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpIHRocm93cyBFeGNlcHRpb257Ci0JCQotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZShmaWxlTmFtZSk7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCWludCBvZmZzZXQgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXRMaW5lT2Zmc2V0KGxpbmVOdW0pICsgbGluZVJlbGF0aXZlQ2hhck9mZnNldDsKLQotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IGdldFByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cy5sZW5ndGgpOwotCQkKLQkJdmVyaWZ5UHJvcG9zYWxDb3VudHMocGFnZXMsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5JbnZva2UgY29udGVudCBhc3Npc3Qgb24gdGhlIGdpdmVuIHZpZXdlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBwYWdlcwotCSAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdHMgb2YgZWFjaCBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHBhcmFtIHBhZ2VDb3VudAotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIGdldFByb3Bvc2FscyhTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIGludCBvZmZzZXQsIGludCBwYWdlQ291bnQpIHRocm93cyBFeGNlcHRpb24gewotCQkvL3NldHVwIHRoZSB2aWV3ZXIKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTKCk7Ci0JCUNvbnRlbnRBc3Npc3RhbnQgY29udGVudEFzc2lzdGFudCA9IChDb250ZW50QXNzaXN0YW50KWNvbmZpZ3VyYXRpb24uZ2V0Q29udGVudEFzc2lzdGFudCh2aWV3ZXIpOwotCQl2aWV3ZXIuY29uZmlndXJlKGNvbmZpZ3VyYXRpb24pOwotCQl2aWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShvZmZzZXQsIDApOwotCQkKLQkJLy9nZXQgdGhlIHByb2Nlc3NvcgotCQlTdHJpbmcgcGFydGl0aW9uVHlwZUlEID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFydGl0aW9uKG9mZnNldCkuZ2V0VHlwZSgpOwotCQlJQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBjb250ZW50QXNzaXN0YW50LmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3IocGFydGl0aW9uVHlwZUlEKTsKLQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBhYm91dCB0byBzdGFydAotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZCA9IENvbnRlbnRBc3Npc3RhbnQuY2xhc3MuCi0JCSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uQmVnaW5FdmVudCIsIG5ldyBDbGFzc1tdIHtib29sZWFuLmNsYXNzfSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbmV3IE9iamVjdFtdIHtCb29sZWFuLlRSVUV9KTsKLQotCQkvL2dldCBjb250ZW50IGFzc2lzdCBzdWdnZXN0aW9ucwotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW3BhZ2VDb3VudF1bXTsKLQkJZm9yKGludCBwID0gMDsgcCA8IHBhZ2VDb3VudDsgKytwKSB7Ci0JCQlwYWdlc1twXSA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCk7Ci0JCX0KLQkJCi0JCS8vZmlyZSBjb250ZW50IGFzc2lzdCBzZXNzaW9uIGVuZGluZwotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotICAgICAgICBnZXREZWNsYXJlZE1ldGhvZCgiZmlyZVNlc3Npb25FbmRFdmVudCIsIG51bGwpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbnVsbCk7Ci0JCQotCQlyZXR1cm4gcGFnZXM7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbXBhcmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMgcGVyIHBhZ2UgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgcHJvcG9zYWxzCi0JICogcGVyIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHBhZ2VzCi0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeVByb3Bvc2FsQ291bnRzKElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzLCBpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB7Ci0JCVN0cmluZ0J1ZmZlciBlcnJvciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yKGludCBwYWdlID0gMDsgcGFnZSA8IGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoOyArK3BhZ2UpIHsKLQkJCWlmKGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0gPiBwYWdlc1twYWdlXS5sZW5ndGgpIHsKLQkJCQllcnJvci5hcHBlbmQoIlxuUHJvcG9zYWwgcGFnZSAiICsgcGFnZSArICIgZGlkIG5vdCBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzOiB3YXMgIiArCi0JCQkJCQlwYWdlc1twYWdlXS5sZW5ndGggKyAiIGV4cGVjdGVkICIgKyBleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdKTsKLQkJCX0KLQkJfQotCQkKLQkJLy9pZiBlcnJvcnMgcmVwb3J0IHRoZW0KLQkJaWYoZXJyb3IubGVuZ3RoKCkgPiAwKSB7Ci0JCQlBc3NlcnQuZmFpbChlcnJvci50b1N0cmluZygpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIGZpbGUgbmFtZSBpbiA8Y29kZT5mUHJvamVjdDwvY29kZT4gYXR0ZW1wdHMgdG8gZ2V0IGFuIDxjb2RlPklGaWxlPC9jb2RlPgotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB0aGUgdGVzdCBmYWlscy48L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0Ci0JICogQHJldHVybiB0aGUgPGNvZGU+SUZpbGU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPGNvZGU+bmFtZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIDxjb2RlPmZpbGU8L2NvZGU+IGdldCBhbiBlZGl0b3IgZm9yIGl0LiBJZiBhbiBlZGl0b3IgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHJldHJpZXZlZCBmb3IgdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+IHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFscmVhZHkKLQkgKiBvcGVuIGVkaXRvci48L3A+Ci0JICogCi0JICogPHA+V2hlbiBvcGVuaW5nIHRoZSBlZGl0b3IgaXQgd2lsbCBhbHNvIHN0YW5kYXJkaXplZCB0aGUgbGluZQotCSAqIGVuZGluZ3MgdG8gPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIG9wZW4gYW5kIHJldHVybiBhbiBlZGl0b3IgZm9yIHRoaXMKLQkgKiBAcmV0dXJuIDxjb2RlPlN0cnVjdHVyZWRUZXh0RWRpdG9yPC9jb2RlPiBvcGVuZWQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotCQkKLQkJaWYoZWRpdG9yID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlLCB0cnVlKTsKLQkJCQlpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJZWRpdG9yID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcillZGl0b3JQYXJ0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIik7Ci0JCQkJfQotCQkJCQotCQkJCWlmKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCXN0YW5kYXJkaXplTGluZUVuZGluZ3MoZWRpdG9yKTsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogPHA+TGluZSBlbmRpbmdzIGNhbiBiZSBhbiBpc3N1ZSB3aGVuIHJ1bm5pbmcgdGVzdHMgb24gZGlmZmVyZW50IE9Tcy4KLQkgKiBUaGlzIGZ1bmN0aW9uIHN0YW5kYXJkaXplcyB0aGUgbGluZSBlbmRpbmdzIHRvIHVzZSA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogPHA+SXQgd2lsbCBnZXQgdGhlIHRleHQgZnJvbSB0aGUgZ2l2ZW4gZWRpdG9yLCBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncywKLQkgKiBhbmQgdGhlbiBzYXZlIHRoZSBlZGl0b3I8L3A+Ci0JICogCi0JICogQHBhcmFtIGVkaXRvciBzdGFuZGFyZGl6ZSB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSB0ZXh0IHByZXNlbnRlZCBpbiB0aGlzCi0JICogZWRpdG9yLgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwIGV4dGVuZHMgVGVzdFNldHVwIHsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkJCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBUZXN0Q1NTQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwKFRlc3QgdGVzdCkgewotCQkJc3VwZXIodGVzdCk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBiZWZvcmUgYWxsIG9mIHRoZSB0ZXN0czwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjc2V0VXAoKQotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vc2V0dXAgcHJvcGVydGllcwotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJCQotCQkJLy9zZXR1cCBwcm9qZWN0Ci0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW10ge0pBVkFfU0NSSVBUX05BVFVSRV9JRH0pOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW48L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3RlYXJEb3duKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL2Nsb3NlIG91dCB0aGUgZWRpdG9ycwotCQkJSXRlcmF0b3IgaXRlciA9IGZGaWxlVG9FZGl0b3JNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWl0ZXIubmV4dCgpOwotCQkJCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JCQkJZWRpdG9yLmNsb3NlKGZhbHNlKTsKLQkJCX0KLQkJCQotCQkJLy9yZW1vdmUgcHJvamVjdAotCQkJZlByb2plY3QuZGVsZXRlKHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCi0JCQkvL3Jlc3RvcmUgcHJvcGVydGllcwotCQkJaWYgKHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL0NTU0NvZGVGb2xkaW5nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvQ1NTQ29kZUZvbGRpbmdUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYTQwYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvQ1NTQ29kZUZvbGRpbmdUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25Bbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVjb25jaWxlLklTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyOwotCi0vKioKLSAqIDxwPlRlc3RzIHRoYXQgY29kZSBmb2xkaW5nIGFubm90YXRpb25zIGFyZSBjb3JyZWN0bHkgYWRkZWQvcmVtb3ZlZCBmcm9tIENTUyBEb2N1bWVudHM8L3A+Ci0gKiA8cD5BbGwgb2YgdGhlc2UgdGVzdHMgdXNlIHRoZSBzYW1lIHByb2plY3QgYW5kIHdoZW4gcG9zc2libGUgdGhlIHNhbWUgb3BlbiBkb2N1bWVudHM8L3A+Ci0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxDb2RlRm9sZGluZ1Rlc3QgU2ltaWxhciBUZXN0IC0gWE1MIENvZGUgRm9sZGluZyBUZXN0Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyLkNTU0NvZGVGb2xkaW5nVGVzdCBTaW1pbGFyIFRlc3QgLSBDU1MgQ29kZSBGb2xkaW5nIFRlc3QKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIuRFREQ29kZUZvbGRpbmdUZXN0IFNpbWlsYXIgVGVzdCAtIERURCBDb2RlIEZvbGRpbmcgVGVzdAotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29kZUZvbGRpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UgaW1wbGVtZW50cyBJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciB7Ci0JLyoqIG1heCBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfV0FJVF9USU1FID0gNDAwMDsKLQkKLQkvKiogYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0FJVF9USU1FID0gMjAwOwotCQotCS8qKgotCSAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJDU1NDb2RlRm9sZGluZ1Rlc3QiOwotCQotCS8qKgotCSAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcwotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL2ZvbGRpbmciOwotCQotCS8qKgotCSAqIFRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZSB0ZXN0cyB1c2UKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCS8qKgotCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWxyZWFkeSBvcGVuIGVkaXRvcnMgc28gdGhhdCB0aGUgdGVzdHMgZG9uJ3QgZ28gdGhyb3VnaAotCSAqIHRoZSB0cm91YmxlIG9mIG9wZW5pbmcgdGhlIHNhbWUgZWRpdG9ycyBvdmVyIGFuZCBvdmVyIGFnYWluCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqIHRoZSBsYXN0IHtAbGluayBJRG9jdW1lbnR9IHRvIGJlIHJlY29uY2lsZWQgKi8KLQlwcml2YXRlIHN0YXRpYyBJRG9jdW1lbnQgZlJlY29uY2lsZWREb2MgPSBudWxsOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIENTU0NvZGVGb2xkaW5nVGVzdCgpIHsKLQkJc3VwZXIoIkNTUyBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgQ1NTQ29kZUZvbGRpbmdUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKENTU0NvZGVGb2xkaW5nVGVzdC5jbGFzcywgIkNTUyBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCQlyZXR1cm4gbmV3IENTU0NvZGVGb2xkaW5nVGVzdFNldHVwKHRzKTsKLQotCX0KLQkKLQkvKioKLQkgKiBSZXNldCB0aGUgc3RhdGUgYmV0d2VlbiB0ZXN0cwotCSAqIAotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQkKLQkJZlJlY29uY2lsZWREb2MgPSBudWxsOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhlIGluaXRpYWxseSBwbGFjZWQgZm9sZGluZyBhbm5vdGF0aW9uczwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdEZvbGRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIkNTU0ZvbGRpbmdUZXN0MS5jc3MiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQlMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQwMSwgMTIwKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzMzLCA2MikpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE4MSwgNzIpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigyNTgsIDY5KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjEsIDExMykpOwotCQkKLQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkoZWRpdG9yLmdldFRleHRWaWV3ZXIoKSwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhhdCBmb2xkaW5nIGFubm90YXRpb25zIGFyZSB1cGRhdGVkIGFmdGVyIG5vZGUgaXMgcmVtb3ZlZDwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlTm9kZSgpIHRocm93cyBFeGNlcHRpb257Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJDU1NGb2xkaW5nVGVzdDEuY3NzIik7Ci0JCQotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQkKLQkJdHJ5IHsKLQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCQlJRG9jdW1lbnQgZG9jID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlkb2MucmVwbGFjZSgyNTMsIDc2LCAiIik7Ci0JCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCi0JCQlmaW5hbCBMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzMjUsIDEyMCkpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigyMSwgMTEzKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE4MSwgNzIpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjU3LCA2MikpOwotCQkJCi0JCQl3YWl0Rm9yUmVjb25jaWxlVGhlblZlcmlmeSh2aWV3ZXIsIGV4cGVjdGVkUG9zaXRpb25zKTsKLQkJfSBjYXRjaChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJUZXN0IGlzIGJyb2tlbiwgcmVwbGFjZSBsb2NhdGlvbiBoYXMgYmVjb21lIGludmFsaWQuXG4iICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPjxiPlRFU1Q6PC9iPiB0aGF0IGZvbGRpbmcgYW5ub3RhdGlvbnMgYXJlIHVwZGF0ZWQgYWZ0ZXIgbm9kZSBpcyBhZGRlZDwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkTm9kZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiQ1NTRm9sZGluZ1Rlc3QyLmNzcyIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQkJZG9jLnJlcGxhY2UoMjU1LCAwLCAiXG50ZCB7XG5ib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbn1cbiIpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjkxLCA2OSkpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigyNTYsIDMxKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDIxLCAxMTMpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNDM0LCAxMjApKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTgxLCA3MikpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzNjYsIDYyKSk7Ci0JCQkKLQkJCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KHZpZXdlciwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCQl9IGNhdGNoKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIlRlc3QgaXMgYnJva2VuLCBhZGQgbG9jYXRpb24gaGFzIGJlY29tZSBpbnZhbGlkLlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIGZpbGUgbmFtZSBpbiA8Y29kZT5mUHJvamVjdDwvY29kZT4gYXR0ZW1wdHMgdG8gZ2V0IGFuIDxjb2RlPklGaWxlPC9jb2RlPgotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB0aGUgdGVzdCBmYWlscy48L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0Ci0JICogQHJldHVybiB0aGUgPGNvZGU+SUZpbGU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPGNvZGU+bmFtZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIDxjb2RlPmZpbGU8L2NvZGU+IGdldCBhbiBlZGl0b3IgZm9yIGl0LiBJZiBhbiBlZGl0b3IgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHJldHJpZXZlZCBmb3IgdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+IHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFscmVhZHkKLQkgKiBvcGVuIGVkaXRvci48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGUgb3BlbiBhbmQgcmV0dXJuIGFuIGVkaXRvciBmb3IgdGhpcwotCSAqIEByZXR1cm4gPGNvZGU+U3RydWN0dXJlZFRleHRFZGl0b3I8L2NvZGU+IG9wZW5lZCBmcm9tIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPgotCSAqLwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRFZGl0b3IgZ2V0RWRpdG9yKElGaWxlIGZpbGUpICB7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilmRmlsZVRvRWRpdG9yTWFwLmdldChmaWxlKTsKLQkJCi0JCWlmKGVkaXRvciA9PSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQkJaWYoZWRpdG9yUGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCWVkaXRvciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpZWRpdG9yUGFydCk7Ci0JCQkJCXN0YW5kYXJkaXplTGluZUVuZGluZ3MoZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIik7Ci0JCQkJfQotCQkJCQotCQkJCWlmKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCWZGaWxlVG9FZGl0b3JNYXAucHV0KGZpbGUsIGVkaXRvcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gdmlld2VyIGZvciAiICsgZmlsZSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlICsgIiBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBlZGl0b3I7Ci0JfQotCQotCS8qKgotCSAqIFdhaXRzIGZvciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgdG8gZmluaXNoIGFuZCB0aGVuIHZlcmlmaWVzIHRoYXQgb25seSBhbmQgYWxsCi0JICogb2YgdGhlIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPiBoYXZlIGZvbGRpbmcgYW5ub3RhdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGUgZ2l2ZW4gPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+Ci0JICogaW4gaGVyZSBhZnRlciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgam9iIGhhcyBmaW5pc2hlZAotCSAqIEBwYXJhbSBleHBlY3RlZFBvc2l0aW9ucyBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlc2UgcG9zaXRpb25zIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICogYWZ0ZXIgdGhlIGRpcnR5IHJlZ2lvbiByZWNvbmNpbGVyIGpvYiBoYXMgZmluaXNoZWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkoZmluYWwgU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBmaW5hbCBMaXN0IGV4cGVjdGVkUG9zaXRpb25zKSB0aHJvd3MgRXhjZXB0aW9uewotCQlJRG9jdW1lbnQgZG9jID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCWludCB0aW1lID0gMDsKLQkJd2hpbGUoZG9jICE9IGZSZWNvbmNpbGVkRG9jICYmIHRpbWUgPD0gTUFYX1dBSVRfVElNRSkgewotCQkJVGhyZWFkLnNsZWVwKFdBSVRfVElNRSk7Ci0JCQl0aW1lICs9IFdBSVRfVElNRTsKLQkJfQotCQkKLQkJaWYoZG9jID09IGZSZWNvbmNpbGVkRG9jKSB7Ci0JCQl2ZXJpZnlBbm5vdGF0aW9uUG9zaXRpb25zKHZpZXdlciwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCQl9IGVsc2UgewotCQkJQXNzZXJ0LmZhaWwoIkRvY3VtZW50ICIgKyB2aWV3ZXIuZ2V0RG9jdW1lbnQoKSArICIgd2FzIG5vdCByZWNvbmNpbGVkIHdpdGggaW4gIiArIE1BWF9XQUlUX1RJTUUgKwotCQkJCQkiIHNvIGdhdmUgdXAgd2FpdGluZyBhbmQgaW4gdHVybiBjb3VsZCBub3QgdmFsaWRhdGUgZm9sZGluZyBhbm90YXRpb25zIik7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCBvbmx5IGFuZCBhbGwgb2YgdGhlIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPiBoYXZlIGZvbGRpbmcgYW5ub3RhdGlvbnMKLQkgKiBpbiB0aGUgZ2l2ZW4gPGNvZGU+dmlld2VyPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIgY2hlY2sgZm9yIGFubm90YXRpb25zIGF0IHRoZSBnaXZlbiA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4gaW4gaGVyZSAKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQb3NpdGlvbnMgY2hlY2sgZm9yIGFubm90YXRpb25zIGF0IHRoZXNlIHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gPGNvZGU+dmlld2VyPC9jb2RlPgotCSAqLwotCXByaXZhdGUgdm9pZCB2ZXJpZnlBbm5vdGF0aW9uUG9zaXRpb25zKFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJUHJvamVjdGlvbkFubm90YXRpb25Nb2RlbCBwcm9qZWN0aW9uTW9kZWwgPSB2aWV3ZXIuZ2V0UHJvamVjdGlvbkFubm90YXRpb25Nb2RlbCgpOwotCQlJdGVyYXRvciBhbm5vdGF0aW9uSXRlciA9IHByb2plY3Rpb25Nb2RlbC5nZXRBbm5vdGF0aW9uSXRlcmF0b3IoKTsKLQkJCi0JCS8vZXZlbiB3aXRoIHRoZSB3YWl0aW5nIGZvciB0aGUgam9iIHNvbWV0aW1lcyB0aGUgdGVzdCBpcyBqdXN0IHRvIGZhc3QKLQkJaW50IGF0dGVtcHRzID0gMDsKLQkJd2hpbGUoIWFubm90YXRpb25JdGVyLmhhc05leHQoKSAmJiBhdHRlbXB0cyA8IDMpIHsKLQkJCSsrYXR0ZW1wdHM7Ci0JCQlhbm5vdGF0aW9uSXRlciA9IHByb2plY3Rpb25Nb2RlbC5nZXRBbm5vdGF0aW9uSXRlcmF0b3IoKTsKLQkJCVRocmVhZC5zbGVlcCg1MDApOwotCQl9Ci0JCQotCQlMaXN0IHVuZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQotCQl3aGlsZShhbm5vdGF0aW9uSXRlci5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBvYmogPSBhbm5vdGF0aW9uSXRlci5uZXh0KCk7Ci0JCQlpZihvYmogaW5zdGFuY2VvZiBQcm9qZWN0aW9uQW5ub3RhdGlvbikgewotCQkJCVByb2plY3Rpb25Bbm5vdGF0aW9uIGFubm90YXRpb24gPSAoUHJvamVjdGlvbkFubm90YXRpb24pb2JqOwotCQkJCVBvc2l0aW9uIHBvcyA9IHByb2plY3Rpb25Nb2RlbC5nZXRQb3NpdGlvbihhbm5vdGF0aW9uKTsKLQkJCQkKLQkJCQlib29sZWFuIGZvdW5kID0gZXhwZWN0ZWRQb3NpdGlvbnMucmVtb3ZlKHBvcyk7Ci0JCQkJaWYoIWZvdW5kKSB7Ci0JCQkJCXVuZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKHBvcyk7Ci0JCQkJfQotCQkJCQotCQkJfQotCQl9Ci0JCQotCQlTdHJpbmcgZXJyb3IgPSAiIjsKLQkJaWYodW5leHBlY3RlZFBvc2l0aW9ucy5zaXplKCkgIT0gMCkgewotCQkJZXJyb3IgICs9ICJUaGVyZSB3ZXJlICIgKyB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSArICIgdW5leHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIGZvdW5kIjsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0JCQkJZXJyb3IgKz0gIlxuXHQiICsgdW5leHBlY3RlZFBvc2l0aW9ucy5nZXQoaSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSAhPSAwICkgewotCQkJZXJyb3IgKz0gIlxuVGhlcmUgd2VyZSAiICsgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICsgIiBleHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIG5vdCBmb3VuZCI7Ci0JCQlmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLQkJCQllcnJvciArPSAiXG5cdCIgKyBleHBlY3RlZFBvc2l0aW9ucy5nZXQoaSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGVycm9yLmxlbmd0aCgpICE9IDApIHsKLQkJCWZhaWwoZXJyb3IpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBDU1NDb2RlRm9sZGluZ1Rlc3RTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0KLQkJLyoqCi0JCSAqIERlZmF1bHQgY29uc3RydWN0b3IKLQkJICogCi0JCSAqIEBwYXJhbSB0ZXN0IGRvIHNldHVwIGZvciB0aGUgZ2l2ZW4gdGVzdAotCQkgKi8KLQkJcHVibGljIENTU0NvZGVGb2xkaW5nVGVzdFNldHVwKFRlc3QgdGVzdCkgewotCQkJc3VwZXIodGVzdCk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBiZWZvcmUgYWxsIG9mIHRoZSB0ZXN0czwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjc2V0VXAoKQotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCWluaXRpYWxpemVSZXNvdXJjZXMoKTsKLQkJCQotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQkKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9jbG9zZSBvdXQgdGhlIGVkaXRvcnMKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBmRmlsZVRvRWRpdG9yTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShpdGVyLmhhc05leHQoKSkgewotCQkJCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilpdGVyLm5leHQoKTsKLQkJCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCWVkaXRvci5jbG9zZShmYWxzZSk7Ci0JCQl9Ci0JCQkKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCQkKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIFNldCB1cCB0aGUgcHJvamVjdCBhbmQgd29ya2JlbmNoLCB0aGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgb25jZQotCQkgKi8KLQkJcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0aWFsaXplUmVzb3VyY2VzKCkgewotCQkJZlByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbnVsbCk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgUFJPSkVDVF9OQU1FKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBpZ25vcmUKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVjb25jaWxlLklTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyI2Fib3V0VG9CZVJlY29uY2lsZWQoKQotCSAqLwotCXB1YmxpYyB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCS8vaWdub3JlCi0JfQotCi0JLyoqCi0JICoga2VlcCB0cmFjayBvZiBsYXN0IGRvY3VtZW50IHJlY29uY2lsZWQKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVjb25jaWxlLklTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyI3JlY29uY2lsZWQob3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQsIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWwsIGJvb2xlYW4sIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlY29uY2lsZWQoSURvY3VtZW50IGRvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsIG1vZGVsLAotCQkJYm9vbGVhbiBmb3JjZWQsIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7Ci0JCWZSZWNvbmNpbGVkRG9jID0gZG9jdW1lbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdENTU0NvbnRlbnRBc3Npc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RDU1NDb250ZW50QXNzaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTkwNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdENTU0NvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNTU0NvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUFscmVhZHlFeGlzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VJblVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q1NTQ29udGVudEFzc2lzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBTdHJpbmcgcHJvamVjdE5hbWUgPSBudWxsOwotCXByb3RlY3RlZCBTdHJpbmcgZmlsZU5hbWUgPSBudWxsOwotCXByb3RlY3RlZCBTdHJpbmcgcmVzb3VyY2VzRm9sZGVyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbDsKLQlwcm90ZWN0ZWQgSUZpbGUgZmlsZSA9IG51bGw7Ci0KLQlwdWJsaWMgVGVzdENTU0NvbnRlbnRBc3Npc3QoKSB7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlwcm9qZWN0TmFtZSA9ICJDU1NDb250ZW50QXNzaXN0Rm9yTWVkaWEiOwotCQlmaWxlTmFtZSA9ICJtZWRpYWV4YW1wbGUuY3NzIjsKLQkJcmVzb3VyY2VzRm9sZGVyID0gIi90ZXN0cmVzb3VyY2VzIjsKLQotCQlTdHJpbmcgZmlsZVBhdGggPSBzZXR1cFByb2plY3QoKTsKLQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZSgKLQkJCQluZXcgUGF0aChmaWxlUGF0aCkpOwotCi0JCWlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCUFzc2VydC5mYWlsKCJVbmFibGUgdG8gbG9jYXRlICIgKyBmaWxlICsgIi4iKTsKLQkJfQotCi0JCWxvYWRGaWxlKCk7Ci0KLQkJaW5pdGlhbGl6ZVNvdXJjZVZpZXdlcigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplU291cmNlVmlld2VyKCkgewotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCXNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCX0gZWxzZSB7Ci0JCQlBc3NlcnQuZmFpbCgiVW5hYmxlIHRvIHJ1biB0aGUgdGVzdCBhcyBhIGRpc3BsYXkgbXVzdCBiZSBhdmFpbGFibGUuIik7Ci0JCX0KLQotCQljb25maWd1cmVTb3VyY2VWaWV3ZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTb3VyY2VWaWV3ZXIoKSB7Ci0JCXNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpKTsKLQotCQlzb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGxvYWRGaWxlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHNldHVwUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb257Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3ROYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0KLQkJfQotCQlTdHJpbmcgZmlsZVBhdGggPSBwcm9qZWN0LmdldEZ1bGxQYXRoKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS5hcHBlbmQoZmlsZU5hbWUpLnRvU3RyaW5nKCk7Ci0KLQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJlc291cmNlc0ZvbGRlciwgcHJvamVjdC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpOwotCi0JCXJldHVybiBmaWxlUGF0aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QXNzaXN0SW5zaWRlTWVkaWEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQl0cnkgewotCQkJQ1NTQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgQ1NTQ29udGVudEFzc2lzdFByb2Nlc3NvcigpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyhzb3VyY2VWaWV3ZXIsIDI0KTsKLQkJCWFzc2VydFRydWUoIk5vIHByb3Bvc2FscyBhdCBvZmZzZXQuIiwgcHJvcG9zYWxzLmxlbmd0aCA+IDApOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgcHJvcG9zYWwgcmV0dXJuZWQgZm9yIEFDUk9OWU0uIiwgImF6aW11dGgiLCBwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkpOyAKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMGYyZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGV4dC5JQ1NTUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTKCkgewotCQlzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCi0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0KLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1MoKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElDU1NQYXJ0aXRpb25zLlNUWUxFKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmIChzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciBpcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIG5vdCBudWxsIiwgcik7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRIb3ZlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lDU1NQYXJ0aXRpb25zLlNUWUxFfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTUyNzRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuQ1NTVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzg5MGFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLUBDSEFSU0VUICJJU08tODg1OS0xIjsNCi0NCi0NCi0NCi0uYmFyIHsNCi0JDQotfQ0KLQ0KLS5mb28gew0KLQlib3JkZXItc3R5bGU6IA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIuY3NzCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxY2U5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0My5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBDSEFSU0VUICJJU08tODg1OS0xIjsNCi0NCi10IHsNCi0JDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3Q0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3Q0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4OWMwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0NC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLUBDSEFSU0VUICJJU08tODg1OS0xIjsNCi0NCi10YWJsZSB7DQotCWJvcmRlci1ib3R0b20NCi19DQotDQotdGQgew0KLQlib3JkZXItYm90dG9tLXN0eWxlOiBkDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0NTU0ZvbGRpbmdUZXN0MS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9DU1NGb2xkaW5nVGVzdDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjcwNjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0NTU0ZvbGRpbmdUZXN0MS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKiBnbG9iYWwgKGJlZ2luKSAqLw0KLWJvZHkgew0KLSAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsNCi0gICAgY29sb3I6ICMwMDA7DQotICAgIGJhY2tncm91bmQ6ICNmZmYgdXJsKCJnbG9iYWwvYm9keS1iYWNrLmdpZiIpIHJlcGVhdC14Ow0KLX0NCi0NCi0vKiBnbG9iYWwgKGVuZCkgKi8NCi0NCi0vKiBoZWFkZXIgKGJlZ2luKSAqLw0KLSAgICAjaGVhZGVyIHsNCi0gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsNCi0gICAgICAgIHBhZGRpbmctYm90dG9tOiAycHg7DQotICAgIH0NCi0gICAgI2hlYWRlciBmb3JtIHsNCi0gICAgICAgIGZvbnQtc2l6ZTogODUlOw0KLSAgICAgICAgZGlzcGxheTogaW5saW5lOw0KLSAgICB9DQotDQotICAgICNoZWFkZXIgLmJ0biwNCi0gICAgI2hlYWRlciAudHh0IHsNCi0gICAgICAgIGZvbnQtc2l6ZTogODAlOw0KLSAgICB9DQotDQotICAgIC5tZXNzYWdlIHsNCi0gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsNCi0gICAgICAgIG1hcmdpbjogMC4zZW0gMGVtOw0KLSAgICAgICAgcGFkZGluZzogMC4zZW07DQotICAgICAgICBjb2xvcjogZ3JlZW47DQotICAgIH0NCi0NCi0vKiBoZWFkZXIgKGVuZCkgICAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0NTU0ZvbGRpbmdUZXN0Mi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9DU1NGb2xkaW5nVGVzdDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjcwNjI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0NTU0ZvbGRpbmdUZXN0Mi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKiBnbG9iYWwgKGJlZ2luKSAqLw0KLWJvZHkgew0KLSAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsNCi0gICAgY29sb3I6ICMwMDA7DQotICAgIGJhY2tncm91bmQ6ICNmZmYgdXJsKCJnbG9iYWwvYm9keS1iYWNrLmdpZiIpIHJlcGVhdC14Ow0KLX0NCi0NCi0vKiBnbG9iYWwgKGVuZCkgKi8NCi0NCi0vKiBoZWFkZXIgKGJlZ2luKSAqLw0KLSAgICAjaGVhZGVyIHsNCi0gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsNCi0gICAgICAgIHBhZGRpbmctYm90dG9tOiAycHg7DQotICAgIH0NCi0gICAgI2hlYWRlciBmb3JtIHsNCi0gICAgICAgIGZvbnQtc2l6ZTogODUlOw0KLSAgICAgICAgZGlzcGxheTogaW5saW5lOw0KLSAgICB9DQotDQotICAgICNoZWFkZXIgLmJ0biwNCi0gICAgI2hlYWRlciAudHh0IHsNCi0gICAgICAgIGZvbnQtc2l6ZTogODAlOw0KLSAgICB9DQotDQotICAgIC5tZXNzYWdlIHsNCi0gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsNCi0gICAgICAgIG1hcmdpbjogMC4zZW0gMGVtOw0KLSAgICAgICAgcGFkZGluZzogMC4zZW07DQotICAgICAgICBjb2xvcjogZ3JlZW47DQotICAgIH0NCi0NCi0vKiBoZWFkZXIgKGVuZCkgICAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdHJlc291cmNlcy9tZWRpYWV4YW1wbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL21lZGlhZXhhbXBsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYzRiOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL21lZGlhZXhhbXBsZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBNRURJQSB7Ci0JQUNST05ZTSB7Ci0JCQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWI4Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWR0ZHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLmR0ZHVpdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxMzY0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YjcwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDE0IDE3OjU2OjE4IEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MmM0YTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogZHRkY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLmludGVybmFsLkRURENvcmVUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIGNvbS5pYm0uaWN1LAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTg0ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuZHRkY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5kdGRjb3JldGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gZHRkY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICByZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllNmE2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBEVEQgQ29yZSBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9yZXNvdXJjZXMvZHRkUGFyc2VyVGVzdC9zYW1wbGUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3Jlc291cmNlcy9kdGRQYXJzZXJUZXN0L3NhbXBsZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjMwMGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3Jlc291cmNlcy9kdGRQYXJzZXJUZXN0L3NhbXBsZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTwhLS0gbGluZSBvbmUgLS0+Ci08IS0tIGxpbmUgdHdvIC0tPgotPCFFTEVNRU5UIHNvbWV0aGluZyBBTlk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZWI0OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBEVERDb3JlVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgRFREQ29yZVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkRURCBDb3JlIFRlc3RTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5UGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShEVERQYXJzZXJUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3RTdWl0ZShEVERGaWxlVGVzdC5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShEVERNb2RlbFRlc3RzLmNsYXNzKTsKLQl9Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IERURENvcmVUZXN0U3VpdGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERGaWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRERmlsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwNTIzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERGaWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1MjE2IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLkRUREZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLkRURE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLmRvY3VtZW50LkRURE1vZGVsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRFRERmlsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgRFRERmlsZVRlc3QoKSB7Ci0JfQotCi0JcHVibGljIERUREZpbGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VG9wTGV2ZWxOb2RlQXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlEVERNb2RlbEltcGwgbW9kZWwgPSAoRFRETW9kZWxJbXBsKW1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCVN0cmluZyBkdGRUZXh0ID0gIjwhRUxFTUVOVCBOZXdFbGVtZW50MyAoI1BDREFUQSk+PCFFTlRJVFkgJSBOZXdFbnRpdHkgU1lTVEVNIFwiXCIgPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KGR0ZFRleHQpOwotCQkKLQkJbW9kZWwuc2V0U3RydWN0dXJlZERvY3VtZW50KGRvY3VtZW50KTsKLQkJRFRERmlsZSBkdGRGaWxlID0gbW9kZWwuZ2V0RFRERmlsZSgpOwotCQkKLQkJRFRETm9kZSBkdGROb2RlID0gZHRkRmlsZS5nZXRUb3BMZXZlbE5vZGVBdCgzMik7Ci0JCWFzc2VydE5vdE51bGwoIk5vZGUgaXMgbnVsbCIsIGR0ZE5vZGUpOwotCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgTm9kZSBUeXBlLiIsICAiTmV3RW50aXR5IiwgZHRkTm9kZS5nZXROYW1lKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRETW9kZWxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRETW9kZWxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODllNjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURE1vZGVsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDUyMTYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRFRETW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRFRETW9kZWxUZXN0cyAgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Y3JlYXRlVW5tYW5hZ2VkRFRETW9kZWwoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZ2V0IERURCBNb2RlbCIsIG1vZGVsIGluc3RhbmNlb2YgRFRETW9kZWxJbXBsICk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREUGFyc2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTA1MzQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURFBhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuZW1mLkRUREVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLmVtZi5EVERGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5lbWYudXRpbC5EVERVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbC5EVERDb3JlVGVzdHNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBEVERQYXJzZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVORVhQRUNURURfRklMRV9DT05URU5UUyA9ICJVbmV4cGVjdGVkIGZpbGUgY29udGVudHMiOwotCi0JcHVibGljIHZvaWQgdGVzdE11bHRpcGxlQ29tbWVudFBhcnNpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlEVERVdGlsIHV0aWwgPSBuZXcgRFREVXRpbCgpOwotCQlTdHJpbmcgc2FtcGxlRFREcGF0aCA9ICIvcmVzb3VyY2VzL2R0ZFBhcnNlclRlc3Qvc2FtcGxlLmR0ZCI7Ci0JCVVSTCBidW5kbGVVUkwgPSBEVERDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHNhbXBsZURURHBhdGgpOwotCQlhc3NlcnROb3ROdWxsKHNhbXBsZURURHBhdGggKyAiIG5vdCBmb3VuZCBpbiBidW5kbGUiLCBidW5kbGVVUkwpOwotCQkvLyBEbyBub3QgcmVseSBvbiBDb21tb24gVVJJIFJlc29sdmVyIHRvIGZpbmQgdGhlIGNvbnRlbnRzCi0JCVVSTCBmaWxlVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKGJ1bmRsZVVSTCk7Ci0JCXV0aWwucGFyc2UoZmlsZVVSTC50b0V4dGVybmFsRm9ybSgpKTsKLQkJRFRERmlsZSBkdGRGaWxlID0gdXRpbC5nZXREVERGaWxlKCk7Ci0JCWFzc2VydEVxdWFscyhVTkVYUEVDVEVEX0ZJTEVfQ09OVEVOVFMsIDEsIGR0ZEZpbGUuZ2V0RFREQ29udGVudCgpLnNpemUoKSk7Ci0JCU9iamVjdCBvYmplY3QgPSBkdGRGaWxlLmdldERURENvbnRlbnQoKS5nZXQoMCk7Ci0JCWFzc2VydFRydWUoVU5FWFBFQ1RFRF9GSUxFX0NPTlRFTlRTLCBvYmplY3QgaW5zdGFuY2VvZiBEVERFbGVtZW50KTsKLQkJRFRERWxlbWVudCBkdGRFbGVtZW50ID0gKERUREVsZW1lbnQpIG9iamVjdDsKLQkJU3RyaW5nIGNvbW1lbnQgPSBkdGRFbGVtZW50LmdldENvbW1lbnQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb21tZW50IHZhbHVlIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiIGxpbmUgb25lIFxuIGxpbmUgdHdvICIsIGNvbW1lbnQpOwotCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9WZXJpZnlQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL1ZlcmlmeVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzZiYzEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL1ZlcmlmeVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5EVERDb3JlUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlQbHVnaW4gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQkvLyBUT0RPOiBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgxNTI3Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JCU9iamVjdCBwbHVnaW4gPSBudWxsOwotCQl0cnkgewotCQkJcGx1Z2luID0gRFREQ29yZVBsdWdpbi5nZXRQbHVnaW4oKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiRFREIGNvcmUgcGx1Z2luIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBwbHVnaW4pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL2ludGVybmFsL0RURENvcmVUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvaW50ZXJuYWwvRFREQ29yZVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOThlM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvaW50ZXJuYWwvRFREQ29yZVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotcHVibGljIGNsYXNzIERURENvcmVUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEVERDb3JlVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JcHVibGljIHN0YXRpYyBEVERDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwdWJsaWMgRFREQ29yZVRlc3RzUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSB0aGlzOwotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzBlYjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMuRFREQ29yZVRlc3RTdWl0ZSIgLz4KLSAgICA8IS0tIFNvbWUgb2YgdGhlIERURCBtb2RlbCByZWZlcmVuY2VzIFVJIG9iamVjdHMsIGxpa2UgSW1hZ2VzICAtLT4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZTYxZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhYjhjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWR0ZHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLmR0ZHVpdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk3ZTAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzNDJlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNUdWUgQXByIDIxIDE5OjAxOjUyIEVEVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTIwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWM3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUyMmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZmU3YTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC41MDAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBkdGR1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbC5EVERVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIGNvbS5pYm0uaWN1LAotIG9yZy5lY2xpcHNlLnVpLmlkZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQyNDZhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuZHRkdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuZHRkdWl0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBkdGR1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTM4YWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBEVEQgVUkgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MmExZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJzb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyIiB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5kdGRzb3VyY2UiIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlci5EVERDb2RlRm9sZGluZ1Rlc3QiLz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTcwZjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLkRURFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIERURFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0ZW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWFzc2VydE5vdE51bGwoImR0ZCBwcmVmZXJlbmNlIHN0b3JlIHdhcyBudWxsIiwgc3RvcmUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQkvL0lTU1VFOiB0aGlzIGRvZXMgTk9UIHVzZSBTRVQKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZHRkIHByZWZlcmVuY2Ugc3RvcmUgd2FzIG51bGwiLCBzdG9yZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRlNmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMucGx1Z2luLlRlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgRFREVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBEVERVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBEVERVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkRURCBVSSBUZXN0U3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeVVJUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShEVERVSVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmNsYXNzKSk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzLmNsYXNzKTsKLQkJLy8gWzI5OTY0NV0gRGlzYWJsZWQgZm9yIGZhaWxpbmcgdW5pdCB0ZXN0cyBvbiBidWlsZCBtYWNoaW5lIC0gUHJvYmxlbSB3aXRoIHRlc3QKLQkJLy8gYWRkVGVzdChEVERDb2RlRm9sZGluZ1Rlc3Quc3VpdGUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTlmMDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuRFREVUlUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbCBTaW1pbGFyIFByb2plY3QgVXRpbHMKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbCBTaW1pbGFyIFByb2plY3QgVXRpbHMKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5Qcm9qZWN0VXRpbCBTaW1pbGFyIFByb2plY3QgVXRpbHMKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkKLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gRFREVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQl9Ci0JfQotCQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IERURFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MDg4M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXh0LklEVERQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudmlld3MuY29udGVudG91dGxpbmUuRFREQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBkdGQgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFRELmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgby5nZXRDbGFzcygpLCBEVERDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPQ1VNRU5UQVRJT05URVhUSE9WRVIsIElEVERQYXJ0aXRpb25zLkRURF9ERUZBVUxUKTsKLQkJYXNzZXJ0TnVsbCgidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJRFREUGFydGl0aW9ucy5EVERfREVGQVVMVCwgbyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9WZXJpZnlVSVBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9WZXJpZnlVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjVkYWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVmVyaWZ5VUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLkRURFVJUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlVSVBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9EVERVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlZDBjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIERURFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgRFREVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy8gUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIERURFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERURFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IERURFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQl0cnkgewotCQkJaWYgKHJlc291cmNlQnVuZGxlID09IG51bGwpCi0JCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZDc4OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvcGx1Z2luL1Rlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvcGx1Z2luL1Rlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4MzgxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3BsdWdpbi9UZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBTdGFuZGFyZCBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3MTc4NCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5wbHVnaW47DQotDQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEubmV0LlVSTDsNCi0NCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOw0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ow0KLWltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGg7DQotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aENvbnN0YW50czsNCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbjsNCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRmFjdG9yeTsNCi0NCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwuRFREVUlQbHVnaW47DQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50Ow0KLQ0KLXB1YmxpYyBjbGFzcyBUZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzIGV4dGVuZHMgVGVzdENhc2V7DQotDQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fWE1MID0gInBsdWdpbi54bWwiOw0KLQkNCi0JRG9jdW1lbnQgcGx1Z2luRG9jID0gbnVsbDsNCi0JWFBhdGggeHBhdGggPSBudWxsOw0KLQ0KLQlwdWJsaWMgVGVzdFBsdWdpblhNTFJlcXVpcmVtZW50cygpIHsNCi0JCXN1cGVyKCk7DQotCX0NCi0JDQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlzdXBlci5zZXRVcCgpOw0KLQkJDQotCQlsb2FkUGx1Z2luWE1MKCk7DQotCQlpbml0WFBhdGgoKTsNCi0JfQ0KLQkNCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0JCXN1cGVyLnRlYXJEb3duKCk7DQotCQlwbHVnaW5Eb2MgPSBudWxsOw0KLQkJeHBhdGggPSBudWxsOw0KLQl9DQotDQotCXByaXZhdGUgdm9pZCBpbml0WFBhdGgoKSB7DQotCQlYUGF0aEZhY3RvcnkgeHBhdGhGYWN0b3J5ID0gWFBhdGhGYWN0b3J5Lm5ld0luc3RhbmNlKCk7DQotCQl4cGF0aCA9IHhwYXRoRmFjdG9yeS5uZXdYUGF0aCgpOw0KLQl9DQotDQotCXByaXZhdGUgdm9pZCBsb2FkUGx1Z2luWE1MKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlVUkwgdXJsID0gZ2V0VGVzdEZpbGUoUExVR0lOX1hNTCk7DQotCQl1cmwub3BlblN0cmVhbSgpOw0KLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb21GYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KLQkJRG9jdW1lbnRCdWlsZGVyIGRvbUJ1aWxkZXIgPSBkb21GYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOw0KLQkJcGx1Z2luRG9jID0gZG9tQnVpbGRlci5wYXJzZSh1cmwub3BlblN0cmVhbSgpKTsNCi0JfQ0KLQkNCi0JcHJvdGVjdGVkIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oU3RyaW5nIHBhdGgpIHsNCi0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkocGF0aCk7DQotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7DQotCQl0cnkgew0KLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7DQotCQl9DQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLQkJCS8vIGltcG9zc2libGUNCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7DQotCQl9DQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsNCi0JfQ0KLQ0KLQlwcm90ZWN0ZWQgVVJMIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgew0KLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oIi8iICsgZmlsZXBhdGgpOw0KLQkJcmV0dXJuIGluc3RhbGxVUkw7DQotCX0NCi0JDQotCQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RFREVG9vbFRpcEV4aXN0cygpIHRocm93cyBFeGNlcHRpb24gew0KLQkJU3RyaW5nIHhwYXRoU3RyaW5nID0gIi8vbWVudUNvbnRyaWJ1dGlvbltAbG9jYXRpb25VUkkgPSAndG9vbGJhcjpvcmcuZWNsaXBzZS53c3QueG1sLnVpLnBlcnNwZWN0aXZlLk5ld0ZpbGVUb29sQmFyJ10vY29tbWFuZFtAaWQgPSAnb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5uZXdEVERGaWxlJ10iOw0KLQkJWFBhdGhFeHByZXNzaW9uIHhwYXRoRXhwciA9IHhwYXRoLmNvbXBpbGUoeHBhdGhTdHJpbmcpOw0KLQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIHhwYXRoRXhwci5ldmFsdWF0ZShwbHVnaW5Eb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksIFhQYXRoQ29uc3RhbnRzLk5PREUpOw0KLQkJU3RyaW5nIHRvb2xUaXAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidG9vbHRpcCIpOw0KLQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIHZhbHVlIGZvciBEVEQgdG9vbHRpcCIsICIlRFREX05ld19GaWxlLnRvb2x0aXAiLCB0b29sVGlwKTsNCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9EVERDb2RlRm9sZGluZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL0RURENvZGVGb2xkaW5nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzVjZDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL0RURENvZGVGb2xkaW5nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLnByb2plY3Rpb24uUHJvamVjdGlvbkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UucHJvamVjdGlvbi5Qcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnJlY29uY2lsZS5JU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lcjsKLQotLyoqCi0gKiA8cD5UZXN0cyB0aGF0IGNvZGUgZm9sZGluZyBhbm5vdGF0aW9ucyBhcmUgY29ycmVjdGx5IGFkZGVkL3JlbW92ZWQgZnJvbSBEVEQgRG9jdW1lbnRzPC9wPgotICogPHA+QWxsIG9mIHRoZXNlIHRlc3RzIHVzZSB0aGUgc2FtZSBwcm9qZWN0IGFuZCB3aGVuIHBvc3NpYmxlIHRoZSBzYW1lIG9wZW4gZG9jdW1lbnRzPC9wPgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MQ29kZUZvbGRpbmdUZXN0IFNpbWlsYXIgVGVzdCAtIFhNTCBDb2RlIEZvbGRpbmcgVGVzdAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5DU1NDb2RlRm9sZGluZ1Rlc3QgU2ltaWxhciBUZXN0IC0gQ1NTIENvZGUgRm9sZGluZyBUZXN0Ci0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLkRURENvZGVGb2xkaW5nVGVzdCBTaW1pbGFyIFRlc3QgLSBEVEQgQ29kZSBGb2xkaW5nIFRlc3QKLSAqLwotcHVibGljIGNsYXNzIERURENvZGVGb2xkaW5nVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgewotCS8qKiBtYXggYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1dBSVRfVElNRSA9IDQwMDA7Ci0JCi0JLyoqIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRfVElNRSA9IDIwMDsKLQkKLQkvKioKLQkgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZQotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiRFREQ29kZUZvbGRpbmdUZXN0IjsKLQkKLQkvKioKLQkgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9mb2xkaW5nIjsKLQkKLQkvKioKLQkgKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqIHRoZSBsYXN0IHtAbGluayBJRG9jdW1lbnR9IHRvIGJlIHJlY29uY2lsZWQgKi8KLQlwcml2YXRlIHN0YXRpYyBJRG9jdW1lbnQgZlJlY29uY2lsZWREb2MgPSBudWxsOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIERURENvZGVGb2xkaW5nVGVzdCgpIHsKLQkJc3VwZXIoIkRURCBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgRFREQ29kZUZvbGRpbmdUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKERURENvZGVGb2xkaW5nVGVzdC5jbGFzcywgIkRURCBDb2RlIEZvbGRpbmcgVGVzdCIpOwotCQlyZXR1cm4gbmV3IERURENvZGVGb2xkaW5nVGVzdFNldHVwKHRzKTsKLQotCX0KLQkKLQkvKioKLQkgKiBSZXNldCB0aGUgc3RhdGUgYmV0d2VlbiB0ZXN0cwotCSAqIAotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQkKLQkJZlJlY29uY2lsZWREb2MgPSBudWxsOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhlIGluaXRpYWxseSBwbGFjZWQgZm9sZGluZyBhbm5vdGF0aW9uczwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdEZvbGRpbmcoKXRocm93cyBFeGNlcHRpb24gIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIkRUREZvbGRpbmdUZXN0MS5kdGQiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciAgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCQotCQlMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEyOTksIDIzNCkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDM5LCAyOTYpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig0OTgsIDc1MSkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEyNTEsIDE3KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTI2OSwgMjgpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzMzcsIDE1OSkpOwotCQkKLQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkoZWRpdG9yLmdldFRleHRWaWV3ZXIoKSwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhhdCBmb2xkaW5nIGFubm90YXRpb25zIGFyZSB1cGRhdGVkIGFmdGVyIG5vZGUgaXMgcmVtb3ZlZDwvcD4KLQkgKiBSZW1vdmVkIGJlY2F1c2UgaXQga2VlcHMgZmFpbGluZyBkdXJpbmcgYnVpbGRzIGJ1dCBydW5uaW5nIGxvY2FsbHkgYW5kIHNtb2tlIHRlc3RpbmcKLQkgKiBwcmVzZW50cyBubyBwcm9ibGVtcy4KLQkgKi8KLQkvKnB1YmxpYyB2b2lkIHRlc3RSZW1vdmVOb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJEVERGb2xkaW5nVGVzdDEuZHRkIik7Ci0JCQotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQkKLQkJdHJ5IHsKLQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCQlJRG9jdW1lbnQgZG9jID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlkb2MucmVwbGFjZSgzMzcsIDE1OSwgIiIpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTExMCwgMjgpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzksIDI5NikpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxMTQwLCAyMzQpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzM5LCA3NTEpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTA5MiwgMTcpKTsKLQkJCQotCQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkodmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gY2F0Y2goQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiVGVzdCBpcyBicm9rZW4sIHJlcGxhY2UgbG9jYXRpb24gaGFzIGJlY29tZSBpbnZhbGlkLlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0qLwotCQotCS8qKgotCSAqIDxwPjxiPlRFU1Q6PC9iPiB0aGF0IGZvbGRpbmcgYW5ub3RhdGlvbnMgYXJlIHVwZGF0ZWQgYWZ0ZXIgbm9kZSBpcyBhZGRlZDwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkTm9kZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiRFRERm9sZGluZ1Rlc3QyLmR0ZCIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQkJU3RyaW5nIG5ld05vZGVUZXh0ID0KLQkJCQkiPCFBVFRMSVNUIEJET1xuIiArCi0JCQkJIiVjb3JlYXR0cnM7XHRcdFx0XHQtLSBpZCwgY2xhc3MsIHN0eWxlLCB0aXRsZSAtLVxuIiArCi0JCQkJImxhbmdcdCVMYW5ndWFnZUNvZGU7XHQjSU1QTElFRFx0LS0gbGFuZ3VhZ2UgY29kZSAtLVxuIiArCi0JCQkJImRpclx0KGx0cnxydGwpXHQjUkVRVUlSRURcdC0tIGRpcmVjdGlvbmFsaXR5IC0tXG4iICsKLQkJCQkiPlxuIjsKLQkJCWRvYy5yZXBsYWNlKDU5NywgMCwgbmV3Tm9kZVRleHQpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQ1NCwgMjM0KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQ5OCwgOTA2KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDM5LCAyOTYpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQwNiwgMTcpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzM3LCAxNTkpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQyNCwgMjgpKTsKLQkJCQotCQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkodmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gY2F0Y2goQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiVGVzdCBpcyBicm9rZW4sIGFkZCBsb2NhdGlvbiBoYXMgYmVjb21lIGludmFsaWQuXG4iICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYW4gPGNvZGU+SUZpbGU8L2NvZGU+Ci0JICogZm9yIGl0LCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JRmlsZTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA8Y29kZT5uYW1lPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIElGaWxlIGdldEZpbGUoU3RyaW5nIG5hbWUpIHsKLQkJSUZpbGUgZmlsZSA9IGZQcm9qZWN0LmdldEZpbGUobmFtZSk7Ci0JCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgZmlsZSArICIgY2FuIG5vdCBiZSBmb3VuZCIsIGZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgPGNvZGU+ZmlsZTwvY29kZT4gZ2V0IGFuIGVkaXRvciBmb3IgaXQuIElmIGFuIGVkaXRvciBoYXMgYWxyZWFkeQotCSAqIGJlZW4gcmV0cmlldmVkIGZvciB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4gdGhlbiByZXR1cm4gdGhlIHNhbWUgYWxyZWFkeQotCSAqIG9wZW4gZWRpdG9yLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZSBvcGVuIGFuZCByZXR1cm4gYW4gZWRpdG9yIGZvciB0aGlzCi0JICogQHJldHVybiA8Y29kZT5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjwvY29kZT4gb3BlbmVkIGZyb20gdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotCQkKLQkJaWYoZWRpdG9yID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlLCB0cnVlKTsKLQkJCQlpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJZWRpdG9yID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcillZGl0b3JQYXJ0KTsKLQkJCQkJc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhlZGl0b3IpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYoZWRpdG9yICE9IG51bGwpIHsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiB2aWV3ZXIgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogV2FpdHMgZm9yIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciB0byBmaW5pc2ggYW5kIHRoZW4gdmVyaWZpZXMgdGhhdCBvbmx5IGFuZCBhbGwKLQkgKiBvZiB0aGUgPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGhhdmUgZm9sZGluZyBhbm5vdGF0aW9ucyBpbiB0aGUgZ2l2ZW4gPGNvZGU+dmlld2VyPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIgY2hlY2sgZm9yIGFubm90YXRpb25zIGF0IHRoZSBnaXZlbiA8Y29kZT5leHBlY3RlZFBvc2l0aW9uczwvY29kZT4KLQkgKiBpbiBoZXJlIGFmdGVyIHRoZSBkaXJ0eSByZWdpb24gcmVjb25jaWxlciBqb2IgaGFzIGZpbmlzaGVkCi0JICogQHBhcmFtIGV4cGVjdGVkUG9zaXRpb25zIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGVzZSBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiBhZnRlciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgam9iIGhhcyBmaW5pc2hlZAotCSAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSB2b2lkIHdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGZpbmFsIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgZmluYWwgTGlzdCBleHBlY3RlZFBvc2l0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlEb2N1bWVudCBkb2MgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJaW50IHRpbWUgPSAwOwotCQl3aGlsZShkb2MgIT0gZlJlY29uY2lsZWREb2MgJiYgdGltZSA8PSBNQVhfV0FJVF9USU1FKSB7Ci0JCQlUaHJlYWQuc2xlZXAoV0FJVF9USU1FKTsKLQkJCXRpbWUgKz0gV0FJVF9USU1FOwotCQl9Ci0JCQotCQlpZihkb2MgPT0gZlJlY29uY2lsZWREb2MpIHsKLQkJCXZlcmlmeUFubm90YXRpb25Qb3NpdGlvbnModmlld2VyLCBleHBlY3RlZFBvc2l0aW9ucyk7Ci0JCX0gZWxzZSB7Ci0JCQlBc3NlcnQuZmFpbCgiRG9jdW1lbnQgIiArIHZpZXdlci5nZXREb2N1bWVudCgpICsgIiB3YXMgbm90IHJlY29uY2lsZWQgd2l0aCBpbiAiICsgTUFYX1dBSVRfVElNRSArCi0JCQkJCSIgc28gZ2F2ZSB1cCB3YWl0aW5nIGFuZCBpbiB0dXJuIGNvdWxkIG5vdCB2YWxpZGF0ZSBmb2xkaW5nIGFub3RhdGlvbnMiKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IG9ubHkgYW5kIGFsbCBvZiB0aGUgPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGhhdmUgZm9sZGluZyBhbm5vdGF0aW9ucwotCSAqIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICogCi0JICogQHBhcmFtIHZpZXdlciBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlIGdpdmVuIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPiBpbiBoZXJlIAotCSAqIEBwYXJhbSBleHBlY3RlZFBvc2l0aW9ucyBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlc2UgcG9zaXRpb25zIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeUFubm90YXRpb25Qb3NpdGlvbnMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBMaXN0IGV4cGVjdGVkUG9zaXRpb25zKSB0aHJvd3MgRXhjZXB0aW9uewotCQlQcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsIHByb2plY3Rpb25Nb2RlbCA9IHZpZXdlci5nZXRQcm9qZWN0aW9uQW5ub3RhdGlvbk1vZGVsKCk7Ci0JCUl0ZXJhdG9yIGFubm90YXRpb25JdGVyID0gcHJvamVjdGlvbk1vZGVsLmdldEFubm90YXRpb25JdGVyYXRvcigpOwotCQkKLQkJTGlzdCB1bmV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJd2hpbGUoYW5ub3RhdGlvbkl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qgb2JqID0gYW5ub3RhdGlvbkl0ZXIubmV4dCgpOwotCQkJaWYob2JqIGluc3RhbmNlb2YgUHJvamVjdGlvbkFubm90YXRpb24pIHsKLQkJCQlQcm9qZWN0aW9uQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gKFByb2plY3Rpb25Bbm5vdGF0aW9uKW9iajsKLQkJCQlQb3NpdGlvbiBwb3MgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0UG9zaXRpb24oYW5ub3RhdGlvbik7Ci0JCQkJCi0JCQkJYm9vbGVhbiBmb3VuZCA9IGV4cGVjdGVkUG9zaXRpb25zLnJlbW92ZShwb3MpOwotCQkJCWlmKCFmb3VuZCkgewotCQkJCQl1bmV4cGVjdGVkUG9zaXRpb25zLmFkZChwb3MpOwotCQkJCX0KLQkJCQkKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nIGVycm9yID0gIiI7Ci0JCWlmKHVuZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDApIHsKLQkJCWVycm9yICs9ICJUaGVyZSB3ZXJlICIgKyB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSArICIgdW5leHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIGZvdW5kIjsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCB1bmV4cGVjdGVkUG9zaXRpb25zLnNpemUoKTsgKytpKSB7Ci0JCQkJUG9zaXRpb24gcG9zID0gKFBvc2l0aW9uKSB1bmV4cGVjdGVkUG9zaXRpb25zLmdldChpKTsKLQkJCQllcnJvciArPSAiXG5cdCIgKyBwb3M7Ci0JCQkJZXJyb3IgKz0gIlxuKCIgKyBmUmVjb25jaWxlZERvYy5nZXQocG9zLm9mZnNldCwgcG9zLmxlbmd0aCkgKyAiKSI7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSAhPSAwICkgewotCQkJZXJyb3IgKz0gIlxuVGhlcmUgd2VyZSAiICsgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICsgIiBleHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIG5vdCBmb3VuZCI7Ci0JCQlmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLQkJCQllcnJvciArPSAiXG5cdCIgKyBleHBlY3RlZFBvc2l0aW9ucy5nZXQoaSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSAhPSAwIHx8IHVuZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDApIHsKLQkJCWVycm9yICs9ICJcbkZ1bGwgRG9jdW1lbnQ6XG4oIiArIGZSZWNvbmNpbGVkRG9jLmdldCgpICsiKSI7Ci0JCX0KLQkJCi0JCWlmKGVycm9yLmxlbmd0aCgpICE9IDApIHsKLQkJCWZhaWwoZXJyb3IpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBEVERDb2RlRm9sZGluZ1Rlc3RTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgRFREQ29kZUZvbGRpbmdUZXN0U2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJCi0JCQlpbml0aWFsaXplUmVzb3VyY2VzKCk7Ci0JCQkKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJCi0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vY2xvc2Ugb3V0IHRoZSBlZGl0b3JzCi0JCQlJdGVyYXRvciBpdGVyID0gZkZpbGVUb0VkaXRvck1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpaXRlci5uZXh0KCk7Ci0JCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQllZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQl9Ci0JCQotCQkvKioKLQkJICogU2V0IHVwIHRoZSBwcm9qZWN0IGFuZCB3b3JrYmVuY2gsIHRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBvbmNlCi0JCSAqLwotCQlwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRpYWxpemVSZXNvdXJjZXMoKSB7Ci0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBQUk9KRUNUX05BTUUpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIGlnbm9yZQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIjYWJvdXRUb0JlUmVjb25jaWxlZCgpCi0JICovCi0JcHVibGljIHZvaWQgYWJvdXRUb0JlUmVjb25jaWxlZCgpIHsKLQkJLy9pZ25vcmUKLQl9Ci0KLQkvKioKLQkgKiBrZWVwIHRyYWNrIG9mIGxhc3QgZG9jdW1lbnQgcmVjb25jaWxlZAotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIjcmVjb25jaWxlZChvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbCwgYm9vbGVhbiwgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCi0JICovCi0JcHVibGljIHZvaWQgcmVjb25jaWxlZChJRG9jdW1lbnQgZG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwgbW9kZWwsCi0JCQlib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJZlJlY29uY2lsZWREb2MgPSBkb2N1bWVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllZTg0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRleHQuSURURFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURCgpIHsKLQkJc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSURURFBhcnRpdGlvbnMuRFREX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgzZGIxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0RFRELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdERURCBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0KLQkJaW50IGxlbmd0aFZhbHVlOwotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0KLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XG48SFRNTD5cbgk8SEVBRD5cbgkJPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPlxuCQk8VElUTEU+cGxhY2UgdGl0bGUgaGVyZTwvVElUTEU+XG4JPC9IRUFEPlxuCTxCT0RZPlxuCQlwbGFjZSBjb250ZW50IGhlcmUJXG48c2NyaXB0PlxuXCJ0ZXh0XCI7XG48L1NDUklQVD5cbjwvQk9EWT5cbjwvSFRNTD4iOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgSUNvbnRlbnRPdXRsaW5lUGFnZSBmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBIVE1MIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKHNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJCXJldHVybjsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJCXNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgZklucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIGZTZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9mSW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIGZTZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBmU2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRG9jdW1lbnQgZG9jID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYW55IGFkZGl0aW9uYWwgcHJlZmVyZW5jZXMgaXQgc2hvdWxkIGhhdmUgRXg6Ci0JICogZm9udCwgdGFiIHdpZHRoCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyUHJlZmVyZW5jZXMoKSB7Ci0JCWZTb3VyY2VWaWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udChTU0VfRURJVE9SX0ZPTlQpKTsKLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIGZTZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYmY0YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5EVERVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9EVERGb2xkaW5nVGVzdDEuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvRFRERm9sZGluZ1Rlc3QxLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4MmM2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9EVERGb2xkaW5nVGVzdDEuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IUVOVElUWSAlIGVudGl0eTENCi0gImlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEICAtLSBkb2N1bWVudC13aWRlIHVuaXF1ZSBpZCAtLQ0KLSAgY2xhc3MgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQgIC0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMgLS0NCi0gIHN0eWxlICAgICAgICVTdHlsZVNoZWV0OyAgICNJTVBMSUVEICAtLSBhc3NvY2lhdGVkIHN0eWxlIGluZm8gLS0NCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEICAtLSBhZHZpc29yeSB0aXRsZSAtLSINCi0gID4NCi0NCi08IUVOVElUWSAlIGVudGl0eTINCi0gImxhbmcgICAgICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEICAtLSBsYW5ndWFnZSBjb2RlIC0tDQotICBkaXIgICAgICAgICAobHRyfHJ0bCkgICAgICAjSU1QTElFRCAgLS0gZGlyZWN0aW9uIGZvciB3ZWFrL25ldXRyYWwgdGV4dCAtLSINCi0gID4NCi0NCi08IUVOVElUWSAlIGVudGl0eTMNCi0gIm9uY2xpY2sgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgYnV0dG9uIHdhcyBjbGlja2VkIC0tDQotICBvbmRibGNsaWNrICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIGJ1dHRvbiB3YXMgZG91YmxlIGNsaWNrZWQtLQ0KLSAgb25tb3VzZWRvd24gJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciBidXR0b24gd2FzIHByZXNzZWQgZG93biAtLQ0KLSAgb25tb3VzZXVwICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciBidXR0b24gd2FzIHJlbGVhc2VkIC0tDQotICBvbm1vdXNlb3ZlciAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIHdhcyBtb3ZlZCBvbnRvIC0tDQotICBvbm1vdXNlbW92ZSAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIHdhcyBtb3ZlZCB3aXRoaW4gLS0NCi0gIG9ubW91c2VvdXQgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgd2FzIG1vdmVkIGF3YXkgLS0NCi0gIG9ua2V5cHJlc3MgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIGtleSB3YXMgcHJlc3NlZCBhbmQgcmVsZWFzZWQgLS0NCi0gIG9ua2V5ZG93biAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIGtleSB3YXMgcHJlc3NlZCBkb3duIC0tDQotICBvbmtleXVwICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBrZXkgd2FzIHJlbGVhc2VkIC0tIg0KLSAgPg0KLQ0KLTwhLS0NCi1jb21tZW50MQ0KLS0tPg0KLTwhRU5USVRZICUgZW50aXR5NCAiSUdOT1JFIj4NCi0NCi08IUVOVElUWSAlIGVudGl0eTUNCi0gImRhdGFzcmMgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEICAtLSBhIHNpbmdsZSBvciB0YWJ1bGFyIERhdGEgU291cmNlIC0tDQotICBkYXRhZmxkICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRCAgLS0gdGhlIHByb3BlcnR5IG9yIGNvbHVtbiBuYW1lIC0tDQotICBkYXRhZm9ybWF0YXMgKHBsYWludGV4dHxodG1sKSBwbGFpbnRleHQgLS0gdGV4dCBvciBodG1sIC0tIg0KLSAgPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0RUREZvbGRpbmdUZXN0Mi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9EVERGb2xkaW5nVGVzdDIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDgyYzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL0RUREZvbGRpbmdUZXN0Mi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhRU5USVRZICUgZW50aXR5MQ0KLSAiaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQgIC0tIGRvY3VtZW50LXdpZGUgdW5pcXVlIGlkIC0tDQotICBjbGFzcyAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRCAgLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3NlcyAtLQ0KLSAgc3R5bGUgICAgICAgJVN0eWxlU2hlZXQ7ICAgI0lNUExJRUQgIC0tIGFzc29jaWF0ZWQgc3R5bGUgaW5mbyAtLQ0KLSAgdGl0bGUgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQgIC0tIGFkdmlzb3J5IHRpdGxlIC0tIg0KLSAgPg0KLQ0KLTwhRU5USVRZICUgZW50aXR5Mg0KLSAibGFuZyAgICAgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQgIC0tIGxhbmd1YWdlIGNvZGUgLS0NCi0gIGRpciAgICAgICAgIChsdHJ8cnRsKSAgICAgICNJTVBMSUVEICAtLSBkaXJlY3Rpb24gZm9yIHdlYWsvbmV1dHJhbCB0ZXh0IC0tIg0KLSAgPg0KLQ0KLTwhRU5USVRZICUgZW50aXR5Mw0KLSAib25jbGljayAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciBidXR0b24gd2FzIGNsaWNrZWQgLS0NCi0gIG9uZGJsY2xpY2sgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgYnV0dG9uIHdhcyBkb3VibGUgY2xpY2tlZC0tDQotICBvbm1vdXNlZG93biAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIGJ1dHRvbiB3YXMgcHJlc3NlZCBkb3duIC0tDQotICBvbm1vdXNldXAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCAgLS0gYSBwb2ludGVyIGJ1dHRvbiB3YXMgcmVsZWFzZWQgLS0NCi0gIG9ubW91c2VvdmVyICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgd2FzIG1vdmVkIG9udG8gLS0NCi0gIG9ubW91c2Vtb3ZlICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIHBvaW50ZXIgd2FzIG1vdmVkIHdpdGhpbiAtLQ0KLSAgb25tb3VzZW91dCAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEgcG9pbnRlciB3YXMgbW92ZWQgYXdheSAtLQ0KLSAgb25rZXlwcmVzcyAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEga2V5IHdhcyBwcmVzc2VkIGFuZCByZWxlYXNlZCAtLQ0KLSAgb25rZXlkb3duICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQgIC0tIGEga2V5IHdhcyBwcmVzc2VkIGRvd24gLS0NCi0gIG9ua2V5dXAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEICAtLSBhIGtleSB3YXMgcmVsZWFzZWQgLS0iDQotICA+DQotDQotPCEtLQ0KLWNvbW1lbnQxDQotLS0+DQotPCFFTlRJVFkgJSBlbnRpdHk0ICJJR05PUkUiPg0KLQ0KLTwhRU5USVRZICUgZW50aXR5NQ0KLSAiZGF0YXNyYyAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQgIC0tIGEgc2luZ2xlIG9yIHRhYnVsYXIgRGF0YSBTb3VyY2UgLS0NCi0gIGRhdGFmbGQgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEICAtLSB0aGUgcHJvcGVydHkgb3IgY29sdW1uIG5hbWUgLS0NCi0gIGRhdGFmb3JtYXRhcyAocGxhaW50ZXh0fGh0bWwpIHBsYWludGV4dCAtLSB0ZXh0IG9yIGh0bWwgLS0iDQotICA+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk5ZGZiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWh0bWxlbmNvZGluZ3Rlc3RzLmphcgotamF2YUNvbXBpbGVyLmh0bWxlbmNvZGluZ3Rlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDY4YjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDMxZjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGh0bWxlbmNvZGluZ3Rlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5YTNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmh0bWxlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBodG1sZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzE0YTExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IEhUTUwgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NThmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MRW5jb2RpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTDsKLQotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzIxNjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luIHBsdWdpbjsKLQotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRBbGxUZXN0RmlsZXMoU3RyaW5nIHRvcERpck5hbWUpIHsKLQkJTGlzdCByZXN1bHQgPSBudWxsOwotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgdG9wRGlyTmFtZTsKLQkJRmlsZSB0b3BEaXIgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCWlmICghdG9wRGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odG9wRGlyTmFtZSArICIgaXMgbm90IGEgZGlyZWN0b3J5Iik7Ci0JCX0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjI4M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MRW5jb2RpbmdUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IG51bGw7Ci0JCQlpZiAoZW5jb2RpbmdNZW1lbnRvICE9IG51bGwpIHsKLQkJCQlmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCX0KLQkJCS8vIEkgY2hhbmdlZCBtYW55ICJlcXVhbHMiIHRvICJlcXVhbHNJZ25vcmVDYXNlIiBvbiAxMS80LzIwMDIsCi0JCQkvLyBzaW5jZQotCQkJLy8gc29tZSBpc3N1ZXMgd2l0aCBTSElGVF9KSVMgdnMuIFNoaWZ0X0pJUyB3ZXJlIGNhdXNpbmcgZmFpbHVyZXMuCi0JCQkvLyBXZSBkbyB3YW50IHRvIGJlIHRvbGVyYW50IG9uIGlucHV0LCBhbmQgYWNjZXB0IGVpdGhlciwgYnV0IEkKLQkJCS8vIHRoaW5rCi0JCQkvLyB0aGF0IFN1cHBvcnRlZEphdmFFbmNvZGluZ3MgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byAicmVjb21tZW5kIgotCQkJLy8gU2hpZnRfSklTLgotCQkJYm9vbGVhbiBleHBlY3RlZElBTkFSZXN1bHQgPSBmYWxzZTsKLQkJCWlmIChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBudWxsKSB7Ci0JCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gKGV4cGVjdGVkSUFOQUVuY29kaW5nID09IGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCQkJfQotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKQotCQkJLy8gaWYKLQkJCS8vIHRocm93cyBleGNlcHRpb24uCi0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgIT0gbnVsbCkgewotCQkJCWVuc3VyZUNhblJlYWQoZmlsZW5hbWUsIGZvdW5kSUFOQUVuY29kaW5nLCBpc3RyZWFtKTsKLQkJCX0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5TdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluU3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmh0bWwiOwotCQkvLyBIVE1MIGhhcyBubyBzcGVjIGRlZmF1bHQgZW5jb2RpbmcuIFdpbGwgdXNlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCi0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJVVEYtOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aU5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTXVsdGlOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcuaHRtbCI7Ci0JCS8vIEhUTUwgaGFzIG5vIHNwZWMgZGVmYXVsdCBlbmNvZGluZy4gV2lsbCB1c2UgcGxhdGZvcm0gZGVmYXVsdCBlbmNvZGluZy4KLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIiksIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub3F1b3RlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub3F1b3Rlcy5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJVVEYtOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2TEUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFTm9RdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXNVVEYxNmxlLmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAidXRmMTZCT00uaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjIyZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IVE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuRW5jb2RpbmdQYXJzZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5aaXBwZWRUZXN0OwotCi1wdWJsaWMgY2xhc3MgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZDaGFyc2V0OwotCi0JcHJpdmF0ZSBTdHJpbmcgZkNvbnRlbnRUeXBlVmFsdWU7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gdGhpcy5maWxlSG9tZSArIHRoaXMuZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUpIHsKLQkJdHJ5IHsKLQkJCWRvVGVzdEZpbGUoSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdFJlYWRlcihmaWxlbmFtZSksIGV4cGVjdGVkTmFtZSwgZmluYWxUb2tlblR5cGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArIlwiIik7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShSZWFkZXIgZmlsZVJlYWRlciwgU3RyaW5nIGV4cGVjdGVkTmFtZSwgU3RyaW5nIGZpbmFsVG9rZW5UeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlIVE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQl0b2tlbml6ZXIgPSBuZXcgSFRNTEhlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0KLQkJSGVhZFBhcnNlclRva2VuIHJlc3VsdFRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpOwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFRva2VuID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gVE9ETzogbmVlZCB0byB3b3JrIG9uIGNhc2UgaXNzdWVzCi0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZS50b1VwcGVyQ2FzZSgpKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0ZGVmZWN0MjIzMzY1KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJTZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvKioKLQkgKiByZXR1cm5zIGVuY29kaW5nIGFjY29yZGluZyB0byBwcmlvcml0eTogMS4gWE1MIERlY2xhcmF0aW9uIDIuIHBhZ2UKLQkgKiBkaXJlY3RpdmUgcGFnZUVuY29kaW5nIG5hbWUgMy4gcGFnZSBkaXJlY3RpdmUgY29udGVudFR5cGUgY2hhcnNldCBuYW1lCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCWlmICh0aGlzLmZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdGhpcy5mWE1MRGVjRW5jb2RpbmdOYW1lOwotCQl9Ci0JCWVsc2UgaWYgKHRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQl9Ci0JCWVsc2UgaWYgKHRoaXMuZkNoYXJzZXQgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdGhpcy5mQ2hhcnNldDsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBhcnNlQ29udGVudFR5cGVWYWx1ZShTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCI7XFxzKmNoYXJzZXRcXHMqPVxccyoiKTsKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJdGhpcy5mQ2hhcnNldCA9IHBhcnRzWzBdLnN1YnN0cmluZyhlcXBvcyk7Ci0JCQkJCQkJdGhpcy5mQ2hhcnNldCA9IHRoaXMuZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQl9Ci0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJdGhpcy5mQ2hhcnNldCA9IHBhcnRzWzFdOwotCQl9Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihIVE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlID0gbnVsbDsKLQkJdGhpcy5mQ2hhcnNldCA9IG51bGw7Ci0JCS8qCi0JCSAqIGlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgeyBpZgotCQkgKiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeyBJVGV4dEhlYWRSZWdpb24gdmFsdWVUb2tlbiA9Ci0JCSAqIHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsgU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0KLQkJICogdmFsdWVUb2tlbi5nZXRUeXBlKCk7IGlmIChpc0xlZ2FsKHZhbHVlVG9rZW5UeXBlKSkgeyByZXN1bHRWYWx1ZSA9Ci0JCSAqIHZhbHVlVG9rZW4uZ2V0VGV4dCgpOyBpZiAoREVCVUcpIHsgU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZAotCQkgKiBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7IH0gfSB9IH0KLQkJICovCi0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlpZiAodGhpcy5ERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0b2tlbik7Ci0JCQl9Ci0JCQlTdHJpbmcgdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJaWYoY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKHRva2VuVHlwZSkpIHsKLQkJCQkKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gSFRNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuTWV0YVRhZ0NvbnRlbnRUeXBlKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCWlmICh0aGlzLkRFQlVHKSB7Ci0JCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odmFsdWVUb2tlbik7Ci0JCQkJCX0KLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJdGhpcy5mQ29udGVudFR5cGVWYWx1ZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCWlmICh0aGlzLmZDb250ZW50VHlwZVZhbHVlICE9IG51bGwpIHsKLQkJCXBhcnNlQ29udGVudFR5cGVWYWx1ZSh0aGlzLmZDb250ZW50VHlwZVZhbHVlKTsKLQkJfQotCQlmaW5hbFRva2VuID0gdG9rZW47Ci0JCXJldHVybiBmaW5hbFRva2VuOwotCi0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBjYW5IYW5kbGVBc1VuaWNvZGVTdHJlYW0oU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIGNhbkhhbmRsZUFzVW5pY29kZSA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjgzQnl0ZUJPTSkgewotCQkJY2FuSGFuZGxlQXNVbmljb2RlID0gdHJ1ZTsKLQkJCXRoaXMuZkNoYXJzZXQgPSAiVVRGLTgiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2QkUgfHwgdG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2TEUpIHsKLQkJCWNhbkhhbmRsZUFzVW5pY29kZSA9IHRydWU7Ci0JCQl0aGlzLmZDaGFyc2V0ID0gIlVURi0xNiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gY2FuSGFuZGxlQXNVbmljb2RlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCi0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDIuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIklsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TGFyZ2VDYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiTGFyZ2VOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdExhcmdlTm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIkxhcmdlTm9FbmNvZGluZy5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuTUFYX0NIQVJTX1JFQUNIRUQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdE11bHRpTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIk11bHRpTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub3F1b3RlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vcXVvdGVzLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXNVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9xdW90ZXNVVEYxNmxlLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJ1dGYxNmxlLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgInV0ZjE2YmUuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIpOwotCX0KLQkKLQkvKgotCQlzdW4uaW8uTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24KLQkJYXQgc3VuLmlvLkJ5dGVUb0NoYXJVVEY4LmNvbnZlcnQoQnl0ZVRvQ2hhclVURjguamF2YToyNjIpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2RlciRDb252ZXJ0ZXJTRC5jb252ZXJ0SW50byhTdHJlYW1EZWNvZGVyLmphdmE6MzE0KQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuaW1wbFJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjM2NCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyLnJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjI1MCkKLQkJYXQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlci5yZWFkKElucHV0U3RyZWFtUmVhZGVyLmphdmE6MjEyKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyLnl5X2FkdmFuY2UoSFRNTEhlYWRUb2tlbml6ZXIuamF2YTozNDApCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXIucHJpbUdldE5leHRUb2tlbihIVE1MSGVhZFRva2VuaXplci5qYXZhOjQ3NykKLQkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IVE1MSGVhZFRva2VuaXplci5nZXROZXh0VG9rZW4oSFRNTEhlYWRUb2tlbml6ZXIuamF2YToyMzIpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIucGFyc2VIZWFkZXIoSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YToxNzUpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuZG9UZXN0RmlsZShIVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjU3KQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTozNykKLQkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MSGVhZFRva2VuaXplclRlc3Rlci50ZXN0VVRGMTZCT00oSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YToyOTMpCi0JKi8KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJPTSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJ1dGYxNkJPTS5odG1sIjsKLQkJWmlwcGVkVGVzdCB0ZXN0ID0gbmV3IFppcHBlZFRlc3QoKTsKLQkJdGVzdC5zZXRVcCgpOwotCQlJRmlsZSBmaWxlID0gdGVzdC5nZXRGaWxlKGZpbGVuYW1lKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlLmdldExvY2F0aW9uVVJJKCkuZ2V0UGF0aCgpKTsKLQkJZG9UZXN0RmlsZShmaWxlUmVhZGVyLCAiVVRGLTE2IiwgbnVsbCk7Ci0JCXRlc3Quc2h1dERvd24oKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjN2VhMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTCBleHRlbmRzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbiB7Ci0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC91dGYxNmxlLmh0bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL25vcXVvdGVzVVRGMTZsZS5odG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sIiwgbnVsbCk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiZjc3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLkhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjhiNWM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Y2E2MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFdpbk5UOyBVKSBbTmV0c2NhcGVdIj4KLTxNRVRBIGNvbnRlbnQ9InRleHQvY3NzIiBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiPgotPHRpdGxlPnNtb2tlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPiBTbW9rZSBUZXN0IC0gWE1MIEVkaXRvcjwvaDI+Ci1MYXN0IHVwZGF0ZWQ6IEp1bmUgMjUsIDIwMDEKLTxQPlRoaXMgU21va2UgVGVzdCBwcmltYXJpbHkgZm9jdXNlcyBvbiB0aGUgUlRQIHBvcnRpb24gb2YgdGhlIFhNTCAKLUVkaXRpb3IsIHdoaWNoIGlzIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci4gSXQgYWxzbyBwZXJmb3JtcyAKLXNvbWUgaW50ZWdyYXRpb24gdGVzdGluZy4gRm9yIGV4YW1wbGUsIGl0IHRlc3RzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIAotdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzIG9mIHRoZSBYTUwgRWRpdG9yLCBhcyB3ZWxsIGFzIHdpdGggdGhlIAotT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGZpbGVzIGNyZWF0ZWQgCi10aHJvdWdoIHRoZSBYTUwgRmlsZSB3aXphcmQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFhNTCBDYXRhbG9nIGFyZSAKLXN1cHBvcnRlZCBhcyBleHBlY3RlZC48L1A+Ci08UD48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+Tk9URTwvQj46IFhNTCBmaWxlcyBhcmUgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB0aGF0IHRoaW5ncyBhcHBlYXIgCi1leGFjdGx5IGFzIG5vdGVkLjwvRk9OVD48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2V0dXA8L0ZPTlQ+PC9IMj4KLTxQPjxCPlN0YXJ0aW5nIENsZWFuPC9CPjwvUD4KLTx1bD4KLSAgICA8bGk+IERlbGV0ZSBhbnkgZXhpc3Rpbmcgd29ya2JlbmNoPC9saT4KLSAgICA8bGk+IFN0YXJ0IEVjbGlwc2U8L2xpPgotPC91bD4KLTxQPjxCPk9wZW4gYW4gWE1MIFBlcnNwZWN0aXZlPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5PcGVuIFBlcnNwZWN0aXZlPC9CPiB0b29sYmFyIGJ1dHRvbiBpbiB0aGUgdXBwZXIgbGVmdDwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5PdGhlci4uLjwvQj48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+WE1MPC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIHZpZXdzIGFwcGVhciBpbiB0aGUgWE1MIHBlcnNwZWN0aXZlOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlIGxvY2F0aW9uIG9mIHRoZSBPdXRsaW5lIGFuZCBOYXZpZ2F0b3Igdmlld3MgYXJlIHJldmVyc2VkIGZyb20gdGhlIFJlc291cmNlIGFuZCBXZWIgcGVyc3BlY3RpdmVzLiBEbyB3ZSB3YW50IHRvIHRyeSB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgcGVyc3BlY3RpdmVzPyBBbHNvLCBJIG9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2NCB0byBlbmFibGUgZWFzeSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgdmlldyBmcm9tIHdpdGhpbiB0aGUgWE1MIHBlcnNwZWN0aXZlLiBJZiB0aGlzIHZpZXcgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIFBlcnNwZWN0aXZlIGJlY2F1c2UgaXRzIHVzZSBpcyBsaW1pdGVkLCB0aGVuIHJlY29tbWVuZCB3ZSBhdCBsZWFzdCBwcm92aWRlIGEgU2hvdyBvciBIaWRlIFByb3BlcnRpZXMgVmlldyB0b29sYmFyIGJ1dHRvbiAoc2ltaWxhciB0byB0aGUgYnV0dG9ucyB0aGF0IFBhZ2UgRGVzaWduZXIgcHJvdmlkZXMpLjwvRk9OVD48L0xJPgotPC9VTD4KLTxQPjxCPlByb2plY3QgQ3JlYXRpb24gYW5kIEZpbGUgSW1wb3J0czxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPkNyZWF0ZSBhIFByb2plY3QsIDxCPlhNTFRlc3QyPC9CPiA8L0xJPgotICAgIDxMST5JbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlcyBpbnRvIHRoaXMgcHJvamVjdDoKLSAgICA8VUw+Ci0gICAgICAgIDxMST48Qj5QdXJjaGFzZU9yZGVyLnhzZDwvQj48L0xJPgotICAgICAgICA8TEk+PEI+SW52b2ljZS5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEI+Sm9iRGVzYy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+V2lyZWxlc3MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPjwvTEk+Ci0gICAgPExJPjxCPkFUUy5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEZPTlQgY29sb3I9IiNmZjAwMDAiPmFueSBvdGhlcnM/PC9GT05UPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICBDcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5DcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIHNjcmF0Y2g8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycyBhbmQgdGhlIEZpbmlzaCBidXR0b24gaXMgZGlzYWJsZWQuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5ERUZFQ1Q6PC9CPiAxNzc2NjAgLSBYTUwgRmlsZSB3aXphcmQ6IGRpc2FibGUgRmluaXNoIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZTwvRk9OVD4uPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbVNjcmF0Y2g8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nOgotICAgIDxVTD4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBhcHBlYXJzIGluIHRoZSBOYXZpZ2F0b3Igdmlldy48L0xJPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGlzIG9wZW4gdG8gdGhlIERlc2lnbiBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yIGFuZCBoYXMgZm9jdXMuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gdGFiIGFwcGVhcnMgYmVmb3JlIHRoZSBTb3VyY2UgdGFiIGluIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZSBzaG93IG5vIGNvbnRlbnQuPC9MST4KLSAgICAgICAgPExJPnRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzIHNob3cgbm90aGluZy48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U3dpdGNoIHRvIHRoZSBTb3VyY2UgcGFnZS4gVmVyaWZ5IHRoZSBjdXJzb3IgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlJpZ2h0IG1vdXNlIGJ1dHRvbiAyIGFuZCB2ZXJpZnkgYSBwb3B1cCBtZW51IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FsIGxpc3QgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OzwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyBpcyBpbnNlcnRlZCBhbmQgYXBwZWFycyBzeW50YXggaGlnaGxpZ2h0ZWQgYW5kIGFuIGVudHJ5IGFwcGVhcnMgZm9yIGl0IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIFhNTCBkZWNsYXJhdGlvbiBhbmQgdmVyaWZ5IDxCPnZlcnNpb248L0I+IGFuZCA8Qj5lbmNvZGluZzwvQj4gYXBwZWFyIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGlzIHVzZWQgdG8gd29yaywgYnV0IG5vdyBpdCdzIG5vdCB3b3JraW5nLiBPcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjIgLSBYTUwgZGVjbGFyYXRpb24gYXR0cmlidXRlcyBub3QgYXBwZWFyaW5nIGluIFByb3BlcnRpZXMgdmlldy4gSWYgd2UgZGVjaWRlIHRvIG5vdCB0cmVhdCB2ZXJzaW9uIGFuZCBlbmNvZGluZyBhcyBhdHRyaWJ1dGVzLCB0aGVuIHRoaXMgc3RlcCBzaG91bGQgYmUgcmVtb3ZlZC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+Q29udGludWUgdG8gdGhlIG5leHQgc2VjdGlvbi48L0xJPgotPC9VTD4KLTxQPjxCPklkZW50aWZ5IGEgbG9jYWwgRFREICg8L0I+dmVyaWZpZXMgYSBEVEQgaXMgaW1tZWRpYXRlbHkgcmVjb2duaXplZDsgaW4gdGhlIHBhc3QsIHlvdSBoYWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgV29ya2JlbmNoPEI+KTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlR5cGUgdGhlIGZvbGxvd2luZyBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uIGluIDxCPmZyb21TY3JhdGNoLnhtbDwvQj46IDxCPiZsdDshRE9DVFlQRSBJbnZvaWNlIFNZU1RFTSAmcXVvdDtJbnZvaWNlLmR0ZCZxdW90OyZndDs8L0I+LiBUaGUgdGV4dCBzaG91bGQgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGFzIHlvdSB0eXBlIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBnZXQgYWRkZWQgdG8gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi5WZXJpZnkgb25seSA8Qj5JbnZvaWNlPC9CPiBhbmQgPEI+Y29tbWVudDwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0LiAoPEI+Tk9URTwvQj46IDxCPkludm9pY2U8L0I+IGlzIHRoZSByb290IGVsZW1lbnQpPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SW52b2ljZTwvQj4gYXMgYSBzZWxlY3Rpb24uIFZlcmlmeSB0aGUgSW52b2ljZSBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGluc2VydGVkIGludG8gdGhlIFNvdXJjZSBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJldHdlZW4gdGhlbS4gQW4gZWxlbWVudCBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBJbnZvaWNlIGluIHRoZSBPdXRsaW5lIHZpZXcuICg8Qj5OT1RFPC9CPjogWE1MIGlzIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgeW91IHNlZSBJbnZvaWNlIGFuZCBub3QgaW52b2ljZSBldmVyeXdoZXJlKS48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhcnMgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGluIHRoZSBvcmRlciBzaG93bik6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JdGVtIGlzIGFwcGVhcmluZyBiZWZvcmUgSGVhZGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gc29ydCB0aGUgbGlzdCBhbHBoYWJldGljYWxseS4gVGhhdCBtZWFucyB0aGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGQgdGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCBkZWZpbml0aW9uIGZvciBJbnZvaWNlIGluIHRoZSBEVEQuIEluIG90aGVyIHdvcmRzLCB1c2VycyBzaG91bGQgc2VlIGNoaWxkIHRhZ3MgbGlzdGVkIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jaW5nIG9yZGVyIGluIHRoZSBEVEQsIHdoaWNoIHRoZSBEVEQgRWRpdG9yIHNob3dzLiBWaW9sYXRpbmcgdGhlIHNlcXVlbmNpbmcgb3JkZXIgY2F1c2VzIGFuIFhNTCBmaWxlIHRvIGJlY29tZSBub3QgdmFsaWQuIDxCPkRFRkVDVDo8L0I+IDE3NzY2ODwvRk9OVD4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5IZWFkZXI8L0xJPgotICAgICAgICA8TEk+SXRlbTwvTEk+Ci0gICAgICAgIDxMST5jb21tZW50PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkhlYWRlcjwvQj4gYXMgYSBzZWxlY3Rpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2Ugbm93IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJlZm9yZSA8Qj5pbnZvaWNlTnVtYmVyPC9CPjo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI4MyIgc3JjPSJpZGVudGlmeURURC5qcGciIHdpZHRoPSI0ODUiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5IZWFkZXI8L0I+IGFwcGVhcnMgbmVzdGVkIHVuZGVyIDxCPkludm9pY2U8L0I+IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgPExJPkNsb3NlIHRoaXMgZmlsZSwgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB3aGVuIHByb21wdGVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuPC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IHRoZSBjaGFuZ2VzIHdlcmUgc2F2ZWQuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlLiBWZXJpZnkgbm8gc2F2ZSBjaGFuZ2VzIHByb21wdCBhcHBlYXJzLjwvTEk+Ci08L1VMPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYW4gaW1wb3J0ZWQgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5GaWxlLSZndDtOZXctJmd0O1hNTCBGaWxlPC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGUgZnJvbSBhIERURCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tTG9jYWxEVEQ8L0I+PC9MST4KLSAgICAgICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2U8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5JbXBvcnQgRmlsZTwvQj4gYnV0dG9uCi0gICAgPFVMPgotICAgICAgICA8TEk+VXNlIHRoZSBCcm93c2UgYnV0dG9uIHRvIGZpbmQgPEI+dGVzdGNhc2UuZHRkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXIuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhbHJlYWR5IGZpbGxlZCBpbi4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+IHRvIGNsb3NlIHRoZSBJbXBvcnQgRmlsZSB3aXphcmQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+RXhwYW5kIDxCPlhNTHRlc3QyPC9CPiBhbmQgdGhlbiBzZWxlY3QgPEI+dGVzdGNhc2UuZHRkPC9CPi4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldhcyBleHBlY3RpbmcgdG8gc2VlIHRoZSBpbXBvcnRlZCBmaWxlIHNlbGVjdGVkIGluIHRoZSBXb3JrYmVuY2ggZmlsZXMgbGlzdCwgYnV0IGl0IHdhc24ndC4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZS48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+dGVzdGNhc2U8L0I+IGFzIHRoZSBSb290IEVsZW1lbnQuPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSByZXF1aXJlZCBjb250ZW50IG9ubHk8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj50ZXN0Y2FzZS5kdGQ8L0I+IGFwcGVhcnMgYXMgdGhlIFN5c3RlbSBJZC48L0xJPgotICAgIDxMST5TZWxlY3QgRmluaXNoLiBWZXJpZnkgPEI+ZnJvbUxvY2FsRFRELnhtbDwvQj4gYXBwZWFycyBpbiB0aGUgWE1MIEVkaXRvci4gVmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5MCIgc3JjPSJpbXBvcnREVEQuanBnIiB3aWR0aD0iNjYwIj48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTciIHNyYz0ib3V0bGluZTEuanBnIiB3aWR0aD0iNjU1Ij48L0xJPgotICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5oZWFkZXI8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzIGFwcGVhciBpbiB0aGUgCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHZpZXc6Ci0gICAgICAgIDxUQUJMRSBib3JkZXI9IjEiPgotICAgICAgICAgICAgPFRCT0RZPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPjxCPlByb3BlcnR5PC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPjxCPlZhbHVlPC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5jYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPndlYnRvb2w8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+bnVtYmVyPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+aWR2YWx1ZTA8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3RhdGU8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5BY2Nlc3NhYmlsaXR5PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YlN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgPC9UQk9EWT4KLSAgICAgICAgPC9UQUJMRT4KLSAgICAgICAgPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj50ZXN0QnVja2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgYSBwcm9wZXJ0eSBvZiA8Qj50eXBlPC9CPgotICAgICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDxCPkNvbXBvbmVudFRlc3Q8L0I+LgotICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4gCi0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGUgdmFsdWVzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgdXNlIGNvbnRlbnQgYXNzaXN0IHRvIGluc2VydCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSA8Qj5jYXRlZ29yeTwvQj4gYXR0cmlidXRlIGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgPEI+c3BhY2U8L0I+IGFuZCB0aGVuIGhpdCBwcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IG9ubHkgPEI+c3RhdGU8L0I+IGFuZCA8Qj5zdWJTdWJDYXRlZ29yeTwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0IChjb250ZW50IGFzc2lzdCBpcyBzbWFydCBlbm91Z2ggbm90IHRvIGxpc3QgYW55IGF0dHJpYnV0ZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBzdGFydCB0YWcgc2luY2UgYXR0cmlidXRlcyBjYW4gb25seSBhcHBlYXIgb25jZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+c3RhdGU8L0I+LjwvTEk+ICAgCi0gICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnN0YXRlPSJVbmRlckNvbnN0cnVjdGlvbiI8L0I+IGlzIGluc2VydGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoY29udGVudCBhc3Npc3QgYXV0b21hdGljYWxseSBpbnNlcnRzIGFueSBkZWZhdWx0IHZhbHVlcy4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgUHJvcGVydGllcyB2aWV3LCB1cGRhdGUgdGhlIDxCPnN0YXRlPC9CPiBhdHRyaWJ1dGUgdmFsdWUgdG8gIlVuZGVyUmV2aWV3IiAKLSAgICAgICAgICAgIChhIHB1bGxkb3duIGxpc3Qgb2YgdmFsdWVzIHNob3VsZCBiZSBhdmFpbGFibGUpLiBWZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQKLSAgICAgICAgICAgIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcy4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIDxCPmhlYWRlcjwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIEF0dHJpYnV0ZS0+c3ViU3ViQ2F0ZWdvcnk8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUgKGl0J3Mgc21hcnQKLSAgICAgICAgICAgICAgICBlbm91Z2ggdG8ga25vdyB3aGljaCBhdHRyaWJ1dGVzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IC4uLiBsaWtlIGNvbnRlbnQgCi0gICAgICAgICAgICAgICAgYXNzaXN0LiBDb29sISkuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIGluIGEgdmFsdWUgb2YgPEI+S2V5Ym9hcmQgc3VwcG9ydDwvQj4uPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXc8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSB0aGF0IHJlZmVyZW5jZXMgYSByZW1vdGUgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+T3BlbiB0aGUgPEI+V2lyZWxlc3MueG1sPC9CPiBmaWxlLjwvTEk+Ci0gICAgPExJPlZlcmlmeSBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIFNvdXJjZSBwYWdlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjIzOSIgc3JjPSJ3aXJlbGVzcy5qcGciIHdpZHRoPSI2NTYiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgCi0gICAgICAgIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIxODkiIHNyYz0ib3V0bGluZTIuanBnIiB3aWR0aD0iNjU2Ij48L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGNvbnRlbnQgYXNzaXN0IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5EZWZlY3QgMTc2Mzc5IChpbiB2ZXJpZnkgc3RhdGUsIGJ1dCBzdGlsbCBub3Qgd29ya2luZyk8L0ZPTlQ+LjwvTEk+Ci0gICAgICAgIDxVTD4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCBvbiB0aGUgbmV3IGxpbmUuPC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKGluIHRoZSBvcmRlciBzaG93bik6IAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5oZWFkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGVtcGxhdGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jYXJkPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlR5cGUgYSBzcGFjZSBiZWZvcmUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb24gdGhlIGNhcmQgc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKG5vdCBuZWNlc3NhcmlseSBpbiB0aGUKLSAgICAgICAgICAgICAgIG9yZGVyIHNob3duKS4gCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRpdGxlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmV3Y29udGV4dDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9yZGVyZWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST54bWw6bGFuZzwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9uZW50ZXJiYWNrd2FyZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9udGltZXI8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnBvc3Q8L0I+IGFuZCA8Qj5nZXQ8L0I+IGFwcGVhciBhcyBwcm9wb3NhbHMuPC9MST4KLSAgICAgICAgPC9VTD4KLSAgICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+Y2FyZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotICAgICAgICAgICAgPEI+Y2FyZDwvQj4gdGFnIGFwcGVhciBhcyBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE5vIHZhbHVlcyBzaG91bGQgYXBwZWFyIGZvciB0aGVzZSBwcm9wZXJ0aWVzLjwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj5wb3N0ZmllbGQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnBvc3RmaWVsZDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywKLSAgICAgICAgICAgIG5vbmUgb2Ygd2hpY2ggc2hvdWxkIGhhdmUgYSB2YWx1ZToKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmFtZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnZhbHVlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgZWxlbWVudHMvdGFncykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNvcHkgYW5kIHBhc3RlIHRoZSA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Tm90aWNlIHRoZSByYW5nZSBvZiB0aGUgPEI+Y2FyZDwvQj4gdGFnIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gYXJlYS48L0xJPgotICAgICAgICAgICAgPExJPkNvcHkgdGhpcyByYW5nZSBvZiBsaW5lcyB1c2luZyB0aGUgPEI+RWRpdC0+Q29weTwvQj4gcHVsbGRvd24gbWVudSBzZWxlY3Rpb24uPC9MST4KLSAgICAgICAgICAgIDxMST5QYXN0ZSBhZnRlciB0aGUgPEI+Y2FyZDwvQj4gZW5kIHRhZyB1c2luZyBDdHJsK1YuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIHdlcmUgcGFzdGVkIG4gdGhlIFNvdXJjZSBwYWdlLgotICAgICAgICAgICAgICAgIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzIAotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW5vdGhlciA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj53bWw8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQ2hpbGQtPmNhcmQ8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS4gTk9URTogaXQgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkIG91dAotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBvcmlnaW5hbCBjYXJkIHRhZywgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgdGhhdCBhIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuIDwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4gCi08L1VMPgotPFA+PEI+Q3JlYXRlIGFuZCBWYWxpZGF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgc2NoZW1hPC9CPjxCUj4KLQotPFA+KHRoZXNlIHN0ZXBzIGFyZSB0YWtlbiBmcm9tIHRoZSAnRGVzaWduJyBzbW9rZSB0ZXN0LCBleGNlcHQgdGhlIFNvdXJjZSBQYWdlIGlzIHRoZSBmb2N1cyk8L1A+Ci08dWw+Ci08bGk+Ci1SaWdodCBtb3VzZSBidXR0b24gMiBvbiB0aGUgUHVyY2hhc2VPcmRlci54c2QgYW5kIHNlbGVjdCA8Yj5DcmVhdGUgWE1MCi1GaWxlPC9iPi48L2xpPgotCi08bGk+Ci1BY2NlcHQgdGhlIGRlZmF1bHQgZmlsZSBuYW1lcy48L2xpPgotCi08bGk+Ci1JbiB0aGUgU2VsZWN0IFJvb3QgRWxlbWVudCBwYWdlLCBjaG9vc2UgPGI+cHVyY2hhc2VPcmRlcjwvYj4gYXMgcm9vdCBlbGVtZW50LjwvbGk+Ci0KLTxsaT4KLUNob29zZSA8Yj5DcmVhdGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNvbnRlbnQ8L2I+IHRvIGNyZWF0ZSBhIG1pbmltYWwKLWRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLUVudGVyIDxiPnBvPC9iPiBhcyB0aGUgbmFtZXNwYWNlIHByZWZpeC48L2xpPgotCi08bGk+T24gRmluaXNoLCBhIFB1cmNoYXNlT3JkZXIueG1sIGlzIGNyZWF0ZWQgYW5kIHRoZSBYTUwgRWRpdG9yIGlzIG9wZW5lZC4gKFNlbGVjdCBTb3VyY2UgUGFnZSBpZiBub3QgYWxyZWFkeSB0aGVyZS4pPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgc2hvdWxkIGJlIGludmFsaWQuPC9saT4KLQotPGxpPgotRG91YmxlIGNsaWNrIG9uIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBzaG91bGQgYmUgcG9zaXRpb25lZCB0byB0aGUgbGluZQotaW4gZXJyb3IsIGkuZS4gdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZS4gSXQgaXMgaW52YWxpZCBiZWNhdXNlIHRoZQotdmFsdWUgaXMgbm90IHNldCB0byBtYXRjaCB0aGUgWE1MIHNjaGVtYSBwYXR0ZXJuIGZhY2V0ICJkMy1bQS1aXXsyfSIgKDMKLWRpZ2l0cyBmb2xsb3dlZCBieSAyIGNoYXJhY3RlcnMpLjwvbGk+Ci0KLTxsaT5JbiB0aGUgU291cmNlIFZpZXcsIGxvY2F0ZSB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlIHVuZGVyIGVsZW1lbnQgaXRlbS4KLUVudGVyIHRoZSB2YWx1ZSAzMzMtQUIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC9VTD4KLTxVTD4KLSAgPExJPgotICA8SFI+PC9MST4KLSAgPGxpPlBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlICZsdDtpdGVtcyZndDsgdGFnIGFuZCBiZXN1cmUgIml0ZW0iIGlzIAotICBsaXN0ZWQgaW4gdGhlIGNvbnRlbnQgYXNzaXN0IGxpc3QuIDwvbGk+Ci08bGk+UmVuYW1lIHRoZSBwdXJjaGFzZU9yZGVyLnhzZCB0bywgc2F5LCBwdXJjaGFzZU9yZGVySE9MRC54c2Q8L2xpPgotPGxpPlZlcmlmeSB0aGF0IGNvbnRlbnQgYXNzaXN0IHN0aWxsIGdpdmVzIHlvdSAiaXRlbSIgYXMgYWJvdmUuPC9saT4KLTxsaT5Ob3cgc2VsZWN0IHRoZSAiUmVsb2FkIERlcGVuZGFuY2llcyIgYnV0dG9uLjwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgbm93IGNvbnRlbnQgYXNzaXN0IG5vIGxvbmdlciBsaXN0cyBhbnkgaXRlbXMgb3RoZXIgCi10aGF0IHRoZSBtYWNybyAiY29tbWVudCIuPC9saT4KLTxsaT5SZXBlYXQgbWFraW5nIHB1cmNoYXNlT3JkZXIueHNkIHdvcmthYmxlIGFnYWluLjwvbGk+Ci08L3VsPgotPFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48L1A+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIGZvciBhIHNoaXBwZWQgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPgotPEJSPgotW3B1dCBpbiBvcHRpb25hbCBzZWN0aW9uIC4uIHRoaXMgaXNuJ3QgYSBjdXN0b21lciBzY2VuZXJpb108QlI+Ci1UbyB2ZXJpZnkgdGhhdCBzaGlwcGVkIERURHMgYXJlIHdvcmtpbmc6PEJSPgotPFVMPgotPExJPgotVXNlIGEgd2ViIHByb2plY3Qgd2l0aCBhIHN0YW5kYXJkIHdlYi54bWwgZmlsZSBpbiBpdC4gQmUgc3VyZSAKLXRoZXJlIGlzIG5vIHdlYi1hcHBfMl8yLmR0ZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIEluIHRoZSB3ZWIueG1sIGZpbGUgCi1pdHNlbGYsIG1hbmdsZSB0aGUgd2ViLWFwcF8yXzIuZHRkIGZpbGVuYW1lIGluIHRoZSBzeXN0ZW0gaWQgYSBsaXR0bGUsIHN1Y2ggYXMgCi1jaGFuZ2UgaXQgdG8geGViLWFwcF8yXzIuZHRkIHRvIGJlIHN1cmUgaXQgY2FuJ3QgYmUgZm91bmQgdmlhIHRoZQotbm9ybWFsIGh0dHAgbWV0aG9kIChUaGlzIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgZm9yIHRoZSBmdW50aW9uIHRvIHdvcmssCi1pdHMganVzdCB0byBiZSBzdXJlIG9ubHkgdGhlIGNhdGFsb2cgZnVuY3Rpb24gaXMgaW4gZWZmZWN0KS4KLTwvTEk+Ci08TEk+Ci1HbyB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZSwgYW5kIG9wZW4gdGhlIFhNTCBDYXRhbG9nLiBWZXJpZnkgdGhlcmUgCi1pcyBhbiBlbnRyeSBmb3IgLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOLgotPC9MST4KLTxMST4KLU9uY2UgYWxsIHRoZSBwcmVwIHdvcmsgaXMgZG9uZSAoZmlsZXMgZGVsZXRlZCwgdGV4dCBtb2RpZmllZCksIHlvdSBzaG91bGQgCi1leGl0IGFuZCByZXN0YXJ0IEVjbGlwc2UgdG8gYmUgc3VyZSB5b3UgaGF2ZSBhIGZyZXNoIHN0YXJ0LgotPC9MST4KLTxMST4KLU9wZW4gdGhlIHdlYi54bWwgZmlsZSBhbmQgYmUgc3VyZSB0aGF0IGNvbnRlbnQgYXNzaXN0IHdvcmtzIGZvciB0aGF0IGZpbGUuCi1Gb3IgZXhhbXBsZSwgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgJmx0Oy9kaXNwbGF5LW5hbWUmZ3Q7IHRhZywgY3RybC1zcGFjZSAKLXNob3VsZCBwcm92aWRlIGEgbG9uZyBsaXN0IG9mIGVsZW1lbnRzLCBzdGFydGluZyB3aXRoIHNlcnZsZXQsIHNlcnZsZXQtbWFwcGluZywgZXRjLgotVGhpcyBpbmRpY2F0ZXMgdGhlIHNoaXBwZWQgRFREIGZ1bmN0aW9uIGlzIHdvcmtpbmcgYW5kIGNvbmZpZ3VyZWQgCi1jb3JyZWN0bHkgKGF0IGxlYXN0IGZvciB0aGUgd2ViLnhtbCBmaWxlKS4KLTwvTEk+Ci08L1VMPgotPC9QPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBuZXcgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPGI+VGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSAnRGVzaWduJyBTbW9rZSBUZXN0OiBYTUwgQ2F0YWxvZyBmb3IgWE1MIFNjaGVtYTwvYj4KLTx1bD4KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQ8L2xpPgotCi08bGk+Ci1DcmVhdGUgYSBuZXcgcHJvamVjdCwgWE1MVGVzdDI8L2xpPgotCi08bGk+Ci1Nb3ZlIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBpbnRvIFhNTFRlc3QyLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCi12YWxpZC4gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGdpdmUgeW91IGEgaGludCB0aGF0IHRoZSBmaWxlIFB1cmNoYXNlT3JkZXIueHNkCi1jYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIFdpbmRvdy0+UHJlZmVyZW5jZXMgYW5kIHNlbGVjdCB0aGUgWE1MIENhdGFsb2cuPC9saT4KLQotPGxpPgotRW50ZXIgdGhlIHBhaXIgPGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSBmOlxlY2xpcHNlXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPjwvbGk+Ci0KLTxicj5PciBhbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5Ci1vZiB0aGUgd29ya2JlbmNoIGFzIGZvbGxvd3M6Ci08YnI+PGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSAuXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPgotPGxpPgotQ2xpY2sgb24gdGhlIFJlbG9hZCBidXR0b24gdG8gcmVsb2FkIHRoZSBjYXRhbG9nIHNldHRpbmdzLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvdWw+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgU2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGU8L0I+PEJSPgotKE5PVEU6IHRoZSA8Qj5JZGVudGlmeSBhIGxvY2FsIERURDwvQj4gdGVzdCBjYXNlIHRlc3RzIHRoZSBzYXZlIHByb21wdCBvbiBhIGZpbGUgY2xvc2UuKTwvUD4KLTxVTD4KLSAgPExJPklmIGFueSBmaWxlcyBhcmUgb3Blbiwgc2VsZWN0IDxCPkZpbGUtJmd0O0Nsb3NlIEFsbDwvQj4gKG9yIDxCPkN0cmwrU2hpZnQrRjQ8L0I+KSB0byBjbG9zZSB0aGVtLjwvTEk+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBczwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlIEFzPC9CPiB0b29sYmFyIGJ1dHRvbiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGRpc2FibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhlIERlc2lnbiBwb3B1cCBtZW51IGFsc28gaGFkIGEgU2F2ZSBzZWxlY3Rpb24uIE9wZW4gYSBzdWdnZXN0aW9uIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+bm8gPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgU291cmNlIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChjaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBlbmFibGVkPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGVuYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgPExJPmEgPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+SGl0IDxCPkN0cmwrUzwvQj4uIDwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+RmlsZS0mZ3Q7U2F2ZSBBbGw8Qj48L0I+LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5TYXZlPC9CPiBmcm9tIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+Q2xvc2UgYW5kIHRoZW4gcmVvcGVuIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIHByZXZpb3VzIHN0ZXBzIGFwcGVhciBpbiB0aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMuPC9MST4KLTwvVUw+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGUgYWNyb3NzIG11bHRpcGxlIHBlcnNwZWN0aXZlcyAob3B0aW9uYWwpPC9CPjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZS48L0xJPgotICA8TEk+T3BlbiBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBieToKLSAgPFVMPgotICAgIDxMST48Qj5zZWxlY3RpbmcgUGVyc3BlY3RpdmUtJmd0O09wZW4tJmd0O090aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPndoaWxlIGhvbGRpbmcgZG93biB0aGUgPEI+U2hpZnQ8L0I+IGtleSwgc2VsZWN0IDxCPlhNTDwvQj4uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+VmVyaWZ5IGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ1dHRvbiBhcHBlYXJzIGluIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIHRoZSBXb3JrYmVuY2ggdG8gcmVwcmVzZW50IHRoaXMgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5PcGVuIHRoZSBzYW1lIHhtbCBmaWxlIGFzIGluIHRoZSBmaXJzdCBzdGVwIGFib3ZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5IGluIGJvdGggWE1MIFBlcnNwZWN0aXZlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSAqIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiIG9mIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgZXZlbiB3aGVuIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiBUYWxrIHRvIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+TWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZXNlIGNoYW5nZXMgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGFuZCByZXNwb25kIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbiBhcHBsaWVzIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotPC9VTD4KLTxQPjxCPlZhbGlkYXRpbmcgYSBub24gd2VsbCBmb3JtZWQgWE1MIEZpbGUgKG5vIERURC9TY2hlbWEpPC9CPjxCUj4KLShOT1RFOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgYmUgdHlwZWQgaW4uIFRoaXMgdGVzdCBjYXNlIHRyaWVzIHRvIGNvdmVyIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIGVycm9ycyB0aGF0IHJlbmRlciBhbiBYTUwgZmlsZSBhcyBub3QgYmVpbmcgd2VsbC1mb3JtZWQuIEl0IGlzIG5vdCBpbnRlbmRlZCB0byB2ZXJpZnkgdGhhdCBhbGwgcG9zc2libGUgZXJyb3JzIGFyZSBiZWluZyBkZXRlY3RlZCBhbmQgZ3JhY2VmdWxseSBoYW5kbGVkLiApPC9QPgotPFVMPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+PExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5Ob25XZWxsRm9ybWVkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7LjwvQj48L0xJPgotICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbi48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IGNvbW1lbnQuPC9MST4KLSAgPExJPkVtYmVkIG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBpbiB0aGUgY29tbWVudC4gCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGNhbiBub3QgYmUgZW1iZWRkZWQgd2l0aGluIGEgY29tbWVudCk8L0ZPTlQ+PC9MST4KLSAgPExJPlR5cGUgaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBhcyBzaG93biBiZWxvdzogCi0gICAgICAgIDxGT05UIGNvbG9yPSIjZmYwMDAwIj4oSSBjYW4ndCBzaG93IHRoZSBsaW5lcyB1bnRpbCBkZWZlY3QgMTc3NzU1IGlzIGZpeGVkIC4uLiB1bnRpbCB0aGVuLCBoZXJlJ3MgdGhlIHR5cGUgb2YgdGhpbmdzIHRoYXQgY2F1c2UgCi0gICAgICAgIGEgZG9jdW1lbnQgdG8gbm90IGJlIHdlbGwtZm9ybWVkKTo8L0ZPTlQ+Ci0gIDxVTD4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgdGhhdCBkb24ndCBtYXRjaCBpbiB0aGVpciBjYXNlIHNlbnNpdGl2aXR5IAotICAgICAgICAoZS5nLiwgJmx0O3RhZyZndDsgYW5kICZsdDsvVGFnJmd0OykuIDwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHdoZXJlIHRoZSBzdGFydCB0YWcgY29udGFpbnMgYW4gYXR0cmlidXRlIHZhbHVlIHRoYXQgaXMgbm90IAotICAgICAgICBlbmNsb3NlZCBpbiBxdW90ZXMuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCwgYnV0IG5vdCBYTUwpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSB0YWdzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBuZXN0ZWQuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYSBjaGlsZCB0YWcgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGl0cyBwYXJlbnQgdGFnKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCB0YWcgd2l0aG91dCBhIGNvcnJlc29uZGluZyBlbmQgdGFnLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGFsbCBzdGFydCB0YWdzIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIHRhZyB1bmxlc3MgdGhlIAotICAgICAgICB0YWcgaXMgYW4gZW1wdHkgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBjYW4gYmUgdXNlZCAoJmx0O3Nob3J0VGFnLyZndDspKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+ZG8gbm90IHByb3ZpZGUgYW4gYXR0cmlidXRlIHZhbHVlICg9JnF1b3Q7dmFsdWUmcXVvdDspLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwgZm9yIHRob3NlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIAotICAgICAgICBvbmx5IG9uZSB2YWx1ZSwgYnV0IGl0J3Mgbm90IHZhbGlkIGluIFhNTCk8L0ZPTlQ+PC9MST4KLSAgICAgPExJPmRlZmluZSBhbiBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi0gICAgICAgICBsaW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotICAgICAgICAgYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIERURDwvQj48L1A+Ci08VUw+Ci08TEk+T3BlbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+LjwvTEk+Ci08TEk+RGVsZXRlIGEgY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZSBzdGFydCB0YWdzIChtaXN0eXBpbmcgYSB0YWcgaXMgbm90IHVuY29tbW9uKS48L0xJPgotPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgd2l0aGluIHRoZSBiYWQgdGFnLiBWZXJpZnkgYSBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBhcmVhCi1vZiB0aGUgV29ya2JlbmNoIGluZGljYXRpbmcgdGhhdCB0aGUgYmFkIHRhZyBpcyBhbiB1bmtub3duIHRhZy48L0xJPgotPExJPlNlbGVjdCB0aGUgPEI+VmFsaWRhdGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgYW5kIGFuIGVycm9yIG1hcmtlciBhcHBlYXJzIGluIHRoZSBTb3VyY2UgcGFnZQotdG8gZmxhZyB0aGUgaW52YWxpZCB0YWcuPC9MST4KLTxMST5TZWxlY3QgPEI+RWRpdC0+VW5kbzwvQj4gZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5WZXJpZnkgdGhlIGJhZCB0YWcgZXJyb3Igbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcuPC9MST4KLTxMST5SZW1vdmUgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBpbmRpY2F0aW5nIHRoYXQgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBpcyBtaXNzaW5nPC9MST4KLTxMST5DbG9zZSB0aGUgZmlsZSwgcmVzcG9uZGluZyA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci08TEk+RG91YmxlLWNsaWNrIG9uIHRoZSBlcnJvciBpbiB0aGUgVGFza3MgdmlldywgYW5kIHZlcmlmeSA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+IG9wZW5zIHRvIHRoZQotYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuPC9MST4KLTxMST5IZXJlJ3Mgc29tZSBvdGhlciB2aW9sYXRpb25zIHRoYXQgY2FuIGJlIGF0dGVtcHRlZDoKLTxVTD4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZS48L0xJPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlIHZhbHVlLjwvTEk+Ci08TEk+U3BlY2lmeSBjaGlsZCB0YWdzIG91dCBvZiBzZXF1ZW5jaW5nIG9yZGVyPC9MST4KLTxMST5WaW9sYXRlIHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciBmb3IgYSB0YWcgKGUuZy4sIGlmIHRoZSBEVEQgc2hvd3MgPywgdGhlbiBvbmx5Ci0wIG9yIDEgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBpcyBwZXJtaXR0ZWQpLgotPC9VTD48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLWxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi1hbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLTxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotPCEtLSAgcmVtb3ZlZCBzaW5jZSBkb25lIGVsc2V3aGVyZSBhcyBwYXJ0IG9mIG90aGVyIHNjZW5lcmlvcwotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBTY2hlbWE8L0I+PEJSPgotLS0+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMgKG9wdGlvbmFsKTwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPlVzaW5nIHRoZSBBdXRvIENvbXBsZXRpb24gQ29udGVudCBBc3Npc3QgUHJlZmVyZW5jZTwvQj48QlI+Ci08VUw+Ci08TEk+T3BlbiBhIGFueSBYTUwgZmlsZSB0aGF0IGhhcyBlbm91Z2ggdGFncyB0byBwcm92aWRlIHN5bnRheCBoaWdodGxpZ2h0aW5nLjwvTEk+Ci08TEk+V2hpbGUgdGhhdCBmaWxlIGlzIGxlZnQgb3BlbiwgZ28gdG8gdGhlIFByZWZlcmVuY2VzIHBhZ2UsIHNlbGVjdAotWE1MIEVkaXRvciwgdGhlbiBTb3VyY2UgU3R5bGVzLiA8L0xJPgotPExJPk9uIHRoYXQgcGFnZSwgdXNlIHRoZSBtb3VzZSB0byAic2VsZWN0IiBhIHRhZyBuYW1lLiBUaGUgdGFnIG5hbWUgaXMgbm90IGxpdGVyYWxseQotc2VsZWN0ZWQsIGJ1dCB3aGVuIHlvdSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBleGFtcGxlIHRleHQsIHRoZSBsaXN0Ci1hYm92ZSBpdCB3aWxsIGRpc3BsYXkgdGhlIHR5cGUgb2YgZWxlbWVudCBpdCBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgY29sb3JzIGFyZS48L0xJPgotPExJPkZvciAidGFnIG5hbWUiLCBzZWxlY3QgdGhlIGJvbGQgY2hlY2sgYm94LiBUaGVuIHByZXNzIEFwcGx5LCBhbmQgeW91IHNob3VsZAotc2VlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgaW4geW91ciBhY3RpdmUgZWRpdG9yLjwvTEk+Ci08TEk+U2VsZWN0ICJEZWZhdWx0cyIgYW5kIG1ha2Ugc3VyZSB0aGUgdGFnIG5hbWVzIGFyZSBzZXQgYmFjayB0byBub3QgYm9sZC48L0xJPgotPC9VTD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTxQPjxCPkRvdWJsZS1DbGlja2luZyBXaXRoaW4gdGhlIFNvdXJjZTwvQj4gPEJSPgotKE5PVEU6IGlmIHlvdSBjb250aW51ZSB0byBkb3VibGUtY2xpY2sgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWxlY3Rpb24gYXJlYSB3aWxsIGNvbnRpbnVlIHRvIGV4cGFuZC4gV2hlbiB0aGUgbWF4aW11bSByZWdpb24gYXJlYSBoYXMgYmVlbiByZWFjaGVkLCB0aGUgbmV4dCBkb3VibGUtY2xpY2sgd2lsbCBjYXVzZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLiBTbywgdGhlIHNlbGVjdGlvbnMgd2lsbCB3cmFwL2N5Y2xlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIDxCPkpvYkRlc2MueG1sPC9CPi48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiB0YWcgY29udGVudDoKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPk1pZGRsZXdhcmU8L0I+IG9uIGxpbmUgNy48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+TWlkZGxld2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tm90IHN1cmUgd2hhdCB0aGUgUHJvcGVydGllcyB2aWV3IGlzIHN1cHBvc2VkIHRvIHNob3cuIEl0IGdvZXMgYmxhbmsuIFNlZSBkZWZlY3QgMTc3NzUzLiBBbHNvLCA8Qj5NaWRkbGV3YXJlPC9CPiB3YXNuJ3Qgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFzIGhhZCBleHBlY3RlZC4gVGhlIERlc2lnbiBwYWdlIG9ubHkgc2VlbXMgdG8gc3RheSBpbiBzeW5jIGF0IHRoZSBlbGVtZW50L3RhZyBsZXZlbCBsaWtlIHRoZSBPdXRsaW5lIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYWJvdXQgdGhpcy48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+QXBwbGljYXRpb24gYW5kIE1pZGRsZXdhcmUgU29mdHdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gcmVtYWlucyB0byBiZSB0aGUgb25seSB0aGluZyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYSB0YWcgbmFtZToKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPkhvd1RvQXBwbHk8L0I+IG9uIGxpbmUgNjEuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSwgRGVzaWduIHBhZ2UsIGFuZCBPdXRsaW5lIHZpZXcuIAotICAgICAgICA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKSBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Qj5Ib3dUb0FwcGx5PC9CPiBzaG91bGQgcmVtYWluIHNlbGVjdGVkIGluCi0gICAgICAgIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSB2aWV3LiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgbmFtZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrRW5kPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5kaXN0cmlidXRlPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZTwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrSG9tZTwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlNjcm9sbCBkb3duIHN1Y2ggdGhhdCBsaW5lIDYxIGlzIHZpc2libGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5pbnRlcm5hbDwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmludGVybmFsPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotPC9VTD4KLQotPFA+PEI+Rm9ybWF0dGluZyBhIEZpbGUgQ3JlYXRlZCBieSBEaWZmZXJlbnQgRWRpdG9yczwvQj48QlI+Ci08dWw+Ci08bGk+Ci1JbXBvcnQgdGhlIDxiPkpvYlBvc3RpbmcuZHRkPC9iPiBhbmQgPGI+Sm9iRGVzYy54bWw8L2I+PC9saT4KLQotPGxpPgotT3BlbiB0aGUgSm9iRGVzYy54bWwuIENoZWNrIHRoZSBzb3VyY2UgZm9yIGluZGVudGF0aW9uIHRvIHNlZSBpZiBpdCBwcmVzZXJ2ZXMKLXRoZSB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudC48L2xpPgotCi08bGk+Ci1UaGUgb3JpZ25hbCBkb2N1bWVudCB1c2VzIHNwYWNlcyBhbmQgdGFicywgc28gdGhlIGZvcm1hdHRpbmcgd2lsbCBhcHBlYXIgYSBsaXR0bGUgd3JvbmcuCi1CeSB1c2luZyB0aGUgcmlnaHQvbGVmdCBhcnJvd3MsIHZlcmlmeSB0aGF0IHNvbWUgc3BhY2UgaXMgc3BhY2VzIGFuZCBzb21lIHNwYWNlCi1pcyB0YWIgY2hhcmFjdGVycy48L2xpPgotPExJPlVzZSAnZm9ybWF0IGRvY3VtZW50JyB0byBiZSBzdXJlIGl0IGZvcm1hdHMuIDwvTEk+Ci08TEk+VGhlIGRlZmF1bHQgaXMgdG8gZm9ybWF0IHdpdGggc3BhY2VzIC4uLiB2ZXJpZnkgb25seSBzcGFjZXMgcmVtYWluIGluIGZpbGUsIG5vdCB0YWIgY2hhcmFjdGVzLiAKLShKdXN0IGEgbGl0dGxlIG1vdmVtZW50IHdpdGggdGhlIGFycm93IGtleXMgc2hvdWxkIHN1ZmZpY2UuPC9MST4KLTxMST5HbyB0byB0aGUgcHJlZmVyZW5jZSBwYWdlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IHNldHRpbmdzIGZvciB0aGUgWE1MIEVkaXRvcgotdG8gdXNlIHRoZSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgNCBzcGFjZXMuIFdoaWxlIHRoZXJlLCB2ZXJpZnkgdGhhdCB0aGUgZGlhbG9nCi13aWxsIG5vdCBhbGxvdyBvdGhlciB2YWx1ZXMgdG8gYmUgaW50ZXJlZCBleGNlcHQgIndoaXRlc3BhY2UiIC4uLidcdCdzIGFuZCBibGFua3MuCi08L0xJPgotPExJPkZvcm1hdCB0aGUgZG9jdW1lbnQgYWdhaW4gYW5kIGJlIHN1cmUgdGhpcyB0aW1lIHRhYiBjaGFyYWN0ZXJzIHdlcmUgdXNlZC48L0xJPgotPC91bD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5PdGhlciB0ZXN0IGNhc2VzPC9GT05UPjwvQj48L0gyPgotPFA+PEI+QXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIGEgbmV3IGZpbGUgdHlwZTwvQj48L1A+Ci08VUw+Ci0gIDxMST5XaW5kb3ctJmd0O1ByZWZlcmVuY2VzPEI+PC9CPi48L0xJPgotICA8TEk+RXhwYW5kIDxCPldvcmtiZW5jaDwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5GaWxlIEVkaXRvcnM8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFkZCBhIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNwZWNpZnkgYSBmaWxlIHR5cGUgb2YgPEI+Ki5zZXQ8L0I+IGFuZCB0aGVuIGNsb3NlIHRoZSBBZGQgZGlhbG9nLjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+Ki5zZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMuPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIHRoZSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+WE1MIEVkaXRvcjwvQj4gZnJvbSB0aGUgbGlzdCBvZiBlZGl0b3JzLiBWZXJpZnkgaXQgYXBwZWFycyB3aXRoIGl0cyBvd24gc3BlY2lhbCBpY29uLiBDbG9zZSB0aGUgZGlhbG9nLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tk9URTogd2FpdGluZyB0byBoZWFyIGJhY2sgZnJvbSBPVEkgb24gaG93IGNhbiBwcmV2ZW50IDIgWE1MIEVkaXRvciBlbnRyaWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBsaXN0LjwvRk9OVD48L0xJPgotICA8TEk+VmVyaWZ5IDxCPlhNTCBFZGl0b3I8L0I+IGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgZWRpdG9yIG5vdyBmb3IgdGhlIDxCPiouc2V0PC9CPiBmaWxlIHR5cGUuPC9MST4KLSAgPExJPk9wZW4gPEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+IGZyb20gdGhlIE5hdmlnYXRvciB2aWV3LiBWZXJpZnkgaXQgb3BlbnMgdG8gdGhlIFhNTCBFZGl0b3IuPC9MST4KLTwvVUw+Ci08UD48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+VEhFIEVORCE8L0ZPTlQ+PC9QPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JjZGQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy9EVEQvIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+Ci08TUVUQSBjb250ZW50PSJ0ZXh0L2NzcyIgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIj4KLTx0aXRsZT5zbW9rZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj4gU21va2UgVGVzdCAtIFhNTCBFZGl0b3I8L2gyPgotTGFzdCB1cGRhdGVkOiBKdW5lIDI1LCAyMDAxCi08UD5UaGlzIFNtb2tlIFRlc3QgcHJpbWFyaWx5IGZvY3VzZXMgb24gdGhlIFJUUCBwb3J0aW9uIG9mIHRoZSBYTUwgCi1FZGl0aW9yLCB3aGljaCBpcyB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuIEl0IGFsc28gcGVyZm9ybXMgCi1zb21lIGludGVncmF0aW9uIHRlc3RpbmcuIEZvciBleGFtcGxlLCBpdCB0ZXN0cyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAKLXRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcyBvZiB0aGUgWE1MIEVkaXRvciwgYXMgd2VsbCBhcyB3aXRoIHRoZSAKLU91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3MuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCBmaWxlcyBjcmVhdGVkIAotdGhyb3VnaCB0aGUgWE1MIEZpbGUgd2l6YXJkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBYTUwgQ2F0YWxvZyBhcmUgCi1zdXBwb3J0ZWQgYXMgZXhwZWN0ZWQuPC9QPgotPFA+PEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPk5PVEU8L0I+OiBYTUwgZmlsZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXBwZWFyIAotZXhhY3RseSBhcyBub3RlZC48L0ZPTlQ+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNldHVwPC9GT05UPjwvSDI+Ci08UD48Qj5TdGFydGluZyBDbGVhbjwvQj48L1A+Ci08dWw+Ci0gICAgPGxpPiBEZWxldGUgYW55IGV4aXN0aW5nIHdvcmtiZW5jaDwvbGk+Ci0gICAgPGxpPiBTdGFydCBFY2xpcHNlPC9saT4KLTwvdWw+Ci08UD48Qj5PcGVuIGFuIFhNTCBQZXJzcGVjdGl2ZTxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+T3BlbiBQZXJzcGVjdGl2ZTwvQj4gdG9vbGJhciBidXR0b24gaW4gdGhlIHVwcGVyIGxlZnQ8L0xJPgotICAgIDxMST5TZWxlY3QgPEI+T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPlhNTDwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyB2aWV3cyBhcHBlYXIgaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSBsb2NhdGlvbiBvZiB0aGUgT3V0bGluZSBhbmQgTmF2aWdhdG9yIHZpZXdzIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBSZXNvdXJjZSBhbmQgV2ViIHBlcnNwZWN0aXZlcy4gRG8gd2Ugd2FudCB0byB0cnkgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHBlcnNwZWN0aXZlcz8gQWxzbywgSSBvcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjQgdG8gZW5hYmxlIGVhc3kgYWNjZXNzIHRvIHRoZSBQcm9wZXJ0aWVzIHZpZXcgZnJvbSB3aXRoaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZS4gSWYgdGhpcyB2aWV3IGlzbid0IGluY2x1ZGVkIGluIHRoZSBQZXJzcGVjdGl2ZSBiZWNhdXNlIGl0cyB1c2UgaXMgbGltaXRlZCwgdGhlbiByZWNvbW1lbmQgd2UgYXQgbGVhc3QgcHJvdmlkZSBhIFNob3cgb3IgSGlkZSBQcm9wZXJ0aWVzIFZpZXcgdG9vbGJhciBidXR0b24gKHNpbWlsYXIgdG8gdGhlIGJ1dHRvbnMgdGhhdCBQYWdlIERlc2lnbmVyIHByb3ZpZGVzKS48L0ZPTlQ+PC9MST4KLTwvVUw+Ci08UD48Qj5Qcm9qZWN0IENyZWF0aW9uIGFuZCBGaWxlIEltcG9ydHM8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5DcmVhdGUgYSBQcm9qZWN0LCA8Qj5YTUxUZXN0MjwvQj4gPC9MST4KLSAgICA8TEk+SW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgaW50byB0aGlzIHByb2plY3Q6Ci0gICAgPFVMPgotICAgICAgICA8TEk+PEI+UHVyY2hhc2VPcmRlci54c2Q8L0I+PC9MST4KLSAgICAgICAgPExJPjxCPkludm9pY2UuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxCPkpvYkRlc2MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPldpcmVsZXNzLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj48L0xJPgotICAgIDxMST48Qj5BVFMuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5hbnkgb3RoZXJzPzwvRk9OVD48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBzY3JhdGNoPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMgYW5kIHRoZSBGaW5pc2ggYnV0dG9uIGlzIGRpc2FibGVkLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+REVGRUNUOjwvQj4gMTc3NjYwIC0gWE1MIEZpbGUgd2l6YXJkOiBkaXNhYmxlIEZpbmlzaCBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2U8L0ZPTlQ+LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21TY3JhdGNoPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZzoKLSAgICA8VUw+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgYXBwZWFycyBpbiB0aGUgTmF2aWdhdG9yIHZpZXcuPC9MST4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBpcyBvcGVuIHRvIHRoZSBEZXNpZ24gcGFnZSBvZiB0aGUgWE1MIEVkaXRvciBhbmQgaGFzIGZvY3VzLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIHRhYiBhcHBlYXJzIGJlZm9yZSB0aGUgU291cmNlIHRhYiBpbiB0aGUgWE1MIEVkaXRvci48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2Ugc2hvdyBubyBjb250ZW50LjwvTEk+Ci0gICAgICAgIDxMST50aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cyBzaG93IG5vdGhpbmcuPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlN3aXRjaCB0byB0aGUgU291cmNlIHBhZ2UuIFZlcmlmeSB0aGUgY3Vyc29yIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5SaWdodCBtb3VzZSBidXR0b24gMiBhbmQgdmVyaWZ5IGEgcG9wdXAgbWVudSBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbCBsaXN0IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDs8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5ICZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsgaXMgaW5zZXJ0ZWQgYW5kIGFwcGVhcnMgc3ludGF4IGhpZ2hsaWdodGVkIGFuZCBhbiBlbnRyeSBhcHBlYXJzIGZvciBpdCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBYTUwgZGVjbGFyYXRpb24gYW5kIHZlcmlmeSA8Qj52ZXJzaW9uPC9CPiBhbmQgPEI+ZW5jb2Rpbmc8L0I+IGFwcGVhciBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhpcyB1c2VkIHRvIHdvcmssIGJ1dCBub3cgaXQncyBub3Qgd29ya2luZy4gT3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjYyIC0gWE1MIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgbm90IGFwcGVhcmluZyBpbiBQcm9wZXJ0aWVzIHZpZXcuIElmIHdlIGRlY2lkZSB0byBub3QgdHJlYXQgdmVyc2lvbiBhbmQgZW5jb2RpbmcgYXMgYXR0cmlidXRlcywgdGhlbiB0aGlzIHN0ZXAgc2hvdWxkIGJlIHJlbW92ZWQuPC9GT05UPjwvTEk+Ci0gICAgPExJPkNvbnRpbnVlIHRvIHRoZSBuZXh0IHNlY3Rpb24uPC9MST4KLTwvVUw+Ci08UD48Qj5JZGVudGlmeSBhIGxvY2FsIERURCAoPC9CPnZlcmlmaWVzIGEgRFREIGlzIGltbWVkaWF0ZWx5IHJlY29nbml6ZWQ7IGluIHRoZSBwYXN0LCB5b3UgaGFkIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIFdvcmtiZW5jaDxCPik8L0I+PC9QPgotPFVMPgotICAgIDxMST5UeXBlIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbiBpbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+OiA8Qj4mbHQ7IURPQ1RZUEUgSW52b2ljZSBTWVNURU0gJnF1b3Q7SW52b2ljZS5kdGQmcXVvdDsmZ3Q7PC9CPi4gVGhlIHRleHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZCBhcyB5b3UgdHlwZSBhbmQgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgZ2V0IGFkZGVkIHRvIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBjcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbi48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uVmVyaWZ5IG9ubHkgPEI+SW52b2ljZTwvQj4gYW5kIDxCPmNvbW1lbnQ8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdC4gKDxCPk5PVEU8L0I+OiA8Qj5JbnZvaWNlPC9CPiBpcyB0aGUgcm9vdCBlbGVtZW50KTwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkludm9pY2U8L0I+IGFzIGEgc2VsZWN0aW9uLiBWZXJpZnkgdGhlIEludm9pY2Ugc3RhcnQgYW5kIGVuZCB0YWdzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTb3VyY2UgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZXR3ZWVuIHRoZW0uIEFuIGVsZW1lbnQgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgSW52b2ljZSBpbiB0aGUgT3V0bGluZSB2aWV3LiAoPEI+Tk9URTwvQj46IFhNTCBpcyBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHlvdSBzZWUgSW52b2ljZSBhbmQgbm90IGludm9pY2UgZXZlcnl3aGVyZSkuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXJzIGluIHRoZSBwcm9wb3NhbCBsaXN0IChpbiB0aGUgb3JkZXIgc2hvd24pOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SXRlbSBpcyBhcHBlYXJpbmcgYmVmb3JlIEhlYWRlci4gVGhlIGRlZmF1bHQgaXMgbm90IHRvIHNvcnQgdGhlIGxpc3QgYWxwaGFiZXRpY2FsbHkuIFRoYXQgbWVhbnMgdGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkIHRhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgSW52b2ljZSBpbiB0aGUgRFRELiBJbiBvdGhlciB3b3JkcywgdXNlcnMgc2hvdWxkIHNlZSBjaGlsZCB0YWdzIGxpc3RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VxdWVuY2luZyBvcmRlciBpbiB0aGUgRFRELCB3aGljaCB0aGUgRFREIEVkaXRvciBzaG93cy4gVmlvbGF0aW5nIHRoZSBzZXF1ZW5jaW5nIG9yZGVyIGNhdXNlcyBhbiBYTUwgZmlsZSB0byBiZWNvbWUgbm90IHZhbGlkLiA8Qj5ERUZFQ1Q6PC9CPiAxNzc2Njg8L0ZPTlQ+Ci0gICAgPFVMPgotICAgICAgICA8TEk+SGVhZGVyPC9MST4KLSAgICAgICAgPExJPkl0ZW08L0xJPgotICAgICAgICA8TEk+Y29tbWVudDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5IZWFkZXI8L0I+IGFzIGEgc2VsZWN0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgU291cmNlIG5vdyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZWZvcmUgPEI+aW52b2ljZU51bWJlcjwvQj46PElNRyBib3JkZXI9IjAiIGhlaWdodD0iODMiIHNyYz0iaWRlbnRpZnlEVEQuanBnIiB3aWR0aD0iNDg1Ij48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SGVhZGVyPC9CPiBhcHBlYXJzIG5lc3RlZCB1bmRlciA8Qj5JbnZvaWNlPC9CPiBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gIDxMST5DbG9zZSB0aGlzIGZpbGUsIGFuZCByZXNwb25kIDxCPlllczwvQj4gd2hlbiBwcm9tcHRlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSB0aGUgY2hhbmdlcyB3ZXJlIHNhdmVkLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZS4gVmVyaWZ5IG5vIHNhdmUgY2hhbmdlcyBwcm9tcHQgYXBwZWFycy48L0xJPgotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGFuIGltcG9ydGVkIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+RmlsZS0mZ3Q7TmV3LSZndDtYTUwgRmlsZTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlIGZyb20gYSBEVEQgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbUxvY2FsRFREPC9CPjwvTEk+Ci0gICAgICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+SW1wb3J0IEZpbGU8L0I+IGJ1dHRvbgotICAgIDxVTD4KLSAgICAgICAgPExJPlVzZSB0aGUgQnJvd3NlIGJ1dHRvbiB0byBmaW5kIDxCPnRlc3RjYXNlLmR0ZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgYWxyZWFkeSBmaWxsZWQgaW4uIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPiB0byBjbG9zZSB0aGUgSW1wb3J0IEZpbGUgd2l6YXJkPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkV4cGFuZCA8Qj5YTUx0ZXN0MjwvQj4gYW5kIHRoZW4gc2VsZWN0IDxCPnRlc3RjYXNlLmR0ZDwvQj4uIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5XYXMgZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW1wb3J0ZWQgZmlsZSBzZWxlY3RlZCBpbiB0aGUgV29ya2JlbmNoIGZpbGVzIGxpc3QsIGJ1dCBpdCB3YXNuJ3QuIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPnRlc3RjYXNlPC9CPiBhcyB0aGUgUm9vdCBFbGVtZW50LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgcmVxdWlyZWQgY29udGVudCBvbmx5PC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+dGVzdGNhc2UuZHRkPC9CPiBhcHBlYXJzIGFzIHRoZSBTeXN0ZW0gSWQuPC9MST4KLSAgICA8TEk+U2VsZWN0IEZpbmlzaC4gVmVyaWZ5IDxCPmZyb21Mb2NhbERURC54bWw8L0I+IGFwcGVhcnMgaW4gdGhlIFhNTCBFZGl0b3IuIFZlcmlmeSB0aGUgU291cmNlIHBhZ2UgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTAiIHNyYz0iaW1wb3J0RFRELmpwZyIgd2lkdGg9IjY2MCI+PC9MST4KLSAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjk3IiBzcmM9Im91dGxpbmUxLmpwZyIgd2lkdGg9IjY1NSI+PC9MST4KLSAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+aGVhZGVyPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IHZhbHVlcyBhcHBlYXIgaW4gdGhlIAotICAgICAgICAgICAgUHJvcGVydGllcyB2aWV3OgotICAgICAgICA8VEFCTEUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDxUQk9EWT4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj48Qj5Qcm9wZXJ0eTwvQj48L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij48Qj5WYWx1ZTwvQj48L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+Y2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij53ZWJ0b29sPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPm51bWJlcjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPmlkdmFsdWUwPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN0YXRlPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+QWNjZXNzYWJpbGl0eTwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJTdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgIDwvVEJPRFk+Ci0gICAgICAgIDwvVEFCTEU+Ci0gICAgICAgIDwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+dGVzdEJ1Y2tldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IGEgcHJvcGVydHkgb2YgPEI+dHlwZTwvQj4KLSAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiA8Qj5Db21wb25lbnRUZXN0PC9CPi4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+IAotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgYXR0cmlidXRlcyBhbmQgYXR0cmlidXRlIHZhbHVlcykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIHVzZSBjb250ZW50IGFzc2lzdCB0byBpbnNlcnQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgICAgIGZvciB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgPEI+Y2F0ZWdvcnk8L0I+IGF0dHJpYnV0ZSBpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIDxCPnNwYWNlPC9CPiBhbmQgdGhlbiBoaXQgcHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSBvbmx5IDxCPnN0YXRlPC9CPiBhbmQgPEI+c3ViU3ViQ2F0ZWdvcnk8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoY29udGVudCBhc3Npc3QgaXMgc21hcnQgZW5vdWdoIG5vdCB0byBsaXN0IGFueSBhdHRyaWJ1dGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgc3RhcnQgdGFnIHNpbmNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYXBwZWFyIG9uY2UuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPnN0YXRlPC9CPi48L0xJPiAgIAotICAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5zdGF0ZT0iVW5kZXJDb25zdHJ1Y3Rpb24iPC9CPiBpcyBpbnNlcnRlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGNvbnRlbnQgYXNzaXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhbnkgZGVmYXVsdCB2YWx1ZXMuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLiBWZXJpZnkgdGhlIERlc2lnbiBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIFByb3BlcnRpZXMgdmlldywgdXBkYXRlIHRoZSA8Qj5zdGF0ZTwvQj4gYXR0cmlidXRlIHZhbHVlIHRvICJVbmRlclJldmlldyIgCi0gICAgICAgICAgICAoYSBwdWxsZG93biBsaXN0IG9mIHZhbHVlcyBzaG91bGQgYmUgYXZhaWxhYmxlKS4gVmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkCi0gICAgICAgICAgICBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMuCi0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBBdHRyaWJ1dGUtPnN1YlN1YkNhdGVnb3J5PC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51IChpdCdzIHNtYXJ0Ci0gICAgICAgICAgICAgICAgZW5vdWdoIHRvIGtub3cgd2hpY2ggYXR0cmlidXRlcyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkIHlldCAuLi4gbGlrZSBjb250ZW50IAotICAgICAgICAgICAgICAgIGFzc2lzdC4gQ29vbCEpLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSBpbiBhIHZhbHVlIG9mIDxCPktleWJvYXJkIHN1cHBvcnQ8L0I+LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3PC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgdGhhdCByZWZlcmVuY2VzIGEgcmVtb3RlIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPk9wZW4gdGhlIDxCPldpcmVsZXNzLnhtbDwvQj4gZmlsZS48L0xJPgotICAgIDxMST5WZXJpZnkgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGluIHRoZSBTb3VyY2UgcGFnZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyMzkiIHNyYz0id2lyZWxlc3MuanBnIiB3aWR0aD0iNjU2Ij48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIAotICAgICAgICBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMTg5IiBzcmM9Im91dGxpbmUyLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4gCi0gICAgPExJPlZlcmlmeSBjb250ZW50IGFzc2lzdCA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+RGVmZWN0IDE3NjM3OSAoaW4gdmVyaWZ5IHN0YXRlLCBidXQgc3RpbGwgbm90IHdvcmtpbmcpPC9GT05UPi48L0xJPgotICAgICAgICA8VUw+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgb24gdGhlIG5ldyBsaW5lLjwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChpbiB0aGUgb3JkZXIgc2hvd24pOiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+aGVhZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRlbXBsYXRlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2FyZDwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5UeXBlIGEgc3BhY2UgYmVmb3JlIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9uIHRoZSBjYXJkIHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChub3QgbmVjZXNzYXJpbHkgaW4gdGhlCi0gICAgICAgICAgICAgICBvcmRlciBzaG93bikuIAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST50aXRsZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5ld2NvbnRleHQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vcmRlcmVkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+eG1sOmxhbmc8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbmVudGVyYmFja3dhcmQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbnRpbWVyPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHZhbHVlIGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5wb3N0PC9CPiBhbmQgPEI+Z2V0PC9CPiBhcHBlYXIgYXMgcHJvcG9zYWxzLjwvTEk+Ci0gICAgICAgIDwvVUw+Ci0gICAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmNhcmQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbHMgbGlzdGVkIGFib3ZlIGZvciB0aGUKLSAgICAgICAgICAgIDxCPmNhcmQ8L0I+IHRhZyBhcHBlYXIgYXMgcHJvcGVydGllcyBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiBObyB2YWx1ZXMgc2hvdWxkIGFwcGVhciBmb3IgdGhlc2UgcHJvcGVydGllcy48L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+cG9zdGZpZWxkPC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+cG9zdGZpZWxkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsCi0gICAgICAgICAgICBub25lIG9mIHdoaWNoIHNob3VsZCBoYXZlIGEgdmFsdWU6Ci0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5hbWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST52YWx1ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGVsZW1lbnRzL3RhZ3MpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjb3B5IGFuZCBwYXN0ZSB0aGUgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPk5vdGljZSB0aGUgcmFuZ2Ugb2YgdGhlIDxCPmNhcmQ8L0I+IHRhZyBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIGFyZWEuPC9MST4KLSAgICAgICAgICAgIDxMST5Db3B5IHRoaXMgcmFuZ2Ugb2YgbGluZXMgdXNpbmcgdGhlIDxCPkVkaXQtPkNvcHk8L0I+IHB1bGxkb3duIG1lbnUgc2VsZWN0aW9uLjwvTEk+Ci0gICAgICAgICAgICA8TEk+UGFzdGUgYWZ0ZXIgdGhlIDxCPmNhcmQ8L0I+IGVuZCB0YWcgdXNpbmcgQ3RybCtWLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyB3ZXJlIHBhc3RlZCBuIHRoZSBTb3VyY2UgcGFnZS4KLSAgICAgICAgICAgICAgICBWZXJpZnkgdGhlIERlc2lnbiBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcyAKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFub3RoZXIgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+d21sPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIENoaWxkLT5jYXJkPC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuIE5PVEU6IGl0IHNob3VsZCBoYXZlIGdlbmVyYXRlZCBvdXQKLSAgICAgICAgICAgICAgICB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3JpZ2luYWwgY2FyZCB0YWcsIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRoYXQgYSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSBzaG91bGQgbm90IGV4aXN0IGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLiA8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+IAotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbmQgVmFsaWRhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIHNjaGVtYTwvQj48QlI+Ci0KLTxQPih0aGVzZSBzdGVwcyBhcmUgdGFrZW4gZnJvbSB0aGUgJ0Rlc2lnbicgc21va2UgdGVzdCwgZXhjZXB0IHRoZSBTb3VyY2UgUGFnZSBpcyB0aGUgZm9jdXMpPC9QPgotPHVsPgotPGxpPgotUmlnaHQgbW91c2UgYnV0dG9uIDIgb24gdGhlIFB1cmNoYXNlT3JkZXIueHNkIGFuZCBzZWxlY3QgPGI+Q3JlYXRlIFhNTAotRmlsZTwvYj4uPC9saT4KLQotPGxpPgotQWNjZXB0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZXMuPC9saT4KLQotPGxpPgotSW4gdGhlIFNlbGVjdCBSb290IEVsZW1lbnQgcGFnZSwgY2hvb3NlIDxiPnB1cmNoYXNlT3JkZXI8L2I+IGFzIHJvb3QgZWxlbWVudC48L2xpPgotCi08bGk+Ci1DaG9vc2UgPGI+Q3JlYXRlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjb250ZW50PC9iPiB0byBjcmVhdGUgYSBtaW5pbWFsCi1kb2N1bWVudC48L2xpPgotCi08bGk+Ci1FbnRlciA8Yj5wbzwvYj4gYXMgdGhlIG5hbWVzcGFjZSBwcmVmaXguPC9saT4KLQotPGxpPk9uIEZpbmlzaCwgYSBQdXJjaGFzZU9yZGVyLnhtbCBpcyBjcmVhdGVkIGFuZCB0aGUgWE1MIEVkaXRvciBpcyBvcGVuZWQuIChTZWxlY3QgU291cmNlIFBhZ2UgaWYgbm90IGFscmVhZHkgdGhlcmUuKTwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIHNob3VsZCBiZSBpbnZhbGlkLjwvbGk+Ci0KLTxsaT4KLURvdWJsZSBjbGljayBvbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgdG8gdGhlIGxpbmUKLWluIGVycm9yLCBpLmUuIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUuIEl0IGlzIGludmFsaWQgYmVjYXVzZSB0aGUKLXZhbHVlIGlzIG5vdCBzZXQgdG8gbWF0Y2ggdGhlIFhNTCBzY2hlbWEgcGF0dGVybiBmYWNldCAiZDMtW0EtWl17Mn0iICgzCi1kaWdpdHMgZm9sbG93ZWQgYnkgMiBjaGFyYWN0ZXJzKS48L2xpPgotCi08bGk+SW4gdGhlIFNvdXJjZSBWaWV3LCBsb2NhdGUgdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZSB1bmRlciBlbGVtZW50IGl0ZW0uCi1FbnRlciB0aGUgdmFsdWUgMzMzLUFCLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvVUw+Ci08VUw+Ci0gIDxMST4KLSAgPEhSPjwvTEk+Ci0gIDxsaT5QbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSAmbHQ7aXRlbXMmZ3Q7IHRhZyBhbmQgYmVzdXJlICJpdGVtIiBpcyAKLSAgbGlzdGVkIGluIHRoZSBjb250ZW50IGFzc2lzdCBsaXN0LiA8L2xpPgotPGxpPlJlbmFtZSB0aGUgcHVyY2hhc2VPcmRlci54c2QgdG8sIHNheSwgcHVyY2hhc2VPcmRlckhPTEQueHNkPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBjb250ZW50IGFzc2lzdCBzdGlsbCBnaXZlcyB5b3UgIml0ZW0iIGFzIGFib3ZlLjwvbGk+Ci08bGk+Tm93IHNlbGVjdCB0aGUgIlJlbG9hZCBEZXBlbmRhbmNpZXMiIGJ1dHRvbi48L2xpPgotPGxpPlZlcmlmeSB0aGF0IG5vdyBjb250ZW50IGFzc2lzdCBubyBsb25nZXIgbGlzdHMgYW55IGl0ZW1zIG90aGVyIAotdGhhdCB0aGUgbWFjcm8gImNvbW1lbnQiLjwvbGk+Ci08bGk+UmVwZWF0IG1ha2luZyBwdXJjaGFzZU9yZGVyLnhzZCB3b3JrYWJsZSBhZ2Fpbi48L2xpPgotPC91bD4KLTxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PC9QPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSBmb3IgYSBzaGlwcGVkIERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj4KLTxCUj4KLVtwdXQgaW4gb3B0aW9uYWwgc2VjdGlvbiAuLiB0aGlzIGlzbid0IGEgY3VzdG9tZXIgc2NlbmVyaW9dPEJSPgotVG8gdmVyaWZ5IHRoYXQgc2hpcHBlZCBEVERzIGFyZSB3b3JraW5nOjxCUj4KLTxVTD4KLTxMST4KLVVzZSBhIHdlYiBwcm9qZWN0IHdpdGggYSBzdGFuZGFyZCB3ZWIueG1sIGZpbGUgaW4gaXQuIEJlIHN1cmUgCi10aGVyZSBpcyBubyB3ZWItYXBwXzJfMi5kdGQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0aGUgd2ViLnhtbCBmaWxlIAotaXRzZWxmLCBtYW5nbGUgdGhlIHdlYi1hcHBfMl8yLmR0ZCBmaWxlbmFtZSBpbiB0aGUgc3lzdGVtIGlkIGEgbGl0dGxlLCBzdWNoIGFzIAotY2hhbmdlIGl0IHRvIHhlYi1hcHBfMl8yLmR0ZCB0byBiZSBzdXJlIGl0IGNhbid0IGJlIGZvdW5kIHZpYSB0aGUKLW5vcm1hbCBodHRwIG1ldGhvZCAoVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZnVudGlvbiB0byB3b3JrLAotaXRzIGp1c3QgdG8gYmUgc3VyZSBvbmx5IHRoZSBjYXRhbG9nIGZ1bmN0aW9uIGlzIGluIGVmZmVjdCkuCi08L0xJPgotPExJPgotR28gdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2UsIGFuZCBvcGVuIHRoZSBYTUwgQ2F0YWxvZy4gVmVyaWZ5IHRoZXJlIAotaXMgYW4gZW50cnkgZm9yIC0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTi4KLTwvTEk+Ci08TEk+Ci1PbmNlIGFsbCB0aGUgcHJlcCB3b3JrIGlzIGRvbmUgKGZpbGVzIGRlbGV0ZWQsIHRleHQgbW9kaWZpZWQpLCB5b3Ugc2hvdWxkIAotZXhpdCBhbmQgcmVzdGFydCBFY2xpcHNlIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBmcmVzaCBzdGFydC4KLTwvTEk+Ci08TEk+Ci1PcGVuIHRoZSB3ZWIueG1sIGZpbGUgYW5kIGJlIHN1cmUgdGhhdCBjb250ZW50IGFzc2lzdCB3b3JrcyBmb3IgdGhhdCBmaWxlLgotRm9yIGV4YW1wbGUsIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlICZsdDsvZGlzcGxheS1uYW1lJmd0OyB0YWcsIGN0cmwtc3BhY2UgCi1zaG91bGQgcHJvdmlkZSBhIGxvbmcgbGlzdCBvZiBlbGVtZW50cywgc3RhcnRpbmcgd2l0aCBzZXJ2bGV0LCBzZXJ2bGV0LW1hcHBpbmcsIGV0Yy4KLVRoaXMgaW5kaWNhdGVzIHRoZSBzaGlwcGVkIERURCBmdW5jdGlvbiBpcyB3b3JraW5nIGFuZCBjb25maWd1cmVkIAotY29ycmVjdGx5IChhdCBsZWFzdCBmb3IgdGhlIHdlYi54bWwgZmlsZSkuCi08L0xJPgotPC9VTD4KLTwvUD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgbmV3IERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj48SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTxiPlRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgJ0Rlc2lnbicgU21va2UgVGVzdDogWE1MIENhdGFsb2cgZm9yIFhNTCBTY2hlbWE8L2I+Ci08dWw+Ci08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkPC9saT4KLQotPGxpPgotQ3JlYXRlIGEgbmV3IHByb2plY3QsIFhNTFRlc3QyPC9saT4KLQotPGxpPgotTW92ZSB0aGUgUHVyY2hhc2VPcmRlci54c2QgaW50byBYTUxUZXN0Mi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwuIFlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIG5vIGxvbmdlcgotdmFsaWQuIFRoZSBlcnJvciBtZXNzYWdlIHNob3VsZCBnaXZlIHlvdSBhIGhpbnQgdGhhdCB0aGUgZmlsZSBQdXJjaGFzZU9yZGVyLnhzZAotY2FuIG5vIGxvbmdlciBiZSBmb3VuZC48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBXaW5kb3ctPlByZWZlcmVuY2VzIGFuZCBzZWxlY3QgdGhlIFhNTCBDYXRhbG9nLjwvbGk+Ci0KLTxsaT4KLUVudGVyIHRoZSBwYWlyIDxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gZjpcZWNsaXBzZVxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj48L2xpPgotCi08YnI+T3IgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQotb2YgdGhlIHdvcmtiZW5jaCBhcyBmb2xsb3dzOgotPGJyPjxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gLlxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj4KLTxsaT4KLUNsaWNrIG9uIHRoZSBSZWxvYWQgYnV0dG9uIHRvIHJlbG9hZCB0aGUgY2F0YWxvZyBzZXR0aW5ncy48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgIFNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlPC9CPjxCUj4KLShOT1RFOiB0aGUgPEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQ8L0I+IHRlc3QgY2FzZSB0ZXN0cyB0aGUgc2F2ZSBwcm9tcHQgb24gYSBmaWxlIGNsb3NlLik8L1A+Ci08VUw+Ci0gIDxMST5JZiBhbnkgZmlsZXMgYXJlIG9wZW4sIHNlbGVjdCA8Qj5GaWxlLSZndDtDbG9zZSBBbGw8L0I+IChvciA8Qj5DdHJsK1NoaWZ0K0Y0PC9CPikgdG8gY2xvc2UgdGhlbS48L0xJPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAobm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQXM8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZSBBczwvQj4gdG9vbGJhciBidXR0b24gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBkaXNhYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoZSBEZXNpZ24gcG9wdXAgbWVudSBhbHNvIGhhZCBhIFNhdmUgc2VsZWN0aW9uLiBPcGVuIGEgc3VnZ2VzdGlvbiBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPm5vIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAoY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZW5hYmxlZDwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBlbmFibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICAgIDxMST5hIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkhpdCA8Qj5DdHJsK1M8L0I+LiA8L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkZpbGUtJmd0O1NhdmUgQWxsPEI+PC9CPi48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgUHJvcGVydGllcyB2aWV3LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+U2F2ZTwvQj4gZnJvbSB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkNsb3NlIGFuZCB0aGVuIHJlb3BlbiB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBwcmV2aW91cyBzdGVwcyBhcHBlYXIgaW4gdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzLjwvTEk+Ci08L1VMPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlIGFjcm9zcyBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgKG9wdGlvbmFsKTwvQj48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgdG8gdGhlIGZpbGUuPC9MST4KLSAgPExJPk9wZW4gYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnk6Ci0gIDxVTD4KLSAgICA8TEk+PEI+c2VsZWN0aW5nIFBlcnNwZWN0aXZlLSZndDtPcGVuLSZndDtPdGhlci4uLjwvQj48L0xJPgotICAgIDxMST53aGlsZSBob2xkaW5nIGRvd24gdGhlIDxCPlNoaWZ0PC9CPiBrZXksIHNlbGVjdCA8Qj5YTUw8L0I+LjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlZlcmlmeSBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBidXR0b24gYXBwZWFycyBpbiB0aGUgbGVmdGhhbmQgc2lkZSBvZiB0aGUgV29ya2JlbmNoIHRvIHJlcHJlc2VudCB0aGlzIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+T3BlbiB0aGUgc2FtZSB4bWwgZmlsZSBhcyBpbiB0aGUgZmlyc3Qgc3RlcCBhYm92ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseSBpbiBib3RoIFhNTCBQZXJzcGVjdGl2ZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgKiBuZXZlciBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYiBvZiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGV2ZW4gd2hlbiBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gVGFsayB0byBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPk1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24gYXBwbGllcyBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLTwvVUw+Ci08UD48Qj5WYWxpZGF0aW5nIGEgbm9uIHdlbGwgZm9ybWVkIFhNTCBGaWxlIChubyBEVEQvU2NoZW1hKTwvQj48QlI+Ci0oTk9URTogaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGJlIHR5cGVkIGluLiBUaGlzIHRlc3QgY2FzZSB0cmllcyB0byBjb3ZlciBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBlcnJvcnMgdGhhdCByZW5kZXIgYW4gWE1MIGZpbGUgYXMgbm90IGJlaW5nIHdlbGwtZm9ybWVkLiBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHBvc3NpYmxlIGVycm9ycyBhcmUgYmVpbmcgZGV0ZWN0ZWQgYW5kIGdyYWNlZnVsbHkgaGFuZGxlZC4gKTwvUD4KLTxVTD4KLSAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPjxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+Tm9uV2VsbEZvcm1lZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0Oy48L0I+PC9MST4KLSAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24uPC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCBjb21tZW50LjwvTEk+Ci0gIDxMST5FbWJlZCBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgaW4gdGhlIGNvbW1lbnQuIAotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBjYW4gbm90IGJlIGVtYmVkZGVkIHdpdGhpbiBhIGNvbW1lbnQpPC9GT05UPjwvTEk+Ci0gIDxMST5UeXBlIGluIHRoZSByZW1haW5pbmcgbGluZXMgYXMgc2hvd24gYmVsb3c6IAotICAgICAgICA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+KEkgY2FuJ3Qgc2hvdyB0aGUgbGluZXMgdW50aWwgZGVmZWN0IDE3Nzc1NSBpcyBmaXhlZCAuLi4gdW50aWwgdGhlbiwgaGVyZSdzIHRoZSB0eXBlIG9mIHRoaW5ncyB0aGF0IGNhdXNlIAotICAgICAgICBhIGRvY3VtZW50IHRvIG5vdCBiZSB3ZWxsLWZvcm1lZCk6PC9GT05UPgotICA8VUw+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHRoYXQgZG9uJ3QgbWF0Y2ggaW4gdGhlaXIgY2FzZSBzZW5zaXRpdml0eSAKLSAgICAgICAgKGUuZy4sICZsdDt0YWcmZ3Q7IGFuZCAmbHQ7L1RhZyZndDspLiA8L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB3aGVyZSB0aGUgc3RhcnQgdGFnIGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGlzIG5vdCAKLSAgICAgICAgZW5jbG9zZWQgaW4gcXVvdGVzLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwsIGJ1dCBub3QgWE1MKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgdGFncyB0aGF0IGFyZSBub3QgcHJvcGVybHkgbmVzdGVkLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGEgY2hpbGQgdGFnIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBpdHMgcGFyZW50IHRhZyk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgdGFnIHdpdGhvdXQgYSBjb3JyZXNvbmRpbmcgZW5kIHRhZy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhbGwgc3RhcnQgdGFncyBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcgdW5sZXNzIHRoZSAKLSAgICAgICAgdGFnIGlzIGFuIGVtcHR5IHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgc2hvcnRoYW5kIHZlcnNpb24gY2FuIGJlIHVzZWQgKCZsdDtzaG9ydFRhZy8mZ3Q7KSkuPC9GT05UPjwvTEk+Ci0gICAgPExJPmRvIG5vdCBwcm92aWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSAoPSZxdW90O3ZhbHVlJnF1b3Q7KS4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MIGZvciB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSAKLSAgICAgICAgb25seSBvbmUgdmFsdWUsIGJ1dCBpdCdzIG5vdCB2YWxpZCBpbiBYTUwpPC9GT05UPjwvTEk+Ci0gICAgIDxMST5kZWZpbmUgYW4gYXR0cmlidXRlIG1vcmUgdGhhbiBvbmNlIGluIGEgc3RhcnQgdGFnLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotICAgICAgICAgbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLSAgICAgICAgIGFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLQotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBEVEQ8L0I+PC9QPgotPFVMPgotPExJPk9wZW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPi48L0xJPgotPExJPkRlbGV0ZSBhIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGUgc3RhcnQgdGFncyAobWlzdHlwaW5nIGEgdGFnIGlzIG5vdCB1bmNvbW1vbikuPC9MST4KLTxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IHdpdGhpbiB0aGUgYmFkIHRhZy4gVmVyaWZ5IGEgbWVzc2FnZSBhcHBlYXJzIGluIHRoZSBzdGF0dXMgYXJlYQotb2YgdGhlIFdvcmtiZW5jaCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJhZCB0YWcgaXMgYW4gdW5rbm93biB0YWcuPC9MST4KLTxMST5TZWxlY3QgdGhlIDxCPlZhbGlkYXRlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGFuZCBhbiBlcnJvciBtYXJrZXIgYXBwZWFycyBpbiB0aGUgU291cmNlIHBhZ2UKLXRvIGZsYWcgdGhlIGludmFsaWQgdGFnLjwvTEk+Ci08TEk+U2VsZWN0IDxCPkVkaXQtPlVuZG88L0I+IGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+VmVyaWZ5IHRoZSBiYWQgdGFnIGVycm9yIG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3LjwvTEk+Ci08TEk+UmVtb3ZlIHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgaW5kaWNhdGluZyB0aGF0IHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgaXMgbWlzc2luZzwvTEk+Ci08TEk+Q2xvc2UgdGhlIGZpbGUsIHJlc3BvbmRpbmcgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotPExJPkRvdWJsZS1jbGljayBvbiB0aGUgZXJyb3IgaW4gdGhlIFRhc2tzIHZpZXcsIGFuZCB2ZXJpZnkgPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPiBvcGVucyB0byB0aGUKLWFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08TEk+SGVyZSdzIHNvbWUgb3RoZXIgdmlvbGF0aW9ucyB0aGF0IGNhbiBiZSBhdHRlbXB0ZWQ6Ci08VUw+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUuPC9MST4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZSB2YWx1ZS48L0xJPgotPExJPlNwZWNpZnkgY2hpbGQgdGFncyBvdXQgb2Ygc2VxdWVuY2luZyBvcmRlcjwvTEk+Ci08TEk+VmlvbGF0ZSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgZm9yIGEgdGFnIChlLmcuLCBpZiB0aGUgRFREIHNob3dzID8sIHRoZW4gb25seQotMCBvciAxIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgaXMgcGVybWl0dGVkKS4KLTwvVUw+PC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi1saW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci08TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLTwhLS0gIHJlbW92ZWQgc2luY2UgZG9uZSBlbHNld2hlcmUgYXMgcGFydCBvZiBvdGhlciBzY2VuZXJpb3MKLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgU2NoZW1hPC9CPjxCUj4KLS0tPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzIChvcHRpb25hbCk8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Vc2luZyB0aGUgQXV0byBDb21wbGV0aW9uIENvbnRlbnQgQXNzaXN0IFByZWZlcmVuY2U8L0I+PEJSPgotPFVMPgotPExJPk9wZW4gYSBhbnkgWE1MIGZpbGUgdGhhdCBoYXMgZW5vdWdoIHRhZ3MgdG8gcHJvdmlkZSBzeW50YXggaGlnaHRsaWdodGluZy48L0xJPgotPExJPldoaWxlIHRoYXQgZmlsZSBpcyBsZWZ0IG9wZW4sIGdvIHRvIHRoZSBQcmVmZXJlbmNlcyBwYWdlLCBzZWxlY3QKLVhNTCBFZGl0b3IsIHRoZW4gU291cmNlIFN0eWxlcy4gPC9MST4KLTxMST5PbiB0aGF0IHBhZ2UsIHVzZSB0aGUgbW91c2UgdG8gInNlbGVjdCIgYSB0YWcgbmFtZS4gVGhlIHRhZyBuYW1lIGlzIG5vdCBsaXRlcmFsbHkKLXNlbGVjdGVkLCBidXQgd2hlbiB5b3UgY2xpY2sgb24gYW4gZWxlbWVudCBpbiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGUgbGlzdAotYWJvdmUgaXQgd2lsbCBkaXNwbGF5IHRoZSB0eXBlIG9mIGVsZW1lbnQgaXQgaXMsIGFuZCB3aGF0IGl0cyBjdXJyZW50IGNvbG9ycyBhcmUuPC9MST4KLTxMST5Gb3IgInRhZyBuYW1lIiwgc2VsZWN0IHRoZSBib2xkIGNoZWNrIGJveC4gVGhlbiBwcmVzcyBBcHBseSwgYW5kIHlvdSBzaG91bGQKLXNlZSB0aGUgY2hhbmdlIHRha2UgZWZmZWN0IGluIHlvdXIgYWN0aXZlIGVkaXRvci48L0xJPgotPExJPlNlbGVjdCAiRGVmYXVsdHMiIGFuZCBtYWtlIHN1cmUgdGhlIHRhZyBuYW1lcyBhcmUgc2V0IGJhY2sgdG8gbm90IGJvbGQuPC9MST4KLTwvVUw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08UD48Qj5Eb3VibGUtQ2xpY2tpbmcgV2l0aGluIHRoZSBTb3VyY2U8L0I+IDxCUj4KLShOT1RFOiBpZiB5b3UgY29udGludWUgdG8gZG91YmxlLWNsaWNrIGF0IGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGFyZWEgd2lsbCBjb250aW51ZSB0byBleHBhbmQuIFdoZW4gdGhlIG1heGltdW0gcmVnaW9uIGFyZWEgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIG5leHQgZG91YmxlLWNsaWNrIHdpbGwgY2F1c2UgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi4gU28sIHRoZSBzZWxlY3Rpb25zIHdpbGwgd3JhcC9jeWNsZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9QPgotPFVMPgotICA8TEk+T3BlbiA8Qj5Kb2JEZXNjLnhtbDwvQj4uPC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gdGFnIGNvbnRlbnQ6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5NaWRkbGV3YXJlPC9CPiBvbiBsaW5lIDcuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPk1pZGRsZXdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5vdCBzdXJlIHdoYXQgdGhlIFByb3BlcnRpZXMgdmlldyBpcyBzdXBwb3NlZCB0byBzaG93LiBJdCBnb2VzIGJsYW5rLiBTZWUgZGVmZWN0IDE3Nzc1My4gQWxzbywgPEI+TWlkZGxld2FyZTwvQj4gd2Fzbid0IHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhcyBoYWQgZXhwZWN0ZWQuIFRoZSBEZXNpZ24gcGFnZSBvbmx5IHNlZW1zIHRvIHN0YXkgaW4gc3luYyBhdCB0aGUgZWxlbWVudC90YWcgbGV2ZWwgbGlrZSB0aGUgT3V0bGluZSB2aWV3LiBUYWxrIHRvIENyYWlnIGFib3V0IHRoaXMuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkFwcGxpY2F0aW9uIGFuZCBNaWRkbGV3YXJlIFNvZnR3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IHJlbWFpbnMgdG8gYmUgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGEgdGFnIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5Ib3dUb0FwcGx5PC9CPiBvbiBsaW5lIDYxLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UsIERlc2lnbiBwYWdlLCBhbmQgT3V0bGluZSB2aWV3LiAKLSAgICAgICAgPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiB0aGUgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykgaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZS4gPEI+SG93VG9BcHBseTwvQj4gc2hvdWxkIHJlbWFpbiBzZWxlY3RlZCBpbgotICAgICAgICB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgdmlldy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0VuZDwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+ZGlzdHJpYnV0ZTwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0hvbWU8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5TY3JvbGwgZG93biBzdWNoIHRoYXQgbGluZSA2MSBpcyB2aXNpYmxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+aW50ZXJuYWw8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5pbnRlcm5hbDwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPiJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLTwvVUw+Ci0KLTxQPjxCPkZvcm1hdHRpbmcgYSBGaWxlIENyZWF0ZWQgYnkgRGlmZmVyZW50IEVkaXRvcnM8L0I+PEJSPgotPHVsPgotPGxpPgotSW1wb3J0IHRoZSA8Yj5Kb2JQb3N0aW5nLmR0ZDwvYj4gYW5kIDxiPkpvYkRlc2MueG1sPC9iPjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIEpvYkRlc2MueG1sLiBDaGVjayB0aGUgc291cmNlIGZvciBpbmRlbnRhdGlvbiB0byBzZWUgaWYgaXQgcHJlc2VydmVzCi10aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuPC9saT4KLQotPGxpPgotVGhlIG9yaWduYWwgZG9jdW1lbnQgdXNlcyBzcGFjZXMgYW5kIHRhYnMsIHNvIHRoZSBmb3JtYXR0aW5nIHdpbGwgYXBwZWFyIGEgbGl0dGxlIHdyb25nLgotQnkgdXNpbmcgdGhlIHJpZ2h0L2xlZnQgYXJyb3dzLCB2ZXJpZnkgdGhhdCBzb21lIHNwYWNlIGlzIHNwYWNlcyBhbmQgc29tZSBzcGFjZQotaXMgdGFiIGNoYXJhY3RlcnMuPC9saT4KLTxMST5Vc2UgJ2Zvcm1hdCBkb2N1bWVudCcgdG8gYmUgc3VyZSBpdCBmb3JtYXRzLiA8L0xJPgotPExJPlRoZSBkZWZhdWx0IGlzIHRvIGZvcm1hdCB3aXRoIHNwYWNlcyAuLi4gdmVyaWZ5IG9ubHkgc3BhY2VzIHJlbWFpbiBpbiBmaWxlLCBub3QgdGFiIGNoYXJhY3Rlcy4gCi0oSnVzdCBhIGxpdHRsZSBtb3ZlbWVudCB3aXRoIHRoZSBhcnJvdyBrZXlzIHNob3VsZCBzdWZmaWNlLjwvTEk+Ci08TEk+R28gdG8gdGhlIHByZWZlcmVuY2UgcGFnZSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBzZXR0aW5ncyBmb3IgdGhlIFhNTCBFZGl0b3IKLXRvIHVzZSB0aGUgdGFiIGNoYXJhY3RlciBpbnN0ZWFkIG9mIDQgc3BhY2VzLiBXaGlsZSB0aGVyZSwgdmVyaWZ5IHRoYXQgdGhlIGRpYWxvZwotd2lsbCBub3QgYWxsb3cgb3RoZXIgdmFsdWVzIHRvIGJlIGludGVyZWQgZXhjZXB0ICJ3aGl0ZXNwYWNlIiAuLi4nXHQncyBhbmQgYmxhbmtzLgotPC9MST4KLTxMST5Gb3JtYXQgdGhlIGRvY3VtZW50IGFnYWluIGFuZCBiZSBzdXJlIHRoaXMgdGltZSB0YWIgY2hhcmFjdGVycyB3ZXJlIHVzZWQuPC9MST4KLTwvdWw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+T3RoZXIgdGVzdCBjYXNlczwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPkFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byBhIG5ldyBmaWxlIHR5cGU8L0I+PC9QPgotPFVMPgotICA8TEk+V2luZG93LSZndDtQcmVmZXJlbmNlczxCPjwvQj4uPC9MST4KLSAgPExJPkV4cGFuZCA8Qj5Xb3JrYmVuY2g8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+RmlsZSBFZGl0b3JzPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhZGQgYSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TcGVjaWZ5IGEgZmlsZSB0eXBlIG9mIDxCPiouc2V0PC9CPiBhbmQgdGhlbiBjbG9zZSB0aGUgQWRkIGRpYWxvZy48L0xJPgotICA8TEk+VmVyaWZ5IDxCPiouc2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgbGlzdCBvZiBmaWxlIHR5cGVzLjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byB0aGUgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlhNTCBFZGl0b3I8L0I+IGZyb20gdGhlIGxpc3Qgb2YgZWRpdG9ycy4gVmVyaWZ5IGl0IGFwcGVhcnMgd2l0aCBpdHMgb3duIHNwZWNpYWwgaWNvbi4gQ2xvc2UgdGhlIGRpYWxvZy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5PVEU6IHdhaXRpbmcgdG8gaGVhciBiYWNrIGZyb20gT1RJIG9uIGhvdyBjYW4gcHJldmVudCAyIFhNTCBFZGl0b3IgZW50cmllcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgbGlzdC48L0ZPTlQ+PC9MST4KLSAgPExJPlZlcmlmeSA8Qj5YTUwgRWRpdG9yPC9CPiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBub3cgZm9yIHRoZSA8Qj4qLnNldDwvQj4gZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5PcGVuIDxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPiBmcm9tIHRoZSBOYXZpZ2F0b3Igdmlldy4gVmVyaWZ5IGl0IG9wZW5zIHRvIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08L1VMPgotPFA+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NzIxMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MGU0ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMzBjOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0Y2RlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD10ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzVVRGMTZsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2JkNTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzVVRGMTZsZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOTE1ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2YmUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2YmUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFmZTY5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmJlLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZWZiNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZsZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhODM3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWh0bWx1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLWphdmFDb21waWxlci5odG1sdWl0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmNDAxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRjNzljNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGh0bWx1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuSFRNTFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIGNvbS5pYm0uaWN1LAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLnVpLmlkZQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzhjODFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGh0bWx1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8KLWphcnMuY29tcGlsZS5vcmRlciA9IGh0bWx1aXRlc3RzLmphcgotc291cmNlLmh0bWx1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4MjU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBTdHJ1Y3R1cmVkIFNvdXJjZSBFZGl0b3IgZm9yIEhUTUwgVGVzdHMKLXZpZXcubmFtZS4wID0gRW1iZWRkZWQgSFRNTCBTdHJ1Y3R1cmVkIFRleHQgVmlld2VyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOWRjYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4wIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RIVE1MIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SFRNTCI+Ci0JCTwvdmlldz4KLQk8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWQwOWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLmludGVybmFsLkhUTUxVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5IVE1MVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBIVE1MIFNvdXJjZQotICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBIVE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSwgIjw9Iik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IHN0b3JlLmdldERlZmF1bHRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBIVE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYyNTdhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuY29udGVudGFzc2lzdC5UZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuY29udGVudGFzc2lzdC5UZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmFsaWRhdGlvbi5UZXN0SFRNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotCi0KLQotcHVibGljIGNsYXNzIEhUTUxVSVRlc3RTdWl0ZSBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBIVE1MVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgSFRNTFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSFRNTCBVSSBUZXN0U3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeUVkaXRvclBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5jbGFzcykpOwotCQlhZGRUZXN0KFRlc3RIVE1MVmFsaWRhdG9yLnN1aXRlKCkpOwotCQkvLwkJYWRkVGVzdChuZXcgU1NFTW9kZWxUZXN0U3VpdGUoKSk7Ci0JCWFkZFRlc3QoVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLnN1aXRlKCkpOwotCQlhZGRUZXN0KFRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5zdWl0ZSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWNhZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLlNTRUZvckhUTUxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZjE0ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjg2NTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci0KLS8qKgotICogU29tZSB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIHByb2plY3RzLCBhbmQgY29weWluZyBmaWxlcyBpbnRvIHRoZSB3b3Jrc3BhY2UuCi0gKiBDb3BpZWQgZnJvbSBKU1AgVUkgdGVzdHMuCi0gKiAKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbCBDb3B5IC0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbAotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFV0aWwgewotCi0Jc3RhdGljIHZvaWQgX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJRW51bWVyYXRpb24gZW50cmllcyA9IEhUTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7Ci0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGVudHJ5UGF0aCA9IGVudHJpZXMubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsKLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIobmV3IFBhdGgodGFyZ2V0UGF0aCkpOwotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZW50cnlQYXRoICsgIiAtPiAiICsgdGFyZ2V0UGF0aCk7Ci0JCX0KLQl9Ci0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBudWxsOwotCQlVUkwgZW50cnkgPSBIVE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIgKGVnLgotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aAotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlIChlZy4KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzE5OGM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC50YWdpbmZvLkhUTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudmlld3MuY29udGVudG91dGxpbmUuSFRNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5wcm9wZXJ0aWVzLlhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIGh0bWwgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmNsYXNzLCBvLmdldENsYXNzKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIEhUTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MsIG8uZ2V0Q2xhc3MoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MsIG8uZ2V0Q2xhc3MoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb2N1bWVudGF0aW9uVGV4dEhvdmVyKCkgewotCQlMaXN0IGNvbmZpZ3MgPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbnMoRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5ET0NVTUVOVEFUSU9OVEVYVEhPVkVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUKTsKLQkJYXNzZXJ0RmFsc2UoIm5vIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIGNvbmZpZ3MuaXNFbXB0eSgpKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ3Muc2l6ZSgpICYmICFmb3VuZDsgaSsrKSB7Ci0JCQlmb3VuZCA9IGNvbmZpZ3MuZ2V0KGkpLmdldENsYXNzKCkgPT0gSFRNTFRhZ0luZm9Ib3ZlclByb2Nlc3Nvci5jbGFzczsKLQkJfQotCQlhc3NlcnRUcnVlKCJ1bmV4cGVjdGVkIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIGZvdW5kKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjN2I5NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5IVE1MVUlQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBIVE1MVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWIwMWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzIjsKLQkKLQkvKiogc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXBlbmQgb24gSlNEVCAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKQVZBX1NDUklQVF9OQVRVUkVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5qc05hdHVyZSI7Ci0JCi0JLyoqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QiOwotCQotCS8qKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqCi0JICogPHA+RGVmYXVsdCBjb25zdHJ1Y3RvcjxwPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzKCkgewotCQlzdXBlcigiVGVzdCBFbWJlZGVkIENTUyBDb250ZW50IEFzc2lzdCBDb21wdXRlcnMiKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+Q29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIHRlc3QgbmFtZS48L3A+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdGhpcyB0ZXN0IHJ1biBzaG91bGQgaGF2ZS4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVycyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShUZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnMuY2xhc3MsICJUZXN0IEVtYmVkZWQgQ1NTIENvbnRlbnQgQXNzaXN0IENvbXB1dGVycyIpOwotCQlyZXR1cm4gbmV3IFRlc3RFbWJlZGVkQ1NTQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwKHRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yUHJvcG9zYWxzX1N0eWxlVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs5MCwgMCwgOTAsIDkwfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgOSwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvblByb3BlcnR5UHJvcG9zYWxzX1N0eWxlVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMjIsIDAsIDEyMiwgMTIyfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMTIsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25WYWx1ZVByb3Bvc2Fsc19TdHlsZVRhZygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTEsIDAsIDExLCAxMX07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDEzLCAxNiwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hTZWxlY3RvclByb3Bvc2Fsc19TdHlsZVRhZygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MjAsIDAsIDIwLCAyMH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDI0LCAxLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaERlY2xhcmF0aW9uUHJvcG9zYWxzX1N0eWxlVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs0LCAwLCA0LCA0fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMTcsIDE0LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaERlY2xhcmF0aW9uVmFsdWVQcm9wb3NhbHNfU3R5bGVUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezQsIDAsIDQsIDR9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCAyMSwgMjMsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2Fsc19TcGFjZWRRdW90ZXNfU3R5bGVBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEyMiwgMCwgMTIyLCAxMjJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCAzMSwgMTQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2Fsc19FbXB0eVF1b3Rlc19TdHlsZUF0dHJpYnV0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCBzdGFuZGFyZCBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MTIyLCAwLCAxMjIsIDEyMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDMuaHRtbCIsIDMzLCAxMiwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvblZhbHVlUHJvcG9zYWxzX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMSwgMCwgMTEsIDExfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMzUsIDI2LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaERlY2xhcmF0aW9uUHJvcG9zYWxzX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs0LCAwLCA0LCA0fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgMzcsIDI1LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbmlzaERlY2xhcmF0aW9uVmFsdWVQcm9wb3NhbHNfU3R5bGVBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezQsIDAsIDQsIDR9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCAzOSwgMzQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2Fsc19BZnRlclNlbWljb2xvbl9Ob1NwYWNlX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMjIsIDAsIDEyMiwgMTIyfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgNDEsIDQwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uUHJvcGVydHlQcm9wb3NhbHNfQWZ0ZXJTZW1pY29sb25fQmVmb3JlU3BhY2VfU3R5bGVBdHRyaWJ1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgc3RhbmRhcmQgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEyMiwgMCwgMTIyLCAxMjJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QzLmh0bWwiLCA0MywgNDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb25Qcm9wZXJ0eVByb3Bvc2Fsc19BZnRlclNlbWljb2xvbl9BZnRlclNwYWNlX1N0eWxlQXR0cmlidXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHN0YW5kYXJkIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxMjIsIDAsIDEyMiwgMTIyfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0My5odG1sIiwgNDMsIDQxLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+UnVuIGEgcHJvcG9zYWwgdGVzdCBieSBvcGVuaW5nIHRoZSBnaXZlbiBmaWxlIGFuZCBpbnZva2luZyBjb250ZW50IGFzc2lzdCBmb3IKLQkgKiBlYWNoIGV4cGVjdGVkIHByb3Bvc2FsIGNvdW50IGF0IHRoZSBnaXZlbiBsaW5lIG51bWJlciBhbmQgbGluZSBjaGFyYWN0ZXIKLQkgKiBvZmZzZXQgYW5kIHRoZW4gY29tcGFyZSB0aGUgbnVtYmVyIG9mIHByb3Bvc2FscyBmb3IgZWFjaCBpbnZvY2F0aW9uIChwYWdlcykgdG8gdGhlCi0JICogZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fscy48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGVOYW1lCi0JICogQHBhcmFtIGxpbmVOdW0KLQkgKiBAcGFyYW0gbGluZVJlbGF0aXZlQ2hhck9mZnNldAotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHJ1blByb3Bvc2FsVGVzdChTdHJpbmcgZmlsZU5hbWUsCi0JCQlpbnQgbGluZU51bSwgaW50IGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQsCi0JCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB0aHJvd3MgRXhjZXB0aW9uewotCQkKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlpbnQgb2Zmc2V0ID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldChsaW5lTnVtKSArIGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQ7Ci0KLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBnZXRQcm9wb3NhbHModmlld2VyLCBvZmZzZXQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoKTsKLQkJCi0JCXZlcmlmeVByb3Bvc2FsQ291bnRzKHBhZ2VzLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+SW52b2tlIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBnaXZlbiB2aWV3ZXIgYXQgdGhlIGdpdmVuIG9mZnNldCwgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgcGFnZXMKLQkgKiBhbmQgcmV0dXJuIHRoZSByZXN1bHRzIG9mIGVhY2ggcGFnZTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEBwYXJhbSBwYWdlQ291bnQKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJQ29tcGxldGlvblByb3Bvc2FsW11bXSBnZXRQcm9wb3NhbHMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBpbnQgb2Zmc2V0LCBpbnQgcGFnZUNvdW50KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9zZXR1cCB0aGUgdmlld2VyCi0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgY29uZmlndXJhdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0JCUNvbnRlbnRBc3Npc3RhbnQgY29udGVudEFzc2lzdGFudCA9IChDb250ZW50QXNzaXN0YW50KWNvbmZpZ3VyYXRpb24uZ2V0Q29udGVudEFzc2lzdGFudCh2aWV3ZXIpOwotCQl2aWV3ZXIuY29uZmlndXJlKGNvbmZpZ3VyYXRpb24pOwotCQl2aWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShvZmZzZXQsIDApOwotCQkKLQkJLy9nZXQgdGhlIHByb2Nlc3NvcgotCQlTdHJpbmcgcGFydGl0aW9uVHlwZUlEID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFydGl0aW9uKG9mZnNldCkuZ2V0VHlwZSgpOwotCQlJQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBjb250ZW50QXNzaXN0YW50LmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3IocGFydGl0aW9uVHlwZUlEKTsKLQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBhYm91dCB0byBzdGFydAotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZCA9IENvbnRlbnRBc3Npc3RhbnQuY2xhc3MuCi0JCSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uQmVnaW5FdmVudCIsIG5ldyBDbGFzc1tdIHtib29sZWFuLmNsYXNzfSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uQmVnaW5FdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbmV3IE9iamVjdFtdIHtCb29sZWFuLlRSVUV9KTsKLQotCQkvL2dldCBjb250ZW50IGFzc2lzdCBzdWdnZXN0aW9ucwotCQlJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW3BhZ2VDb3VudF1bXTsKLQkJZm9yKGludCBwID0gMDsgcCA8IHBhZ2VDb3VudDsgKytwKSB7Ci0JCQlwYWdlc1twXSA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCk7Ci0JCX0KLQkJCi0JCS8vZmlyZSBjb250ZW50IGFzc2lzdCBzZXNzaW9uIGVuZGluZwotCQlNZXRob2QgcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotICAgICAgICBnZXREZWNsYXJlZE1ldGhvZCgiZmlyZVNlc3Npb25FbmRFdmVudCIsIG51bGwpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlwcml2YXRlRmlyZVNlc3Npb25FbmRFdmVudE1ldGhvZC5pbnZva2UoY29udGVudEFzc2lzdGFudCwgbnVsbCk7Ci0JCQotCQlyZXR1cm4gcGFnZXM7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbXBhcmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMgcGVyIHBhZ2UgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgcHJvcG9zYWxzCi0JICogcGVyIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHBhZ2VzCi0JICogQHBhcmFtIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmlmeVByb3Bvc2FsQ291bnRzKElDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzLCBpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB7Ci0JCVN0cmluZ0J1ZmZlciBlcnJvciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yKGludCBwYWdlID0gMDsgcGFnZSA8IGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoOyArK3BhZ2UpIHsKLQkJCWlmKGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0gPiBwYWdlc1twYWdlXS5sZW5ndGgpIHsKLQkJCQllcnJvci5hcHBlbmQoIlxuUHJvcG9zYWwgcGFnZSAiICsgcGFnZSArICIgZGlkIG5vdCBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzOiB3YXMgIiArCi0JCQkJCQlwYWdlc1twYWdlXS5sZW5ndGggKyAiIGV4cGVjdGVkICIgKyBleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdKTsKLQkJCX0KLQkJfQotCQkKLQkJLy9pZiBlcnJvcnMgcmVwb3J0IHRoZW0KLQkJaWYoZXJyb3IubGVuZ3RoKCkgPiAwKSB7Ci0JCQlBc3NlcnQuZmFpbChlcnJvci50b1N0cmluZygpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIGZpbGUgbmFtZSBpbiA8Y29kZT5mUHJvamVjdDwvY29kZT4gYXR0ZW1wdHMgdG8gZ2V0IGFuIDxjb2RlPklGaWxlPC9jb2RlPgotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB0aGUgdGVzdCBmYWlscy48L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0Ci0JICogQHJldHVybiB0aGUgPGNvZGU+SUZpbGU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPGNvZGU+bmFtZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIDxjb2RlPmZpbGU8L2NvZGU+IGdldCBhbiBlZGl0b3IgZm9yIGl0LiBJZiBhbiBlZGl0b3IgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHJldHJpZXZlZCBmb3IgdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+IHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFscmVhZHkKLQkgKiBvcGVuIGVkaXRvci48L3A+Ci0JICogCi0JICogPHA+V2hlbiBvcGVuaW5nIHRoZSBlZGl0b3IgaXQgd2lsbCBhbHNvIHN0YW5kYXJkaXplZCB0aGUgbGluZQotCSAqIGVuZGluZ3MgdG8gPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIG9wZW4gYW5kIHJldHVybiBhbiBlZGl0b3IgZm9yIHRoaXMKLQkgKiBAcmV0dXJuIDxjb2RlPlN0cnVjdHVyZWRUZXh0RWRpdG9yPC9jb2RlPiBvcGVuZWQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotCQkKLQkJaWYoZWRpdG9yID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlLCB0cnVlKTsKLQkJCQlpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJZWRpdG9yID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcillZGl0b3JQYXJ0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIik7Ci0JCQkJfQotCQkJCQotCQkJCWlmKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCXN0YW5kYXJkaXplTGluZUVuZGluZ3MoZWRpdG9yKTsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogPHA+TGluZSBlbmRpbmdzIGNhbiBiZSBhbiBpc3N1ZSB3aGVuIHJ1bm5pbmcgdGVzdHMgb24gZGlmZmVyZW50IE9Tcy4KLQkgKiBUaGlzIGZ1bmN0aW9uIHN0YW5kYXJkaXplcyB0aGUgbGluZSBlbmRpbmdzIHRvIHVzZSA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogPHA+SXQgd2lsbCBnZXQgdGhlIHRleHQgZnJvbSB0aGUgZ2l2ZW4gZWRpdG9yLCBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncywKLQkgKiBhbmQgdGhlbiBzYXZlIHRoZSBlZGl0b3I8L3A+Ci0JICogCi0JICogQHBhcmFtIGVkaXRvciBzdGFuZGFyZGl6ZSB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSB0ZXh0IHByZXNlbnRlZCBpbiB0aGlzCi0JICogZWRpdG9yLgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0RW1iZWRlZENTU0NvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgVGVzdEVtYmVkZWRDU1NDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9zZXR1cCBwcm9wZXJ0aWVzCi0JCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFKTsKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQkJCi0JCQkvL3NldHVwIHByb2plY3QKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXSB7SkFWQV9TQ1JJUFRfTkFUVVJFX0lEfSk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgUFJPSkVDVF9OQU1FKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vY2xvc2Ugb3V0IHRoZSBlZGl0b3JzCi0JCQlJdGVyYXRvciBpdGVyID0gZkZpbGVUb0VkaXRvck1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpaXRlci5uZXh0KCk7Ci0JCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQllZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJfQotCQkJCi0JCQkvL3JlbW92ZSBwcm9qZWN0Ci0JCQlmUHJvamVjdC5kZWxldGUodHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkKLQkJCS8vcmVzdG9yZSBwcm9wZXJ0aWVzCi0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEwM2FjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotCi1wdWJsaWMgY2xhc3MgVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzIjsKLQkKLQkvKiogc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXBlbmQgb24gSlNEVCAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKQVZBX1NDUklQVF9OQVRVUkVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5qc05hdHVyZSI7Ci0JCi0JLyoqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QiOwotCQotCS8qKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhbHJlYWR5IG9wZW4gZWRpdG9ycyBzbyB0aGF0IHRoZSB0ZXN0cyBkb24ndCBnbyB0aHJvdWdoCi0JICogdGhlIHRyb3VibGUgb2Ygb3BlbmluZyB0aGUgc2FtZSBlZGl0b3JzIG92ZXIgYW5kIG92ZXIgYWdhaW4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBNYXAgZkZpbGVUb0VkaXRvck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCi0JLyoqCi0JICogPHA+RGVmYXVsdCBjb25zdHJ1Y3RvcjxwPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzKCkgewotCQlzdXBlcigiVGVzdCBIVE1MIENvbnRlbnQgQXNzaXN0IENvbXB1dGVycyIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKFRlc3RIVE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5jbGFzcywgIlRlc3QgSFRNTCBDb250ZW50IEFzc2lzdCBDb21wdXRlcnMiKTsKLQkJcmV0dXJuIG5ldyBUZXN0SFRNTENvbnRlbnRBc3Npc3RDb21wdXRlcnNTZXR1cCh0cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eURvY3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezcsIDYsIDEsIDd9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QwLmh0bWwiLCAwLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFmdGVyRG9jVHlwZUJlZm9yZUhUTUxUYWdQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7OCwgOCwgMCwgOH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuaHRtbCIsIDEsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWZ0ZXJEb2NUeXBlQmVmb3JlRW1wdHlEb2NQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7OSwgOCwgMSwgOX07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDIuaHRtbCIsIDEsIDAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Qm9keVRhZ0NoaWxkRWxlbWVudFByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs3OCwgOCwgNzAsIDc4fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS5odG1sIiwgOCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RQVGFnQ2hpbGRFbGVtZW50UHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezU0LCA4LCA0NiwgNTR9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmh0bWwiLCAxNCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RESVZUYWdDaGlsZEVsZW1lbnRQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7NzgsIDgsIDcwLCA3OH07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDEuaHRtbCIsIDE4LCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRUYWdDaGlsZEVsZW1lbnRQcm9wb3NhbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezB9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmh0bWwiLCAyMiwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RESVZUYWdBdHRyaWJ1dGVOYW1lUHJvcG9zYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezE4LCAwLCAxOCwgMTh9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLmh0bWwiLCAxNywgNSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hDbG9zaW5nVGFnTmFtZVByb3Bzb2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHsxLCAwLCAxLCAxfTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0NC5odG1sIiwgOSwgOSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hDbG9zaW5nVGFnUHJvcHNvYWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezIsIDAsIDIsIDJ9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3Q0Lmh0bWwiLCAxMCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hDbG9zaW5nVGFnTmFtZVByb3Bzb2Fsc1hIVE1MKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezEsIDAsIDEsIDF9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3Q1LnhodG1sIiwgOSwgOSwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaW5pc2hDbG9zaW5nVGFnUHJvcHNvYWxzWEhUTUwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MiwgMCwgMiwgMn07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDUueGh0bWwiLCAxMCwgMCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlJ1biBhIHByb3Bvc2FsIHRlc3QgYnkgb3BlbmluZyB0aGUgZ2l2ZW4gZmlsZSBhbmQgaW52b2tpbmcgY29udGVudCBhc3Npc3QgZm9yCi0JICogZWFjaCBleHBlY3RlZCBwcm9wb3NhbCBjb3VudCBhdCB0aGUgZ2l2ZW4gbGluZSBudW1iZXIgYW5kIGxpbmUgY2hhcmFjdGVyCi0JICogb2Zmc2V0IGFuZCB0aGVuIGNvbXBhcmUgdGhlIG51bWJlciBvZiBwcm9wb3NhbHMgZm9yIGVhY2ggaW52b2NhdGlvbiAocGFnZXMpIHRvIHRoZQotCSAqIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMuPC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlTmFtZQotCSAqIEBwYXJhbSBsaW5lTnVtCi0JICogQHBhcmFtIGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQcm9wb3NhbENvdW50cwotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5Qcm9wb3NhbFRlc3QoU3RyaW5nIGZpbGVOYW1lLAotCQkJaW50IGxpbmVOdW0sIGludCBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0LAotCQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cykgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJCi0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKGZpbGVOYW1lKTsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJaW50IG9mZnNldCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQobGluZU51bSkgKyBsaW5lUmVsYXRpdmVDaGFyT2Zmc2V0OwotCi0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXVtdIHBhZ2VzID0gZ2V0UHJvcG9zYWxzKHZpZXdlciwgb2Zmc2V0LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzLmxlbmd0aCk7Ci0JCQotCQl2ZXJpZnlQcm9wb3NhbENvdW50cyhwYWdlcywgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCS8qKgotCSAqIDxwPkludm9rZSBjb250ZW50IGFzc2lzdCBvbiB0aGUgZ2l2ZW4gdmlld2VyIGF0IHRoZSBnaXZlbiBvZmZzZXQsIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBhZ2VzCi0JICogYW5kIHJldHVybiB0aGUgcmVzdWx0cyBvZiBlYWNoIHBhZ2U8L3A+Ci0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcGFyYW0gcGFnZUNvdW50Ci0JICogQHJldHVybgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gZ2V0UHJvcG9zYWxzKFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgaW50IG9mZnNldCwgaW50IHBhZ2VDb3VudCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vc2V0dXAgdGhlIHZpZXdlcgotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIGNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCQlDb250ZW50QXNzaXN0YW50IGNvbnRlbnRBc3Npc3RhbnQgPSAoQ29udGVudEFzc2lzdGFudCljb25maWd1cmF0aW9uLmdldENvbnRlbnRBc3Npc3RhbnQodmlld2VyKTsKLQkJdmlld2VyLmNvbmZpZ3VyZShjb25maWd1cmF0aW9uKTsKLQkJdmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uob2Zmc2V0LCAwKTsKLQkJCi0JCS8vZ2V0IHRoZSBwcm9jZXNzb3IKLQkJU3RyaW5nIHBhcnRpdGlvblR5cGVJRCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldFBhcnRpdGlvbihvZmZzZXQpLmdldFR5cGUoKTsKLQkJSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IgcHJvY2Vzc29yID0gY29udGVudEFzc2lzdGFudC5nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29yKHBhcnRpdGlvblR5cGVJRCk7Ci0KLQkJLy9maXJlIGNvbnRlbnQgYXNzaXN0IHNlc3Npb24gYWJvdXQgdG8gc3RhcnQKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotCQkgICAgICAgIGdldERlY2xhcmVkTWV0aG9kKCJmaXJlU2Vzc2lvbkJlZ2luRXZlbnQiLCBuZXcgQ2xhc3NbXSB7Ym9vbGVhbi5jbGFzc30pOwotCQlwcml2YXRlRmlyZVNlc3Npb25CZWdpbkV2ZW50TWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG5ldyBPYmplY3RbXSB7Qm9vbGVhbi5UUlVFfSk7Ci0KLQkJLy9nZXQgY29udGVudCBhc3Npc3Qgc3VnZ2VzdGlvbnMKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwYWdlQ291bnRdW107Ci0JCWZvcihpbnQgcCA9IDA7IHAgPCBwYWdlQ291bnQ7ICsrcCkgewotCQkJcGFnZXNbcF0gPSBwcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHModmlld2VyLCBvZmZzZXQpOwotCQl9Ci0JCQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBlbmRpbmcKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkVuZEV2ZW50TWV0aG9kID0gQ29udGVudEFzc2lzdGFudC5jbGFzcy4KLSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uRW5kRXZlbnQiLCBudWxsKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG51bGwpOwotCQkKLQkJcmV0dXJuIHBhZ2VzOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db21wYXJlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzIHBlciBwYWdlIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHByb3Bvc2FscwotCSAqIHBlciBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSBwYWdlcwotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlQcm9wb3NhbENvdW50cyhJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcywgaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cykgewotCQlTdHJpbmdCdWZmZXIgZXJyb3IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvcihpbnQgcGFnZSA9IDA7IHBhZ2UgPCBleHBlY3RlZFByb3Bvc2FsQ291bnRzLmxlbmd0aDsgKytwYWdlKSB7Ci0JCQlpZihleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdID4gcGFnZXNbcGFnZV0ubGVuZ3RoKSB7Ci0JCQkJZXJyb3IuYXBwZW5kKCJcblByb3Bvc2FsIHBhZ2UgIiArIHBhZ2UgKyAiIGlzIG1pc3NpbmcgcHJvcG9zYWxzOiB3YXMgIiArCi0JCQkJCQlwYWdlc1twYWdlXS5sZW5ndGggKyAiIGV4cGVjdGVkICIgKyBleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdKTsKLQkJCX0KLQkJfQotCQkKLQkJLy9pZiBlcnJvcnMgcmVwb3J0IHRoZW0KLQkJaWYoZXJyb3IubGVuZ3RoKCkgPiAwKSB7Ci0JCQlBc3NlcnQuZmFpbChlcnJvci50b1N0cmluZygpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIGZpbGUgbmFtZSBpbiA8Y29kZT5mUHJvamVjdDwvY29kZT4gYXR0ZW1wdHMgdG8gZ2V0IGFuIDxjb2RlPklGaWxlPC9jb2RlPgotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB0aGUgdGVzdCBmYWlscy48L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0Ci0JICogQHJldHVybiB0aGUgPGNvZGU+SUZpbGU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPGNvZGU+bmFtZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIDxjb2RlPmZpbGU8L2NvZGU+IGdldCBhbiBlZGl0b3IgZm9yIGl0LiBJZiBhbiBlZGl0b3IgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHJldHJpZXZlZCBmb3IgdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+IHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFscmVhZHkKLQkgKiBvcGVuIGVkaXRvci48L3A+Ci0JICogCi0JICogPHA+V2hlbiBvcGVuaW5nIHRoZSBlZGl0b3IgaXQgd2lsbCBhbHNvIHN0YW5kYXJkaXplZCB0aGUgbGluZQotCSAqIGVuZGluZ3MgdG8gPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIG9wZW4gYW5kIHJldHVybiBhbiBlZGl0b3IgZm9yIHRoaXMKLQkgKiBAcmV0dXJuIDxjb2RlPlN0cnVjdHVyZWRUZXh0RWRpdG9yPC9jb2RlPiBvcGVuZWQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBnZXRFZGl0b3IoSUZpbGUgZmlsZSkgIHsKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWZGaWxlVG9FZGl0b3JNYXAuZ2V0KGZpbGUpOwotCQkKLQkJaWYoZWRpdG9yID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlLCB0cnVlKTsKLQkJCQlpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgewotCQkJCQlYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0IHhtbEVkaXRvclBhcnQgPSAoWE1MTXVsdGlQYWdlRWRpdG9yUGFydCllZGl0b3JQYXJ0OwotCQkJCQllZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpeG1sRWRpdG9yUGFydC5nZXRBZGFwdGVyKFN0cnVjdHVyZWRUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCQl9IGVsc2UgaWYoZWRpdG9yUGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCWVkaXRvciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpZWRpdG9yUGFydCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIpOwotCQkJCX0KLQkJCQkKLQkJCQlpZihlZGl0b3IgIT0gbnVsbCkgewotCQkJCQlzdGFuZGFyZGl6ZUxpbmVFbmRpbmdzKGVkaXRvcik7Ci0JCQkJCWZGaWxlVG9FZGl0b3JNYXAucHV0KGZpbGUsIGVkaXRvcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gZWRpdG9yIGZvciAiICsgZmlsZSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlICsgIiBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBlZGl0b3I7Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHN0YW5kYXJkaXplTGluZUVuZGluZ3MoU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpLmdldERvY3VtZW50KCk7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvYy5nZXQoKTsKLQkJY29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcciIsICJcbiIpOwotCQlkb2Muc2V0KGNvbnRlbnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyBpbm5lciBjbGFzcyBpcyB1c2VkIHRvIGRvIHNldCB1cCBhbmQgdGVhciBkb3duIGJlZm9yZSBhbmQKLQkgKiBhZnRlciAocmVzcGVjdGl2ZWx5KSBhbGwgdGVzdHMgaW4gdGhlIGluY2xvc2luZyBjbGFzcyBoYXZlIHJ1bi48L3A+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEhUTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAgZXh0ZW5kcyBUZXN0U2V0dXAgewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFID0gInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSI7Ci0JCXByaXZhdGUgc3RhdGljIFN0cmluZyBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBudWxsOwotCQkKLQkJLyoqCi0JCSAqIERlZmF1bHQgY29uc3RydWN0b3IKLQkJICogCi0JCSAqIEBwYXJhbSB0ZXN0IGRvIHNldHVwIGZvciB0aGUgZ2l2ZW4gdGVzdAotCQkgKi8KLQkJcHVibGljIFRlc3RIVE1MQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwKFRlc3QgdGVzdCkgewotCQkJc3VwZXIodGVzdCk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBiZWZvcmUgYWxsIG9mIHRoZSB0ZXN0czwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjc2V0VXAoKQotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vc2V0dXAgcHJvcGVydGllcwotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJCQotCQkJLy9zZXR1cCBwcm9qZWN0Ci0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW10ge0pBVkFfU0NSSVBUX05BVFVSRV9JRH0pOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW48L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3RlYXJEb3duKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL2Nsb3NlIG91dCB0aGUgZWRpdG9ycwotCQkJSXRlcmF0b3IgaXRlciA9IGZGaWxlVG9FZGl0b3JNYXAudmFsdWVzKCkuaXRlcmF0b3IoKTsKLQkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWl0ZXIubmV4dCgpOwotCQkJCWVkaXRvci5kb1NhdmUobnVsbCk7Ci0JCQkJZWRpdG9yLmNsb3NlKGZhbHNlKTsKLQkJCX0KLQkJCQotCQkJLy9yZW1vdmUgcHJvamVjdAotCQkJZlByb2plY3QuZGVsZXRlKHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCi0JCQkvL3Jlc3RvcmUgcHJvcGVydGllcwotCQkJaWYgKHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92YWxpZGF0aW9uL1Rlc3RIVE1MVmFsaWRhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmFsaWRhdGlvbi9UZXN0SFRNTFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTVlMWFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92YWxpZGF0aW9uL1Rlc3RIVE1MVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52YWxpZGF0aW9uOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5pbnRlcm5hbC52YWxpZGF0aW9uLkhUTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5vcGVyYXRpb25zLldvcmtiZW5jaENvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci0KLS8qKgotICogVGVzdCBmb3IgdGhlIEhUTUxWYWxpZGF0b3IKLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5pbnRlcm5hbC52YWxpZGF0aW9uLkhUTUxWYWxpZGF0b3IKLSAqLwotcHVibGljIGNsYXNzIFRlc3RIVE1MVmFsaWRhdG9yIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0SFRNTFZhbGlkYXRvciI7Ci0JCi0JLyoqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL1Rlc3RIVE1MVmFsaWRhdG9yIjsKLQkKLQkvKiogVGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlIHRlc3RzIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCXByaXZhdGUgSFRNTFZhbGlkYXRvciBmVmFsaWRhdG9yID0gbmV3IEhUTUxWYWxpZGF0b3IoKTsKLQkKLQkvKioKLQkgKiA8cD5EZWZhdWx0IGNvbnN0cnVjdG9yPHA+Ci0JICogPHA+VXNlIHtAbGluayAjc3VpdGUoKX08L3A+Ci0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0SFRNTFZhbGlkYXRvcigpIHsKLQkJc3VwZXIoIlRlc3QgSFRNTFZhbGlkYXRvciIpOwotCX0KLQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0SFRNTFZhbGlkYXRvcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShUZXN0SFRNTFZhbGlkYXRvci5jbGFzcywgIlRlc3QgSFRNTFZhbGlkYXRvciIpOwotCQlyZXR1cm4gbmV3IFRlc3RIVE1MVmFsaWRhdG9yU2V0dXAodHMpOwotCX0KLQkKLQkvKioKLQkgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIEJ1ZyAyODUyODUKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCN0ZXN0UmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZhbGlkYXRpb24uVGVzdEhUTUxWYWxpZGF0b3IjdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb24uSlNQSFRNTFZhbGlkYXRvclRlc3QjdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJSUZpbGUgdGVzdEZpbGUgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQkvL2dldCB0ZXN0IGZpbGUKLQkJCXRlc3RGaWxlID0gZlByb2plY3QuZ2V0RmlsZSgiUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcuaHRtbCIpOwotCQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICIgZG9lcyBub3QgZXhpc3QiLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0JCQkKLQkJCS8vZ2V0IHRoZSBkb2N1bWVudAotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdCh0ZXN0RmlsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkKLQkJCS8vc2V0IHVwIGZvciBmVmFsaWRhdG9yCi0JCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQgPSBuZXcgV29ya2JlbmNoQ29udGV4dCgpOwotCQkJTGlzdCBmaWxlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWZpbGVMaXN0LmFkZCh0ZXN0RmlsZS5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQljb250ZXh0LnNldFZhbGlkYXRpb25GaWxlVVJJcyhmaWxlTGlzdCk7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQkKLQkJCS8vbmVlZCB0byBkeW5hbWljYWxseSBmaW5kIHdoZXJlIHRoZSAtLT4gaXMgYmVjYXVzZQotCQkJLy9pdHMgZGlmZmVyZW50IG9uIHVuaXggdnMgd2luZG93cyBiZWNhdXNlIG9mIGxpbmUgZW5kaW5ncwotCQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlpbnQgZW5kQ29tbWVudEluZGV4ID0gY29udGVudHMuaW5kZXhPZigiLS0+Iik7Ci0JCQkKLQkJCS8vcmVtb3ZlIC0tPgotCQkJZG9jdW1lbnQucmVwbGFjZShlbmRDb21tZW50SW5kZXgsIDMsICIiKTsKLQkJCQotCQkJLy92YWxpZGF0ZSBmaWxlIHdpdGggZXJyb3IKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRUcnVlKCJUaGVyZSBzaG91bGQgYmUgdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJCi0JCQkvL3JlcGxhY2UgLS0+Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGVuZENvbW1lbnRJbmRleCwgMCwgIi0tPiIpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGNsZWFuIGZpbGUKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmVncmVzc2lvbiB0ZXN0IGZvciBCdWcgMjk4NDcyCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEludmFsaWRhdGVUYWdOYW1lVGhlbkZpeCgpIHRocm93cyBFeGNlcHRpb257Ci0JCUlGaWxlIHRlc3RGaWxlID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJLy9nZXQgdGVzdCBmaWxlCi0JCQl0ZXN0RmlsZSA9IGZQcm9qZWN0LmdldEZpbGUoIkludmFsaWRhdGVUYWdOYW1lVGhlbkZpeC5odG1sIik7Ci0JCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIHRlc3RGaWxlICsgIiBkb2VzIG5vdCBleGlzdCIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQkJCQotCQkJLy9nZXQgdGhlIGRvY3VtZW50Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KHRlc3RGaWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQotCQkJLy9zZXQgdXAgZm9yIHZhbGlkYXRvcgotCQkJV29ya2JlbmNoQ29udGV4dCBjb250ZXh0ID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJCUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlmaWxlTGlzdC5hZGQodGVzdEZpbGUuZ2V0RnVsbFBhdGgoKS50b1BvcnRhYmxlU3RyaW5nKCkpOwotCQkJY29udGV4dC5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGNsZWFuIGZpbGUKLQkJCVRlc3RSZXBvcnRlciByZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJCWZWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQkJYXNzZXJ0RmFsc2UoIlRoZXJlIHNob3VsZCBiZSBubyB2YWxpZGF0aW9uIGVycm9ycyBvbiAiICsgdGVzdEZpbGUsIHJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQkJCi0JCQkvL25lZWQgdG8gZHluYW1pY2FsbHkgZmluZCB3aGVyZSB0aGUgLS0+IGlzIGJlY2F1c2UKLQkJCS8vaXRzIGRpZmZlcmVudCBvbiB1bml4IHZzIHdpbmRvd3MgYmVjYXVzZSBvZiBsaW5lIGVuZGluZ3MKLQkJCVN0cmluZyBjb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJaW50IGVuZE9mU3RhcnRUYWdJbmRleCA9IGNvbnRlbnRzLmluZGV4T2YoIj48L2Rpdj4iKTsKLQkJCQotCQkJLy9jaGFuZ2UgdG8gPGRpdng+PC9kaXY+Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGVuZE9mU3RhcnRUYWdJbmRleCwgMCwgIngiKTsKLQkJCQotCQkJLy92YWxpZGF0ZSBmaWxlIHdpdGggZXJyb3IKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRUcnVlKCJUaGVyZSBzaG91bGQgYmUgdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJCi0JCQkvL2NoYW5nZSBiYWNrIHRvIDxkaXY+PC9kaXY+Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGVuZE9mU3RhcnRUYWdJbmRleCwgMSwgIiIpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGNsZWFuIGZpbGUKLQkJCXJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJZlZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+VGhpcyBpbm5lciBjbGFzcyBpcyB1c2VkIHRvIGRvIHNldCB1cCBhbmQgdGVhciBkb3duIGJlZm9yZSBhbmQKLQkgKiBhZnRlciBhbGwgdGVzdHMgaW4gdGhlIGluY2xvc2luZyBjbGFzcyBoYXZlIHJ1bi48L3A+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdEhUTUxWYWxpZGF0b3JTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgVGVzdEhUTUxWYWxpZGF0b3JTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBQUk9KRUNUX05BTUUpOwotCQkJCi0JCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFKTsKLQkJCQotCQkJaWYgKG5vbmludGVyYWN0aXZlICE9IG51bGwpIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSBub25pbnRlcmFjdGl2ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gImZhbHNlIjsKLQkJCX0KLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW48L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3RlYXJEb3duKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQkJCi0JCQlmUHJvamVjdC5kZWxldGUodHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQSA8Y29kZT5JUmVwb3J0ZXI8L2NvZGU+IGZvciB0ZXN0aW5nIHZhbGlkYXRvcnMKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFRlc3RSZXBvcnRlciBpbXBsZW1lbnRzIElSZXBvcnRlciB7Ci0JCXByaXZhdGUgYm9vbGVhbiBtZXNzYWdlUmVwb3J0ZWQgPSBmYWxzZTsKLQkJCi0JCXB1YmxpYyBUZXN0UmVwb3J0ZXIoKXt9Ci0JCQotCQlwdWJsaWMgdm9pZCBhZGRNZXNzYWdlKElWYWxpZGF0b3Igb3JpZ2luLCBJTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCQltZXNzYWdlUmVwb3J0ZWQgPSB0cnVlOwotCQl9Ci0JCQotCQlwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2VSZXBvcnRlZCgpIHsKLQkJCXJldHVybiBtZXNzYWdlUmVwb3J0ZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkge30KLQotCQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkge30KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbikge30KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7fQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDczYmFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXh0LklIVE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0gICAgcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZihEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0JCQkKLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCQkJCi0JCQlpZihQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsJCi0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCQkJCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0gICAgfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aD4wKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMSk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLSAgICAKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5TQ1JJUFR9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWIyMTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3RIVE1MIGV4dGVuZHMgVmlld1BhcnQgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiPlxuPEhUTUw+XG4JPEhFQUQ+XG4JCTxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIj5cbgkJPFRJVExFPnBsYWNlIHRpdGxlIGhlcmU8L1RJVExFPlxuCTwvSEVBRD5cbgk8Qk9EWT5cbgkJcGxhY2UgY29udGVudCBoZXJlCVxuPHNjcmlwdD5cblwidGV4dFwiO1xuPC9TQ1JJUFQ+XG48L0JPRFk+XG48L0hUTUw+IjsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgTnVtYmVySW5wdXREaWFsb2coU2hlbGwgc2hlbGwpIHsKLQkJCXN1cGVyKHNoZWxsKTsKLQkJfQotCi0JCXB1YmxpYyBUZXh0IHN0YXJ0OwotCQlpbnQgc3RhcnRWYWx1ZTsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCQlpbnQgbGVuZ3RoVmFsdWU7Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLwkJCXN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8JCQkJCWlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8JCQkJCQl0cnkgewotCQkJLy8JCQkJCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLwkJCQkJCQlzdGFydFZhbHVlID0gMDsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCX0KLQkJCS8vCQkJCX0KLQkJCS8vCQkJfSk7Ci0JCQkvLwkJCWxlbmd0aC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vCQkJCQlpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLwkJCQkJCXRyeSB7Ci0JCQkvLwkJCQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8JCQkJCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJfQotCQkJLy8JCQkJfQotCQkJLy8JCQl9KTsKLQotCQkJcmV0dXJuIGNvbXBvc2l0ZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2cjb2tQcmVzc2VkKCkKLQkJICovCi0JCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpIHsKLQkJCXRyeSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlzdGFydFZhbHVlID0gMDsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCWxlbmd0aFZhbHVlID0gMDsKLQkJCX0KLQkJCXN1cGVyLm9rUHJlc3NlZCgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBIVE1MIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKHNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJCXJldHVybjsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJCXNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgaW5wdXQgdG8gTlVMTAotCQkJLy8JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLwkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLwkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkvLwkJCQl9Ci0JCQkvLwotCQkJLy8JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCS8vCQkJCQlyZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vCQkJCQlzdXBlci5ydW4oKTsKLQkJCS8vCQkJCQl2aWV3ZXIuc2V0SW5wdXQobnVsbCk7Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCi0JCS8vIHNldCB1cCB0aGUgdmlld2VyIHdpdGggYSBkb2N1bWVudCAmIHZpZXdlciBjb25maWcKLQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQotCQlzZXR1cFZpZXdlclByZWZlcmVuY2VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCWZTb3VyY2VWaWV3ZXIudW5jb25maWd1cmUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpICE9IG51bGwgJiYgIWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkKLQkJCWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdmlld2VyIHdpdGggdGhlIHNhbWUgZG9jdW1lbnQvaW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCkpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJhNmFjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5IVE1MVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0SFRNTFZhbGlkYXRvci9JbnZhbGlkYXRlVGFnTmFtZVRoZW5GaXguaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdEhUTUxWYWxpZGF0b3IvSW52YWxpZGF0ZVRhZ05hbWVUaGVuRml4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYTU2ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0SFRNTFZhbGlkYXRvci9JbnZhbGlkYXRlVGFnTmFtZVRoZW5GaXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08ZGl2PjwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0SFRNTFZhbGlkYXRvci9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0SFRNTFZhbGlkYXRvci9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmMwMjBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdEhUTUxWYWxpZGF0b3IvUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08IS0tICBUZXN0IC0tPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDAuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDEuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzRiNWExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCi08L3NjcmlwdD4KLQotPHA+Ci0KLTwvcD4KLQotPGRpdiA+Ci0KLTwvZGl2PgotCi08IS0tIAotCi0gLS0+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ZiNGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0Mi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY2MTViMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLQotPHN0eWxlPgotPCEtLQotCi0KLQotLmZvbyB7Ci0JCi0JYm9yZGVyLXN0eWxlOiAKLX0KLQotLmJhciB7Ci0JYm9yZGVyLWJvdHRvbQotfQotCi0ubmV0byB7Ci0JYm9yZGVyLWJvdHRvbS1zdHlsZTogZAotfQotCi10IHsKLQotfQotLS0+Ci08L3N0eWxlPgotCi08L2hlYWQ+Ci08Ym9keSBzdHlsZT0iICI+Ci0KLTxkaXYgc3R5bGU9IiI+PC9kaXY+Ci0KLTxkaXYgc3R5bGU9ImJvcmRlci1zdHlsZTogICI+PC9kaXY+Ci0KLTxkaXYgc3R5bGU9ImJvcmRlci1ib3R0b20gIj48L2Rpdj4KLQotPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbS1zdHlsZTogZCAiPjwvZGl2PgotCi08ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tLXN0eWxlOiBkb3R0ZWQ7Ij48L2Rpdj4KLQotPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbS1zdHlsZTogZG90dGVkOyAiPjwvZGl2PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3Q0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJmNmQ0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxkaXY+PC9kaQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3Q1LnhodG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3Q1LnhodG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWQ2OGFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0NS54aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+DQotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPg0KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxkaXY+PC9kaQ0KLQ0KLTwvYm9keT4NCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmI3YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJlMDg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2U0ZDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gRGVjIDA3IDAzOjIzOjI2IEVTVCAyMDA5DQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjINCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2IyZWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMudHJhbnNsYXRpb24KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlM2NlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cw0KLUJ1bmRsZS1WZW5kb3IgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQ0KLUJ1bmRsZS1OYW1lID0gSlNEVCBXZWIgQ29yZSBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjAyMzMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIvPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+SnVuZSAyLCAyMDA2PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIAotYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgCi1iZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgCi1wcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50Ci1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNGJkY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RGaWxlcy8sXAotICAgICAgICAgICAgICAgT1NHSS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ3YzYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfQ09OU09MRSA9IGZhbHNlOwotCQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi9jb3JlL3Rlc3RzL0FsbFdlYkNvcmVUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi9jb3JlL3Rlc3RzL0FsbFdlYkNvcmVUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWYxYmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy9BbGxXZWJDb3JlVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uLlRlc3RIdG1sVHJhbnNsYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBBbGxXZWJDb3JlVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIEFsbFdlYkNvcmVUZXN0cygpIHsKLQkJc3VwZXIoIkpTRFQgV2ViIENvcmUgVGVzdHMiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIkpTRFQgV2ViIENvcmUgVGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0KLQkJLy8kSlVuaXQtRU5EJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdEh0bWxUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9UZXN0SHRtbFRyYW5zbGF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vVGVzdEh0bWxUcmFuc2xhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGE1YzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9UZXN0SHRtbFRyYW5zbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LklKc1RyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLmphdmFzY3JpcHQuSnNUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUuamF2YXNjcmlwdC5Kc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMuQWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdEh0bWxUcmFuc2xhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZk1vZGVsTWFuYWdlciA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3RGaWxlc0RpcmVjdG9yeSA9ICJ0ZXN0RmlsZXMiOwotCXB1YmxpYyBUZXN0SHRtbFRyYW5zbGF0aW9uKCl7Ci0JCWZNb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTEZvcm1hdCgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRlc3QxLmh0bWwiKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAidGVzdDEuaHRtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCQotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIG1pc3NpbmciLCB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKS5pbmRleE9mKCJmdW5jdGlvbiBibGFoKCkiKSA+PSAwKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyByZWFkRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsJCQotCQlTdHJpbmcgaW5wdXRTdHJpbmcgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBmaWxlSW5wdXRTdHJlYW0gPSBudWxsOwotCi0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShmaWxlTmFtZSk7Ci0JCQlmaWxlSW5wdXRTdHJlYW0gPSB1cmwub3BlblN0cmVhbSgpOwotCi0JCQlieXRlW10gaW5wdXRCdWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKLQkJCWlucHV0U3RyaW5nID0gbmV3IFN0cmluZygpOwotCQkJaW50IGJ5dGVzUmVhZCA9IC0xOwotCi0JCQl3aGlsZSAodHJ1ZSkgewotCQkJCWJ5dGVzUmVhZCA9IGZpbGVJbnB1dFN0cmVhbS5yZWFkKGlucHV0QnVmZmVyKTsKLQkJCQlpZiAoYnl0ZXNSZWFkID09IC0xKQotCQkJCQlicmVhazsKLQkJCQlTdHJpbmcgYnVmZmVyU3RyaW5nID0gbmV3IFN0cmluZyhpbnB1dEJ1ZmZlcik7Ci0JCQkJYnVmZmVyU3RyaW5nID0gYnVmZmVyU3RyaW5nLnN1YnN0cmluZygwLCBieXRlc1JlYWQpOwotCQkJCWlucHV0U3RyaW5nID0gaW5wdXRTdHJpbmcuY29uY2F0KGJ1ZmZlclN0cmluZyk7Ci0JCQl9Ci0KLQkJCWlmIChmaWxlSW5wdXRTdHJlYW0gIT0gbnVsbCkKLQkJCQlmaWxlSW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCi0JCXJldHVybiBpbnB1dFN0cmluZzsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50RXhjZXB0aW9uKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbChTdHJpbmcgZmlsZU5hbWUpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCVN0cmluZyBpbnB1dCA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQkJaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oaW5wdXQuZ2V0Qnl0ZXMoIlVURjgiKSk7Ci0JCQlTdHJpbmcgaWQgPSBpbnB1dFN0cmVhbS50b1N0cmluZygpLmNvbmNhdChmaWxlTmFtZSk7Ci0JCQkKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IGZNb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGlkLCBpbnB1dFN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCVN0cmluZ1dyaXRlciBzID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIocykpOwotCQkJZmFpbChzLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJCS8vIHNob3VsZCBhbHJlYWR5IGJlIGNsb3NlZAotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHN0cnVjdHVyZWRNb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U2hhcmVkTW9kZWwoU3RyaW5nIGlkLCBTdHJpbmcgY29udGVudHMpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNvbnRlbnRzLmdldEJ5dGVzKCJVVEY4IikpOwotCQkJCi0JCQlzdHJ1Y3R1cmVkTW9kZWwgPSBmTW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChpZCwgaW5wdXRTdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlTdHJpbmdXcml0ZXIgcyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHMpKTsKLQkJCWZhaWwocy50b1N0cmluZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQkvLyBzaG91bGQgYWxyZWFkeSBiZSBjbG9zZWQKLQkJCX0KLQkJfQotCi0JCXJldHVybiBzdHJ1Y3R1cmVkTW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJcmV0dXJuIHJlYWRGaWxlKCIvdGVzdEZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVUYWdJbkpTKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciBhID0gPGN1c3RvbTp0YWcvPjU7IGlmKGEgPCA0KSB7fSA7IDwvc2NyaXB0PiIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8Y3VzdG9tIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIvPiIpIDwgMCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlU2VydmVyU2lkZUFuZENsaWVudFRhZ0luSlMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIGEgPSA8Y3VzdG9tOnRhZy8+NTtcbmlmKGEgPCA8JT0gNCAlPikge30gOyA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInRhZyBpbmNsdWRlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiY3VzdG9tIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIvPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgYSA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJpZiBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI1O1xuaWYoYSA8IikgPiAtMSk7Ci0JCWFzc2VydFRydWUoImJsb2NrIGRyb3BwZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIikge30gOyAiKSA+IC0xKTsgCi0KLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlVGFnQW5kU2VydmVyU2lkZUluSlMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIGEgPSA8JT0gNCAlPjU7XG5pZihhIDwgPGN1c3RvbTp0YWcvPikge30gOyA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInRhZyBpbmNsdWRlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiY3VzdG9tIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIvPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgYSA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJpZiBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI1O1xuaWYoYSA8ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJibG9jayBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIpIHt9IDsgIikgPiAtMSk7IAotCi0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0vLwlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlT3ZlcmxhcHBpbmdUYWdBbmRTZXJ2ZXJTaWRlSW5KUygpIHsJCQotLy8JCS8vIGdldCBtb2RlbAotLy8JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0vLwkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciBhID0gPCU9IDQgJT41O1xuaWYoYSA8IDxjdXN0b206dGFnIGF0dHI9XCI8JT0lPlwiLz4pIHt9IDsgPC9zY3JpcHQ+Iik7Ci0vLwkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLS8vCQkKLS8vCQkvLyBkbyB0cmFuc2xhdGlvbgotLy8JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0vLwkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotLy8JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotLy8JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI8JSIpIDwgMCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgidGFnIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJjdXN0b20iKSA8IDApOwotLy8JCWFzc2VydFRydWUoInRhZyBpbmNsdWRlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiLz4iKSA8IDApOwotLy8JCWFzc2VydFRydWUoInZhciBkcm9wcGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgYSA9ICIpID4gLTEpOwotLy8JCWFzc2VydFRydWUoImlmIGRyb3BwZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjU7XG5pZihhIDwgIikgPiAtMSk7Ci0vLwkJYXNzZXJ0VHJ1ZSgiYmxvY2sgZHJvcHBlZFxuIiArIHRyYW5zbGF0ZWQsIHRyYW5zbGF0ZWQuaW5kZXhPZigiKSB7fSA7ICIpID4gLTEpOyAKLS8vCi0vLwkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotLy8KLS8vCQkvLyByZWxlYXNlIG1vZGVsCi0vLwkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotLy8JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVTZXJ2ZXJTaWRlMUluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPCU9IGphdmFPYmplY3QuZ2V0VGV4dCgpICU+OyA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVTZXJ2ZXJTaWRlMkluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjsgPC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8PyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPz4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJ2YXIgZHJvcHBlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigidmFyIHRleHQgPSAiKSA+IC0xKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlTXVsdGlwbGVTZXJ2ZXJTaWRlMUluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPCU9IGphdmFPYmplY3QuZ2V0VGV4dCgpICU+OyAgPCU9IGphdmFPYmplY3QuZ2V0VGV4dCgpICU+PC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8JSIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiJT4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJ2YXIgZHJvcHBlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigidmFyIHRleHQgPSAiKSA+IC0xKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbXMgZm91bmQgaW4gdHJhbnNsYXRpb24gIiwgdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKS5pc0VtcHR5KCkpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0TWFuZ2xlTXVsdGlwbGVTZXJ2ZXJTaWRlMkluSlNDaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IHZhciB0ZXh0ID0gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjsgIDw/IHNlcnZlck9iamVjdC5nZXRUZXh0KCkgPz48L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVNdWx0aXBsZU1peGVkU2VydmVyU2lkZUluSlNfYW5kX0NoZWNrUHJvYmxlbXMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIHRleHQgPSA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+OyA8JT1cImFcIiU+IDwlPVwiYlwiJT4gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjwlPVwiY1wiJT4gPC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRFcXVhbHMoInRyYW5zbGF0ZWQgY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiwgIiAgICAgICAgIHZhciB0ZXh0ID0gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fXzsgXyR0YWdfX18gXyR0YWdfX18gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fX18kdGFnX19fICIsdHJhbnNsYXRlZCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPCUiKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIiU+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidmFyIGRyb3BwZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoInZhciB0ZXh0ID0gIikgPiAtMSk7Ci0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdE1hbmdsZU11bHRpcGxlTWl4ZWRTZXJ2ZXJTaWRlSW5KU3dpdGhYTUxjb21tZW50X2FuZF9DaGVja1Byb2JsZW1zKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IDwhLS0gXG52YXIgdGV4dCA9IDw/IHNlcnZlck9iamVjdC5nZXRUZXh0KCkgPz47IDwlPVwiYVwiJT4gPCU9XCJiXCIlPiA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+PCU9XCJjXCIlPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydEVxdWFscygidHJhbnNsYXRlZCBjb250ZW50cyBub3QgYXMgZXhwZWN0ZWQiLCAiICAgICAgICAgICAgICBcbnZhciB0ZXh0ID0gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fXzsgXyR0YWdfX18gXyR0YWdfX18gXyR0YWdfX19fX19fX19fX19fX19fX19fX19fX18kdGFnX19fICIsdHJhbnNsYXRlZCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPCUiKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIiU+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgidmFyIGRyb3BwZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoInZhciB0ZXh0ID0gIikgPiAtMSk7Ci0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdE1hbmdsZU11bHRpcGxlTWl4ZWRTZXJ2ZXJTaWRlSW5KU3dpdGhYTUxjb21tZW50T25TYW1lTGluZSgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICI8c2NyaXB0PiA8IS0tIHZhciB0ZXh0ID0gPD8gc2VydmVyT2JqZWN0LmdldFRleHQoKSA/PjsgPCU9XCJhXCIlPiA8JT1cImJcIiU+IDw/IHNlcnZlck9iamVjdC5nZXRUZXh0KCkgPz48JT1cImNcIiU+IDwvc2NyaXB0PiIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdGVkIGNvbnRlbnRzIG5vdCBhcyBleHBlY3RlZCIsCi0JCQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix0cmFuc2xhdGVkKTsKLQkJYXNzZXJ0VHJ1ZSgidHJhbnNsYXRpb24gZW1wdHkiLCB0cmFuc2xhdGVkLmxlbmd0aCgpID4gNSk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPD8iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIj8+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8JSIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiJT4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVNdWx0aXBsZU1peGVkU2VydmVyU2lkZUFuZENsaWVudFRhZ0luSlNfYW5kX0NoZWNrUHJvYmxlbXMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIHRleHQgPSA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+OyA8JT1cImFcIiU+IDwlPVwiYlwiJT4gPHNlcnZlcjp0YWcvPiA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+PCU9XCJjXCIlPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydEVxdWFscygidHJhbnNsYXRlZCBjb250ZW50cyBub3QgYXMgZXhwZWN0ZWQiLCAiICAgICAgICAgdmFyIHRleHQgPSBfJHRhZ19fX19fX19fX19fX19fX19fX19fX19fOyBfJHRhZ19fXyBfJHRhZ19fXyBfJHRhZ19fX19fX19fIF8kdGFnX19fX19fX19fX19fX19fX19fX19fX19fJHRhZ19fXyAiLHRyYW5zbGF0ZWQpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8PyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPz4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RNYW5nbGVNdWx0aXBsZU1peGVkU2VydmVyU2lkZUFuZENsaWVudFRhZ0luSlNfYW5kX0NoZWNrUHJvYmxlbXMyKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5qc3AiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD4gdmFyIHRleHQgPSA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+OyA8JT1cImFcIiU+IDwlPVwiYlwiJT4gPHNlcnZlcjp0YWcvPiA8PyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpID8+PCU9XCJjXCIlPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydEVxdWFscygidHJhbnNsYXRlZCBjb250ZW50cyBub3QgYXMgZXhwZWN0ZWQiLCAiICAgICAgICAgdmFyIHRleHQgPSBfJHRhZ19fX19fX19fX19fX19fX19fX19fX19fOyBfJHRhZ19fXyBfJHRhZ19fXyBfJHRhZ19fX19fX19fIF8kdGFnX19fX19fX19fX19fX19fX19fX19fX19fJHRhZ19fXyAiLHRyYW5zbGF0ZWQpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCI8PyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInNlcnZlci1zaWRlIHNjcmlwdCBibG9jayBpbmNsdWRlZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiPz4iKSA8IDApOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWQiLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInZhciBkcm9wcGVkIiwgdHJhbnNsYXRlZC5pbmRleE9mKCJ2YXIgdGV4dCA9ICIpID4gLTEpOwotCQlhc3NlcnRUcnVlKCJwcm9ibGVtcyBmb3VuZCBpbiB0cmFuc2xhdGlvbiAiLCB0cmFuc2xhdGlvbi5nZXRQcm9ibGVtcygpLmlzRW1wdHkoKSk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RKdXN0Q2xpZW50VGFnSW5KUygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICI8c2NyaXB0PjxjdXN0b206dGFnIC8+PC9zY3JpcHQ+Iik7Ci0JCWFzc2VydE5vdE51bGwoIm1pc3NpbmcgdGVzdCBtb2RlbCIsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQotCQkvLyBkbyB0cmFuc2xhdGlvbgotCQlKc1RyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnkuc2V0dXBBZGFwdGVyRmFjdG9yeShzdHJ1Y3R1cmVkTW9kZWwpOwotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUlKc1RyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpzVHJhbnNsYXRpb24oZmFsc2UpOwotCQlTdHJpbmcgdHJhbnNsYXRlZCA9IHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0cmFuc2xhdGlvbiBlbXB0eSIsIHRyYW5zbGF0ZWQubGVuZ3RoKCkgPiA1KTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI8IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIvIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI+IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBub3QgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmxlbmd0aCgpICE9IDApOyAKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEp1c3RTZXJ2ZXIxU2lkZUluSlMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlTdHJpbmcgZmlsZU5hbWUgPSBnZXROYW1lKCkgKyAiLmh0bWwiOwotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldFNoYXJlZE1vZGVsKGZpbGVOYW1lLCAiPHNjcmlwdD48JT0gJT48L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjwlIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCIlPiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgbm90IGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5sZW5ndGgoKSAhPSAwKTsgCi0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RKdXN0U2VydmVyMlNpZGVJbkpTKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+PD8gISEhISEhISEhISEhISEgPz48L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJzZXJ2ZXItc2lkZSBzY3JpcHQgYmxvY2sgaW5jbHVkZWRcbiIgKyB0cmFuc2xhdGVkLCB0cmFuc2xhdGVkLmluZGV4T2YoIjw/IikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgic2VydmVyLXNpZGUgc2NyaXB0IGJsb2NrIGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5pbmRleE9mKCI/PiIpIDwgMCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgbm90IGluY2x1ZGVkXG4iICsgdHJhbnNsYXRlZCwgdHJhbnNsYXRlZC5sZW5ndGgoKSAhPSAwKTsgCi0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RMZWFkaW5nWE1MQ29tbWVudCgpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICIgPHNjcmlwdD4gPCEtLSAgPC9zY3JpcHQ+ICIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCIgICAgICAgICAgICAgICAgIiwgdHJhbnNsYXRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RYTUxDb21tZW50KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0TmFtZSgpICsgIi5odG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRTaGFyZWRNb2RlbChmaWxlTmFtZSwgIjxzY3JpcHQ+IGlmKGEpIDwhLS0gLS0+IDwvc2NyaXB0PiIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gZG8gdHJhbnNsYXRpb24KLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5LnNldHVwQWRhcHRlckZhY3Rvcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJSnNUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpzVHJhbnNsYXRpb24uY2xhc3MpOwotCQlJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsKLQkJU3RyaW5nIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbi5nZXRKc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCIgICAgICAgICBpZihhKSA8IS0tIC0tPiAiLCB0cmFuc2xhdGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdENEQVRBSW5KUygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCVN0cmluZyBmaWxlTmFtZSA9IGdldE5hbWUoKSArICIuaHRtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0U2hhcmVkTW9kZWwoZmlsZU5hbWUsICI8c2NyaXB0PiB2YXIgdGV4dCA9IDwhW0NEQVRBWyBzZXJ2ZXJPYmplY3QuZ2V0VGV4dCgpIF1dPiA8L3NjcmlwdD4iKTsKLQkJYXNzZXJ0Tm90TnVsbCgibWlzc2luZyB0ZXN0IG1vZGVsIiwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCi0JCS8vIGRvIHRyYW5zbGF0aW9uCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCVN0cmluZyB0cmFuc2xhdGVkID0gdHJhbnNsYXRpb24uZ2V0SnNUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRyYW5zbGF0aW9uIGVtcHR5IiwgdHJhbnNsYXRlZC5sZW5ndGgoKSA+IDUpOwotCQlhc3NlcnRUcnVlKCJDREFUQSBzdGFydCBmb3VuZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiQ0RBVEEiKSA8IDApOwotCQlhc3NlcnRUcnVlKCJDREFUQSBzdGFydCBmb3VuZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiWyIpIDwgMCk7Ci0JCWFzc2VydFRydWUoIkNEQVRBIGVuZCBmb3VuZCIsIHRyYW5zbGF0ZWQuaW5kZXhPZigiXSIpIDwgMCk7Ci0JCWFzc2VydFRydWUoInByb2JsZW1zIGZvdW5kIGluIHRyYW5zbGF0aW9uICIsIHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCkuaXNFbXB0eSgpKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDM0Njg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotDQotPHByb2plY3QNCi0gICAgbmFtZT0idGVzdHN1aXRlIg0KLSAgICBkZWZhdWx0PSJydW4iDQotICAgIGJhc2VkaXI9Ii4iPg0KLSAgICANCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPg0KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPg0KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4NCi0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4NCi0NCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiDQotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIg0KLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLkFsbFdlYkNvcmVUZXN0cyIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSINCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+DQotDQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+DQotDQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPg0KLQ0KLQ0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSINCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9IndvcmtzcGFjZSINCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICAgICAgDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4NCi0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4NCi0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+DQotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+DQotICAgICAgICA8dHN0YW1wIC8+DQotICAgICAgICA8ZGVsZXRlPg0KLSAgICAgICAgICAgIDxmaWxlc2V0DQotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ig0KLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4NCi0gICAgICAgIDwvZGVsZXRlPg0KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPg0KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPg0KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4NCi0gICAgICAgIDxkZWxldGUNCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSINCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4NCi0NCi0gICAgPC90YXJnZXQ+DQotDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+DQotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPg0KLQ0KLSAgICAgICAgPGFudA0KLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iDQotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9Ig0KLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgICAgIDwvYW50Pg0KLQ0KLSAgICAgICAgPGNvcHkNCi0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiDQotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIg0KLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4NCi0NCi0gICAgPC90YXJnZXQ+DQotDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPg0KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+DQotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4NCi0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4NCi0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPg0KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+DQotICAgIDwvdGFyZ2V0Pg0KLQ0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+DQotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4NCi0gICAgPHRhcmdldA0KLSAgICAgICAgbmFtZT0icnVuIg0KLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4NCi0gICAgICAgIDxhbnQNCi0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiDQotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9Ig0KLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4NCi0gICAgICAgIDwvYW50Pg0KLSAgICA8L3RhcmdldD4NCi0NCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvdGVzdEZpbGVzL3Rlc3QxLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0RmlsZXMvdGVzdDEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1M2M3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0RmlsZXMvdGVzdDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+Ci08c2NyaXB0PgotZnVuY3Rpb24gYmxhaCgpewotCi0KLQotfQotPC9zY3JpcHQ+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZiYjdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNmMzZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2U0ZDY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jTW9uIERlYyAwNyAwMzoyMzoyNiBFU1QgMjAwOQ0KLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40DQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjcyZmQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQudWksCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLmpmYWNlLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWksCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuc3R5bGUsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJlOTRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMKLUJ1bmRsZS1OYW1lID0gSlNEVCBXZWIgVUkgVGVzdHMKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDIzMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIvPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+SnVuZSAyLCAyMDA2PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIAotYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgCi1iZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgCi1wcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50Ci1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNmNDdhOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE9TR0ktSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RGaWxlcy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmOGJiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1fVUlfU0hPV19UUkFOU0xBVElPTj1TaG93IFRyYW5zbGF0aW9uDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUzNTliNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPD9lY2xpcHNlIHZlcnNpb249IjMuMyI/Pg0KLTxwbHVnaW4+DQotICAgIDxleHRlbnNpb24NCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4NCi0JICAgIDxjb21tYW5kDQotCSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnNob3dUcmFuc2xhdGlvbiINCi0JICAgICAgICAgIG5hbWU9IlNob3cgSmF2YVNjcmlwdCBUcmFuc2xhdGlvbiI+DQotCSAgICA8L2NvbW1hbmQ+DQotCSAgICA8Y29tbWFuZA0KLQkgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5ydW5Db2RlIg0KLQkgICAgICAgICAgbmFtZT0iUnVuIEV4YW1wbGUgSGFuZGxlciI+DQotCSAgICA8L2NvbW1hbmQ+DQotCTwvZXh0ZW5zaW9uPg0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5iaW5kaW5ncyI+DQotICAgICAgPCEtLSAgd2luMzI6ICBNMT1DVFJMLCAgICBNMj1TSElGVCwgTTM9QUxULCBNND0tDQotICAgICAgICAgICAgY2FyYm9uOiBNMT1DT01NQU5ELCBNMj1TSElGVCwgTTM9QUxULCBNND1DVFJMDQotICAgICAgICAgICAgZ3RrOiA/IA0KLSAgICAgIC0tPg0KLQkJPGtleQ0KLQkJCXNlcXVlbmNlPSJNMStNMis4Ig0KLQkJCWNvbnRleHRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHJ1Y3R1cmVkVGV4dEVkaXRvclNjb3BlIg0KLQkJCWNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnNob3dUcmFuc2xhdGlvbiINCi0JCQlzY2hlbWVJZD0ib3JnLmVjbGlwc2UudWkuZGVmYXVsdEFjY2VsZXJhdG9yQ29uZmlndXJhdGlvbiIvPg0KLQkJPGtleQ0KLQkJCXNlcXVlbmNlPSJNMStNMis3Ig0KLQkJCWNvbnRleHRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuamF2YUVkaXRvclNjb3BlIg0KLQkJCWNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnJ1bkNvZGUiDQotCQkJc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iLz4NCi0JPC9leHRlbnNpb24+DQotICAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzIj4NCi0gICAgICAgPGhhbmRsZXINCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy50cmFuc2xhdGlvbi5TaG93VHJhbnNsYXRpb25IYW5kbGVyIg0KLSAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5zaG93VHJhbnNsYXRpb24iLz4NCi0gICAgICAgPGhhbmRsZXINCi0gICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy50cmFuc2xhdGlvbi5SdW5Db2RlSGFuZGxlciINCi0gICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIucnVuQ29kZSIvPg0KLQk8L2V4dGVuc2lvbj4NCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYmluZGluZ3MiPg0KLSAgICAgIDwhLS0gIHdpbjMyOiAgTTE9Q1RSTCwgICAgTTI9U0hJRlQsIE0zPUFMVCwgTTQ9LQ0KLSAgICAgICAgICAgIGNhcmJvbjogTTE9Q09NTUFORCwgTTI9U0hJRlQsIE0zPUFMVCwgTTQ9Q1RSTA0KLSAgICAgICAgICAgIGd0azogPyANCi0gICAgICAtLT4NCi0JCTxrZXkNCi0JCQlzZXF1ZW5jZT0iTTErTTIrOCINCi0JCQljb250ZXh0SWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LnVpLmphdmFzY3JpcHRWaWV3U2NvcGUiDQotCQkJY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuZXhlY3V0ZUFyYml0cmFyeVNuaXBwZXQiDQotCQkJc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iLz4NCi0JPC9leHRlbnNpb24+DQotICAgIDxleHRlbnNpb24NCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4NCi0JICAgIDxjb21tYW5kDQotCSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmV4ZWN1dGVBcmJpdHJhcnlTbmlwcGV0Ig0KLQkgICAgICAgICAgbmFtZT0iJV9VSV9SVU4iLz4NCi0JPC9leHRlbnNpb24+DQotPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3NGYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMiOwotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEFjdGl2YXRvcigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BbGxXZWJVSVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BbGxXZWJVSVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNmMyN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWxsV2ViVUlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuZm9ybWF0LkZvcm1hdHRpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuc3R5bGUuU3R5bGVUZXN0czsKLQotcHVibGljIGNsYXNzIEFsbFdlYlVJVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIEFsbFdlYlVJVGVzdHMoKSB7Ci0JCXN1cGVyKCJKU0RUIFdlYiBVSSBUZXN0cyIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgiSlNEVCBXZWIgVUkgVGVzdHMiKTsKLQkJLy8gJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3R5bGVUZXN0cy5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3QoRm9ybWF0dGluZ1Rlc3RzLnN1aXRlKCkpOwotCQkvLyAkSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9mb3JtYXQvRm9ybWF0dGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9mb3JtYXQvRm9ybWF0dGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZDExMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvZm9ybWF0L0Zvcm1hdHRpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLkZvcm1hdHRpbmdDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLkZvcm1hdHRpbmdDb250ZXh0UHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlckV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JRm9ybWF0dGluZ0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLkphdmFTY3JpcHRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLmphdmFzY3JpcHQuSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy5pbnRlcm5hbC5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuaW50ZXJuYWwuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBGb3JtYXR0aW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlc2UgdGVzdHMgd2lsbCB1c2UKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIkZvcm1hdHRpbmdUZXN0cyI7Ci0JCi0JLyoqCi0JICogVGhlIGxvY2F0aW9uIG9mIHRoZSB0ZXN0aW5nIGZpbGVzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfRklMRVMgPSAiL3Rlc3RGaWxlcy9mb3JtYXR0aW5nIjsKLQkKLQkvKioKLQkgKiBUaGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGUgdGVzdHMgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZlByb2plY3Q7Ci0JCi0JLyoqCi0JICogPHA+RGVmYXVsdCBjb25zdHJ1Y3RvcjxwPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgRm9ybWF0dGluZ1Rlc3RzKCkgewotCQlzdXBlcigiRm9ybWF0dGluZyBUZXN0cyIpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgdGVzdCBuYW1lLjwvcD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGlzIHRlc3QgcnVuIHNob3VsZCBoYXZlLgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgRm9ybWF0dGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Vc2UgdGhpcyBtZXRob2QgdG8gYWRkIHRoZXNlIHRlc3RzIHRvIGEgbGFyZ2VyIHRlc3Qgc3VpdGUgc28gc2V0IHVwCi0JICogYW5kIHRlYXIgZG93biBjYW4gYmUgcGVyZm9ybWVkPC9wPgotCSAqIAotCSAqIEByZXR1cm4gYSB7QGxpbmsgVGVzdFNldHVwfSB0aGF0IHdpbGwgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhpcyBjbGFzcwotCSAqIHdpdGggc2V0IHVwIGFuZCB0ZWFyIGRvd24uCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgdHMgPSBuZXcgVGVzdFN1aXRlKEZvcm1hdHRpbmdUZXN0cy5jbGFzcywgIkZvcm1hdHRpbmcgVGVzdHMiKTsKLQkJcmV0dXJuIG5ldyBGb3JtYXR0aW5nVGVzdHNTZXR1cCh0cyk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0RXZlbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QwLmh0bWwiLCAidGVzdDAuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRKU1BTY3JpcHRFdmVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0vLwkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MS5qc3AiLCAidGVzdDEuanNwIiwgbmV3IEpTRFRTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbldyYXBwZWRXaXRoSFRNTENvbW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QyLmh0bWwiLCAidGVzdDItZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25XcmFwcGVkV2l0aEhUTUxDb21tZW50V2l0aEludmFsaWRKUygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDMuaHRtbCIsICJ0ZXN0My5odG1sIiwgbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTRFQoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRIVE1MU2NyaXB0UmVnaW9uV2l0aEp1c3RFbmRIVE1MQ29tbWVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDQuaHRtbCIsICJ0ZXN0NC1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbldpdGhKdXN0U3RhcnRIVE1MQ29tbWVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDUuaHRtbCIsICJ0ZXN0NS1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdF9XaXRoSFRNTFRhZ0luU3RyaW5nKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0Ni5odG1sIiwgInRlc3Q2LWZtdC5odG1sIiwgbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTRFQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRfRm9ybWF0dGluZ0hUTUxCZWZvcmVTY3JpcHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3Q3Lmh0bWwiLCAidGVzdDctZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRfV2l0aEhUTUxUYWdJblN0cmluZ19XaXRoSFRNTENvbW1lbnRTdGFydEFuZEVuZF9zaW1wbGUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3Q4Lmh0bWwiLCAidGVzdDgtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRfV2l0aEhUTUxUYWdJblN0cmluZ19XaXRoSFRNTENvbW1lbnRTdGFydEFuZEVuZF9hZHZhbmRlZCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdDkuaHRtbCIsICJ0ZXN0OS1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbldyYXBwZWRXaXRoSFRNTENvbW1lbnRfVGV4dEluTGVhZGluZ0NvbW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QxMC5odG1sIiwgInRlc3QxMC1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbldyYXBwZWRXaXRoSFRNTENvbW1lbnRfVGV4dEluVHJhaWxpbmdDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0MTEuaHRtbCIsICJ0ZXN0MTEtZm10Lmh0bWwiLCBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNEVCgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEhUTUxTY3JpcHRSZWdpb25XcmFwcGVkV2l0aEhUTUxDb21tZW50X1RleHRJbkxlYWRpbmdDb21tZW50X2FuZF9UZXh0SW5UcmFpbGluZ0NvbW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QxMi5odG1sIiwgInRlc3QxMi1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbl9BbGxPbk9uZUxpbmUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QxMy5odG1sIiwgInRlc3QxMy1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SFRNTFNjcmlwdFJlZ2lvbl9BbGxPbk9uZUxpbmVfTGVhZGluZ0NvbW1lbnQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3QxNC5odG1sIiwgInRlc3QxNC1mbXQuaHRtbCIsIG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU0RUKCkpOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gYmVmb3JlUGF0aAotCSAqIEBwYXJhbSBhZnRlclBhdGgKLQkgKiBAcGFyYW0gY29uZmlndXJhdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQuVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTCNmb3JtYXRBbmRBc3NlcnRFcXVhbHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQkJCWJlZm9yZU1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkobmV3IEpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSgpKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCS8vbm9ybWFsaXplIGNvbnRlbnRzCi0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gYmVmb3JlTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlTdHJpbmcgbm9ybWFsaXplZENvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlub3JtYWxpemVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKG5vcm1hbGl6ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCW5vcm1hbGl6ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2Uobm9ybWFsaXplZENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCWRvY3VtZW50LnNldChub3JtYWxpemVkQ29udGVudHMpOwotCQkJCi0JCQlJU291cmNlVmlld2VyIHZpZXdlciA9IGdldENvbmZpZ3VyZWRWaWV3ZXIoZG9jdW1lbnQsIGNvbmZpZ3VyYXRpb24pOwotCQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGdldCB2aWV3ZXIgdG8gcnVuIHRlc3QiLCB2aWV3ZXIpOwotCQkJCi0JCQkvL2RvIHRoZSBmb3JtYXQKLQkJCUlDb250ZW50Rm9ybWF0dGVyRXh0ZW5zaW9uIGZvcm1hdHRlciA9IChJQ29udGVudEZvcm1hdHRlckV4dGVuc2lvbikgY29uZmlndXJhdGlvbi5nZXRDb250ZW50Rm9ybWF0dGVyKHZpZXdlcik7Ci0JCQlJRm9ybWF0dGluZ0NvbnRleHQgZkNvbnRleHQgPSBuZXcgRm9ybWF0dGluZ0NvbnRleHQoKTsKLQkJCVJlZ2lvbiByZWdpb24gPSBuZXcgUmVnaW9uKDAsIGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJCWZDb250ZXh0LnNldFByb3BlcnR5KEZvcm1hdHRpbmdDb250ZXh0UHJvcGVydGllcy5DT05URVhUX0RPQ1VNRU5ULCBCb29sZWFuLnZhbHVlT2YodHJ1ZSkpOwotCQkJZkNvbnRleHQuc2V0UHJvcGVydHkoRm9ybWF0dGluZ0NvbnRleHRQcm9wZXJ0aWVzLkNPTlRFWFRfUkVHSU9OLCByZWdpb24pOwotCQkJZm9ybWF0dGVyLmZvcm1hdChkb2N1bWVudCwgZkNvbnRleHQpOwotCQkJCi0JCQkvL2dldCB0aGUgY29udGVudHMKLQkJCVN0cmluZyBhY3R1YWxDb250ZW50cyA9IGJlZm9yZU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBhZnRlck1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCi0JCQkvKiBNYWtlIHNvbWUgYWRqdXN0bWVudHMgdG8gaWdub3JlIGNyb3NzIHBsYXRmb3JtIGxpbmUgZGVsaW1pdGVyIGlzc3VlcyAqLwotCQkJZXhwZWN0ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCWV4cGVjdGVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGV4cGVjdGVkQ29udGVudHMsICJcciIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCQotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQuXG5FeHBlY3RlZCBDb250ZW50czpcbiIKLQkJCQkJKyBleHBlY3RlZENvbnRlbnRzICsgIlxuQWN0dWFsIENvbnRlbnRzOlxuIiArIGFjdHVhbENvbnRlbnRzLAotCQkJCQlTdHJpbmdVdGlscy5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkQ29udGVudHMsIGFjdHVhbENvbnRlbnRzKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWJlZm9yZU1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy9pZ25vcmUKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vaWdub3JlCi0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYW4gPGNvZGU+SUZpbGU8L2NvZGU+Ci0JICogZm9yIGl0LCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JRmlsZTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA8Y29kZT5uYW1lPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIElGaWxlIGdldEZpbGUoU3RyaW5nIG5hbWUpIHsKLQkJSUZpbGUgZmlsZSA9IGZQcm9qZWN0LmdldEZpbGUobmFtZSk7Ci0JCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgZmlsZSArICIgY2FuIG5vdCBiZSBmb3VuZCIsIGZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdEZvcm1hdFByb2Nlc3NvckNTUykKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KGZpbmFsIFN0cmluZyBwYXRoKSB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKHBhdGgpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvKSB7Ci0JCQlpby5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBkb2N1bWVudCB7QGxpbmsgSURvY3VtZW50fSB0byBkaXNwbGF5IGluIHRoZSBkdW1teSB2aWV3ZXIKLQkgKiBAcGFyYW0gY29uZmlndXJhdGlvbiB7QGxpbmsgU291cmNlVmlld2VyQ29uZmlndXJhdGlvbn0gdG8gY29uZmlndXJlIHRoZSBkdW1teSB2aWV3ZXIgd2l0aAotCSAqIEByZXR1cm4gYSBjb25maWd1cmVkIHtAbGluayBJU291cmNlVmlld2VyfSB1c2luZyB0aGUgZ2l2ZW4gcGFyYW1ldGVycwotCSAqLwotCXByaXZhdGUgc3RhdGljIElTb3VyY2VWaWV3ZXIgZ2V0Q29uZmlndXJlZFZpZXdlcihJRG9jdW1lbnQgZG9jdW1lbnQsIFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQlJU291cmNlVmlld2VyIHZpZXdlciA9IG51bGw7Ci0JCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBnZXQgY3VycmVudCBkaXNwbGF5IHRvIHJ1biB0ZXN0IHdpdGguIiwgRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCi0JCVNoZWxsIHNoZWxsID0gbnVsbDsKLQotCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCX0KLQkJQ29tcG9zaXRlIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJdmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJdmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQkJdmlld2VyLmNvbmZpZ3VyZShjb25maWd1cmF0aW9uKTsKLQkJCi0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCQotCS8qKgotCSAqIDxwPlRoaXMgaW5uZXIgY2xhc3MgaXMgdXNlZCB0byBkbyBzZXQgdXAgYW5kIHRlYXIgZG93biBiZWZvcmUgYW5kCi0JICogYWZ0ZXIgKHJlc3BlY3RpdmVseSkgYWxsIHRlc3RzIGluIHRoZSBpbmNsb3NpbmcgY2xhc3MgaGF2ZSBydW4uPC9wPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNsYXNzIEZvcm1hdHRpbmdUZXN0c1NldHVwIGV4dGVuZHMgVGVzdFNldHVwIHsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkJCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBGb3JtYXR0aW5nVGVzdHNTZXR1cChUZXN0IHRlc3QpIHsKLQkJCXN1cGVyKHRlc3QpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYmVmb3JlIGFsbCBvZiB0aGUgdGVzdHM8L3A+Ci0JCSAqIAotCQkgKiBAc2VlIGp1bml0LmV4dGVuc2lvbnMuVGVzdFNldHVwI3NldFVwKCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkvL2luaXQgdGVzdGluZyByZXNvdXJjZXMKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXSB7SmF2YVNjcmlwdENvcmUuTkFUVVJFX0lEfSk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgUFJPSkVDVF9OQU1FKTsKLQkJCQotCQkJLy9zZXQgbm9uLWludGVyYWN0aXZlCi0JCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFKTsKLQkJCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKSB7Ci0JCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCQl9IGVsc2UgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9ICJmYWxzZSI7Ci0JCQl9Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCAidHJ1ZSIpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9kZWxldGUgdGVzdCBwcm9qZWN0cwotCQkJZlByb2plY3QuZGVsZXRlKHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCi0JCQkvL3Jlc2V0IG5vbi1pbnRlcmFjdGl2ZQotCQkJaWYgKHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSAhPSBudWxsKSB7Ci0JCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL2ludGVybmFsL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9pbnRlcm5hbC9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjNlNTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL2ludGVybmFsL1Byb2plY3RVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLkFjdGl2YXRvcjsKLQotLyoqCi0gKiBTb21lIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgcHJvamVjdHMsIGFuZCBjb3B5aW5nIGZpbGVzIGludG8gdGhlIHdvcmtzcGFjZS4KLSAqIENvcGllZCBmcm9tIEpTUCBVSSB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQotCXN0YXRpYyB2b2lkIF9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsKLQkJfQotCX0KLQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIgKGVnLgotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aAotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlIChlZy4KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvaW50ZXJuYWwvU3RyaW5nVXRpbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL2ludGVybmFsL1N0cmluZ1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMTUwMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvaW50ZXJuYWwvU3RyaW5nVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotLyoqCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlN0cmluZ0NvbXBhcmVVdGlsCi0gKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlscwotICovCi1wdWJsaWMgY2xhc3MgU3RyaW5nVXRpbHMgewotCi0JLyoqCi0JICogUmVwbGFjZSBtYXRjaGluZyBsaXRlcmFsIHBvcnRpb25zIG9mIGEgc3RyaW5nIHdpdGggYW5vdGhlciBzdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyByZXBsYWNlKFN0cmluZyBhU3RyaW5nLCBTdHJpbmcgc291cmNlLCBTdHJpbmcgdGFyZ2V0KSB7Ci0JCWlmIChhU3RyaW5nID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJU3RyaW5nIG5vcm1hbFN0cmluZyA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWludCBsZW5ndGggPSBhU3RyaW5nLmxlbmd0aCgpOwotCQlpbnQgcG9zaXRpb24gPSAwOwotCQlpbnQgcHJldmlvdXMgPSAwOwotCQlpbnQgc3BhY2VyID0gc291cmNlLmxlbmd0aCgpOwotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKG5vcm1hbFN0cmluZyk7Ci0JCXdoaWxlIChwb3NpdGlvbiArIHNwYWNlciAtIDEgPCBsZW5ndGggJiYgYVN0cmluZy5pbmRleE9mKHNvdXJjZSwgcG9zaXRpb24pID4gLTEpIHsKLQkJCXBvc2l0aW9uID0gYVN0cmluZy5pbmRleE9mKHNvdXJjZSwgcHJldmlvdXMpOwotCQkJc2IuYXBwZW5kKG5vcm1hbFN0cmluZyk7Ci0JCQlzYi5hcHBlbmQoYVN0cmluZy5zdWJzdHJpbmcocHJldmlvdXMsIHBvc2l0aW9uKSk7Ci0JCQlzYi5hcHBlbmQodGFyZ2V0KTsKLQkJCXBvc2l0aW9uICs9IHNwYWNlcjsKLQkJCXByZXZpb3VzID0gcG9zaXRpb247Ci0JCX0KLQkJc2IuYXBwZW5kKGFTdHJpbmcuc3Vic3RyaW5nKHBvc2l0aW9uLCBhU3RyaW5nLmxlbmd0aCgpKSk7Ci0JCW5vcm1hbFN0cmluZyA9IHNiLnRvU3RyaW5nKCk7Ci0KLQkJcmV0dXJuIG5vcm1hbFN0cmluZzsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoU3RyaW5nIHN0cmluZzEsIFN0cmluZyBzdHJpbmcyKSB7Ci0KLQkJaWYgKHN0cmluZzEgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKHN0cmluZzIgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmdSZWFkZXIgczFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzEpOwotCQlTdHJpbmdSZWFkZXIgczJSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzIpOwotCi0JCS8vIGFzc3VtZSB0cnVlIHVubGVzcyBmaW5kIGV2aWRlbmNlIHRvIHRoZSBjb250cmFyeQotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWludCBzMUNoYXIgPSAtMTsKLQkJaW50IHMyQ2hhciA9IC0xOwotCQlkbyB7Ci0KLQkJCXMxQ2hhciA9IGdldE5leHRDaGFyKHMxUmVhZGVyKTsKLQotCQkJczJDaGFyID0gZ2V0TmV4dENoYXIoczJSZWFkZXIpOwotCi0JCQlpZiAoczFDaGFyICE9IHMyQ2hhcikgewotCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdoaWxlIChzMUNoYXIgIT0gLTEgJiYgczJDaGFyICE9IC0xKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCBnZXROZXh0Q2hhci4KLQkgKiBAcGFyYW0gczFSZWFkZXIKLQkgKiBAcmV0dXJuIGNoYXIKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3N0eWxlL1N0eWxlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3N0eWxlL1N0eWxlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE4YjczZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9zdHlsZS9TdHlsZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuc3R5bGU7DQotDQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07DQotDQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5JSmF2YVNjcmlwdFByb2plY3Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSmF2YVNjcmlwdENvcmU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuTGlicmFyeVN1cGVyVHlwZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwuY29yZS5KYXZhUHJvamVjdDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQubGF1bmNoaW5nLkphdmFSdW50aW1lOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5pbnRlcm5hbC5wcm9qZWN0LkpzV2ViTmF0dXJlOw0KLQ0KLS8qKg0KLSAqIEBhdXRob3Igbml0aW4NCi0gKiANCi0gKi8NCi1wdWJsaWMgY2xhc3MgU3R5bGVUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsNCi0NCi0JLyoqDQotCSAqIA0KLQkgKi8NCi0JcHVibGljIFN0eWxlVGVzdHMoKSB7DQotCQlzdXBlcigpOw0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKi8NCi0JcHVibGljIFN0eWxlVGVzdHMoU3RyaW5nIG5hbWUpIHsNCi0JCXN1cGVyKG5hbWUpOw0KLQl9DQotDQotCXB1YmxpYyB2b2lkIHRlc3RLZXl3b3JkU3R5bGUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSBnZXROYW1lKCk7DQotCQlTdHJpbmcgZmlsZU5hbWUgPSBwcm9qZWN0TmFtZSArICIuaHRtbCI7DQotCQlTdHJpbmcgY29udGVudHMgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdD4gdmFyIHBhcmFtcyA9IFwic29tZUJhZFN0cmluZ1wiLnN1YnN0cmluZygxLDIsMyw0KTtcbnBhcmFobmFzLnNoaWZ0KCk7PC9zY3JpcHQ+PC9oZWFkPjxib2R5PiA8L2JvZHk+PC9odG1sPiI7DQotDQotCQkvLyBDcmVhdGUgdGhlIEphdmFTY3JpcHQgcHJvamVjdA0KLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdE5hbWUpOw0KLQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5ldyBTdHJpbmdbXXtKYXZhU2NyaXB0Q29yZS5OQVRVUkVfSUR9KTsNCi0JCUlQcm9qZWN0IGlQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsNCi0JCWlQcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQlpUHJvamVjdC5vcGVuKG51bGwpOw0KLQ0KLQkJLy8gU2V0dXAgdGhlIEphdmFTY3JpcHQgcHJvamVjdCB3aXRoIFdlYiBzdXBwb3J0DQotCQlJSmF2YVNjcmlwdFByb2plY3QgcHJvamVjdCA9IEphdmFTY3JpcHRDb3JlLmNyZWF0ZShpUHJvamVjdCk7DQotCQlwcm9qZWN0LnNldFJhd0luY2x1ZGVwYXRoKG51bGwsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJTGlicmFyeVN1cGVyVHlwZSBzdXBlclR5cGUgPSBuZXcgTGlicmFyeVN1cGVyVHlwZShuZXcgUGF0aChKYXZhUnVudGltZS5ERUZBVUxUX1NVUEVSX1RZUEVfTElCUkFSWSksIHByb2plY3QsIEphdmFSdW50aW1lLkRFRkFVTFRfU1VQRVJfVFlQRSk7DQotCQkoKEphdmFQcm9qZWN0KSBwcm9qZWN0KS5zZXRDb21tb25TdXBlclR5cGUoc3VwZXJUeXBlKTsNCi0JCW5ldyBKc1dlYk5hdHVyZShpUHJvamVjdCwgbnVsbCkuY29uZmlndXJlKCk7DQotDQotCQkvLyBjcmVhdGUgdGVzdCBmaWxlDQotCQlJRmlsZSBmaWxlID0gaVByb2plY3QuZ2V0RmlsZShmaWxlTmFtZSk7DQotCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY29udGVudHMuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCksIGZpbGUpOw0KLQkJYXNzZXJ0Tm90TnVsbCgiZWRpdG9yIGZhaWxlZCB0byBvcGVuIiwgZWRpdG9yKTsNCi0JCUNvbnRyb2wgY29udHJvbCA9IChDb250cm9sKSBlZGl0b3IuZ2V0QWRhcHRlcihDb250cm9sLmNsYXNzKTsNCi0JCWFzc2VydE5vdE51bGwoImVkaXRvciBkaWQgbm90IHJldHVybiBhIENvbnRyb2wgYWRhcHRlciIsIGNvbnRyb2wpOw0KLQkJYXNzZXJ0VHJ1ZSgiZWRpdG9yIENvbnRyb2wgYWRhcHRlciBpcyBub3QgYSBTdHlsZWRUZXh0IHdpZGdldCIsIGNvbnRyb2wgaW5zdGFuY2VvZiBTdHlsZWRUZXh0KTsNCi0JCWludCB2YXJJbmRleCA9IGNvbnRlbnRzLmluZGV4T2YoInZhciIpOw0KLQkJU3R5bGVSYW5nZVtdIHN0eWxlUmFuZ2VzID0gKChTdHlsZWRUZXh0KSBjb250cm9sKS5nZXRTdHlsZVJhbmdlcyh2YXJJbmRleCwgMyk7DQotCQlhc3NlcnRUcnVlKCJubyBzdHlsZSByYW5nZSBmb3IgJ3Zhcicga2V5d29yZCIsIHN0eWxlUmFuZ2VzLmxlbmd0aCA+IDApOw0KLQkJYXNzZXJ0Tm90TnVsbCgibm8gZm9yZWdyb3VuZCBjb2xvciBmb3IgJ3Zhcicga2V5d29yZCIsIHN0eWxlUmFuZ2VzWzBdLmZvcmVncm91bmQpOw0KLQkJYXNzZXJ0Tm90U2FtZSgiZm9yZWdyb3VuZCBjb2xvciBoYXMgc2FtZSBSR0IgYXMgYmxhY2siLCBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxBQ0spLmdldFJHQigpLCBzdHlsZVJhbmdlc1swXS5mb3JlZ3JvdW5kLmdldFJHQigpKTsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9KU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL0pTVHJhbnNsYXRpb25FZGl0b3JJbnB1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWJmMGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL0pTVHJhbnNsYXRpb25FZGl0b3JJbnB1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy50cmFuc2xhdGlvbjsNCi0NCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2U7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQZXJzaXN0YWJsZUVsZW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLmphdmFzY3JpcHQuSUpzVHJhbnNsYXRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRvY3VtZW50SW5wdXRTdHJlYW07DQotDQotLyoqDQotICogQGF1dGhvciBuaXRpbg0KLSAqIA0KLSAqLw0KLXB1YmxpYyBjbGFzcyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQgaW1wbGVtZW50cyBJU3RvcmFnZUVkaXRvcklucHV0IHsNCi0JcHJpdmF0ZSBjbGFzcyBKU1RyYW5zbGF0aW9uU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHsNCi0JCXByaXZhdGUgZmluYWwgSUpzVHJhbnNsYXRpb24gZlRyYW5zbGF0aW9uOw0KLQkJZmluYWwgU3RyaW5nIGZCYXNlTG9jYXRpb247DQotDQotCQlwdWJsaWMgSlNUcmFuc2xhdGlvblN0b3JhZ2UoSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24sIFN0cmluZyBiYXNlTG9jYXRpb24pIHsNCi0JCQlmVHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbjsNCi0JCQlmQmFzZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uOwkJCQ0KLQkJfQ0KLQ0KLQkJLyoNCi0JCSAqIChub24tSmF2YWRvYykNCi0JCSAqIA0KLQkJICogQHNlZQ0KLQkJICogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpDQotCQkgKi8NCi0JCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7DQotCQkJcmV0dXJuIG51bGw7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldENvbnRlbnRzKCkNCi0JCSAqLw0KLQkJcHVibGljIElucHV0U3RyZWFtIGdldENvbnRlbnRzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gew0KLQkJCXJldHVybiBuZXcgRG9jdW1lbnRJbnB1dFN0cmVhbShuZXcgRG9jdW1lbnQoZlRyYW5zbGF0aW9uLmdldEpzVGV4dCgpKSk7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldEZ1bGxQYXRoKCkNCi0JCSAqLw0KLQkJcHVibGljIElQYXRoIGdldEZ1bGxQYXRoKCkgew0KLQkJCXJldHVybiBuZXcgUGF0aChmVHJhbnNsYXRpb24uZ2V0SmF2YVBhdGgoKSk7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQ0KLQkJICovDQotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7DQotCQkJcmV0dXJuIG5ldyBQYXRoKGZCYXNlTG9jYXRpb24pLmxhc3RTZWdtZW50KCkgKyAiLmpzIjsNCi0JCX0NCi0NCi0JCS8qDQotCQkgKiAobm9uLUphdmFkb2MpDQotCQkgKiANCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjaXNSZWFkT25seSgpDQotCQkgKi8NCi0JCXB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7DQotCQkJcmV0dXJuIGZhbHNlOw0KLQkJfQ0KLQl9DQotDQotCXByaXZhdGUgSlNUcmFuc2xhdGlvblN0b3JhZ2UgZlN0b3JhZ2U7DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXB1YmxpYyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQoSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24sIFN0cmluZyBiYXNlTG9jYXRpb24pIHsNCi0JCWZTdG9yYWdlID0gbmV3IEpTVHJhbnNsYXRpb25TdG9yYWdlKHRyYW5zbGF0aW9uLCBiYXNlTG9jYXRpb24pOw0KLQl9DQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2V4aXN0cygpDQotCSAqLw0KLQlwdWJsaWMgYm9vbGVhbiBleGlzdHMoKSB7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykNCi0JICovDQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRJbWFnZURlc2NyaXB0b3IoKQ0KLQkgKi8NCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXROYW1lKCkNCi0JICovDQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsNCi0JCXJldHVybiBmU3RvcmFnZS5nZXROYW1lKCk7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0UGVyc2lzdGFibGUoKQ0KLQkgKi8NCi0JcHVibGljIElQZXJzaXN0YWJsZUVsZW1lbnQgZ2V0UGVyc2lzdGFibGUoKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQjZ2V0U3RvcmFnZSgpDQotCSAqLw0KLQlwdWJsaWMgSVN0b3JhZ2UgZ2V0U3RvcmFnZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCXJldHVybiBmU3RvcmFnZTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRUb29sVGlwVGV4dCgpDQotCSAqLw0KLQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgew0KLQkJcmV0dXJuIGZTdG9yYWdlLmZCYXNlTG9jYXRpb247DQotCX0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvdHJhbnNsYXRpb24vUnVuQ29kZUhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1J1bkNvZGVIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYjgxNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvdHJhbnNsYXRpb24vUnVuQ29kZUhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuVGV4dEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5JQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUZ1bmN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUphdmFTY3JpcHRFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUphdmFTY3JpcHRVbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5KYXZhU2NyaXB0Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLkphdmFTY3JpcHRNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5BU1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uQVNUTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5BU1RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uQVNUVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5Bc3NpZ25tZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLkJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLkV4cHJlc3Npb25TdGF0ZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uRnVuY3Rpb25JbnZvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLkphdmFTY3JpcHRVbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLk9iamVjdExpdGVyYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uT2JqZWN0TGl0ZXJhbEZpZWxkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuZG9tLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uU3RyaW5nTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC5jb3JlLkRvY3VtZW50QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC5pbnRlcm5hbC5jb3JleHQuVmFsaWRhdGVFZGl0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LmludGVybmFsLmNvcmV4dC51dGlsLkphdmFNb2RlbFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5KYXZhRWRpdG9yOwotCi0KLS8qKgotICogQ29ubmVjdGVkIGhhbmRsZXIgZm9yIHdoYXRldmVyIHdlIG5lZWQgaXQgdG8gYmUKLSAqIAotICogSW52b2tlIHdpdGggTTErTTIrNwotICogCi0gKiBAYXV0aG9yIG5pdGluCi0gKi8KLXB1YmxpYyBjbGFzcyBSdW5Db2RlSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgUnVuQ29kZUhhbmRsZXIoKSB7Ci0JfQotCi0KLQlzdGF0aWMgZmluYWwgY2xhc3MgTXlOb2RlVmlzaXRvciBleHRlbmRzIEFTVFZpc2l0b3J7Ci0JCUlKYXZhU2NyaXB0VW5pdCBqc1VuaXQ7Ci0JCVN0cmluZyBjbGFzc05hbWU7Ci0JCXByaXZhdGUgSmF2YVNjcmlwdFVuaXQgY3U7Ci0JCQotCQlwdWJsaWMgTXlOb2RlVmlzaXRvcihJSmF2YVNjcmlwdFVuaXQganNVbml0LCBTdHJpbmcgY2xhc3NOYW1lLCBBU1ROb2RlIGFzdCkgewotCQkJc3VwZXIoKTsKLQkJCXRoaXMuanNVbml0ID0ganNVbml0OwotCQkJdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0JCQl0aGlzLmN1ID0gKEphdmFTY3JpcHRVbml0KSBhc3Q7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChvcmcuZWNsaXBzZS53c3QuanNkdC5jb3JlLmRvbS5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKLS8vCQkJdGhpcy5qc1VuaXQgPSAoSUphdmFTY3JpcHRVbml0KSBub2RlLmdldFJvb3QoKTsKLQkJCUJsb2NrIGJvZHkgPSBub2RlLmdldEJvZHkoKTsKLQkJCXRyeSB7Ci0JCQkJSUphdmFTY3JpcHRFbGVtZW50IGVsZW1lbnQgPSBqc1VuaXQuZ2V0RWxlbWVudEF0KGJvZHkuZ2V0U3RhcnRQb3NpdGlvbigpKTsKLQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGdW5jdGlvbikgewotCQkJCQlJRnVuY3Rpb24gZnVuY3Rpb24gPSAoSUZ1bmN0aW9uKSBlbGVtZW50OwotCQkJCQlpZiAoIWZ1bmN0aW9uLmlzQ29uc3RydWN0b3IoKSAmJiBmdW5jdGlvbi5nZXREaXNwbGF5TmFtZSgpLmVxdWFscygic2F5SGVsbG8iKSkgewotCQkJCQkJSVR5cGUgdHlwZSA9IGZ1bmN0aW9uLmdldERlY2xhcmluZ1R5cGUoKTsKLQkJCQkJCWlmICh0eXBlICE9IG51bGwgLyomJiB0eXBlLmdldERpc3BsYXlOYW1lKCkuZXF1YWxzKGNsYXNzTmFtZSkqLykgewotCQkJCQkJCWN1LnJlY29yZE1vZGlmaWNhdGlvbnMoKTsKLQkJCQkJCQlBU1QgYXN0ID0gbm9kZS5nZXRBU1QoKTsKLQkJCQkJCQkKLS8vCQkJCQkJCVN0cmluZyBuZXdGaWVsZCA9ICJkb2pvLmRlY2xhcmUoXCJ0ZW1wXCIsIG51bGwse2hhbmRsZXIgOiBmdW5jdGlvbigpeyB9fSk7IjsKLQkJCQkJCQlTdHJpbmcgZnVuY3Rpb25MaXRlcmFsID0gImhhbmRsZXIgOiBmdW5jdGlvbihhcmdzKXthbGVydChcIkhlbGxvXCIpO30iOwotCQkJCQkJCU9iamVjdExpdGVyYWxGaWVsZCBmaWVsZCA9IGdldE9iamVjdExpdGVyYWxGaWVsZChmdW5jdGlvbkxpdGVyYWwpOwotCQkJCQkJCQotCQkJCQkJCS8vY3JlYXRpbmcgdGhlIGZ1bmN0aW9uCi0vLwkJCQkJCQlBU1QgcGFyZW50QVNUID0gbm9kZS5nZXRQYXJlbnQoKS5nZXRBU1QoKTsKLS8vCQkJCQkJCUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVjbCA9IHBhcmVudEFTVC5uZXdGdW5jdGlvbkRlY2xhcmF0aW9uKCk7Ci0vLwkJCQkJCQlkZWNsLnNldE5hbWUocGFyZW50QVNULm5ld1NpbXBsZU5hbWUoImhhbmRsZXIiKSk7Ci0vLwkJCQkJCQlCbG9jayBibG9jayA9IHBhcmVudEFTVC5uZXdCbG9jaygpOwotLy8vLwkJCQkJCQlibG9jay5zdGF0ZW1lbnRzKCkuYWRkKHBhcmVudEFTVC5uZXdFeHByZXNzaW9uU3RhdGVtZW50KHBhcmVudEFTVC5uZXdCbG9ja0NvbW1lbnQoKSkpOwotLy8JCQkJCQkJZGVjbC5zZXRCb2R5KGJsb2NrKTsKLQkJCQkJCQlMaXN0IGZpZWxkcyA9ICgoT2JqZWN0TGl0ZXJhbCkobm9kZS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSkpLmZpZWxkcygpOwotCQkJCQkJCQotCQkJCQkJCWZpZWxkcy5hZGQoZmllbGQpOwotLy8JCQkJCQkJbm9kZS5nZXRQYXJlbnQoKS5nZXRCb2R5KCkuc3RhdGVtZW50cygpLmFkZChkZWNsKTsKLQkJCQkJCQkKLS8vCQkJCQkJCVNvdXJjZVR5cGUgc3R5IDsKLS8vCQkJCQkJCXN0eS5jcmVhdGVNZXRob2QoY29udGVudHMsIHNpYmxpbmcsIGZvcmNlLCBtb25pdG9yKQotLy8JCQkJCQkJRXhwcmVzc2lvblN0YXRlbWVudCBzdCA9IHBhcmVudEFTVC5uZXdFeHByZXNzaW9uU3RhdGVtZW50KGRlY2wpOwotCQkJCQkJCQotCQkJCQkJCQotCi0JCQkJCQkJRnVuY3Rpb25JbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBhc3QubmV3RnVuY3Rpb25JbnZvY2F0aW9uKCk7Ci0JCQkJCQkJUXVhbGlmaWVkTmFtZSBuYW1lID0gYXN0Lm5ld1F1YWxpZmllZE5hbWUoYXN0Lm5ld1NpbXBsZU5hbWUoImRvam8iKSxhc3QubmV3U2ltcGxlTmFtZSgiY29ubmVjdCIpKTsvLyROT04tTkxTLTEkCi0JCQkJCQkJbWV0aG9kSW52b2NhdGlvbi5zZXRFeHByZXNzaW9uKG5hbWUpOwotCQkJCQkJCW1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzKCkuYWRkKGFzdC5uZXdTaW1wbGVOYW1lKCJhIikpOwotCQkJCQkJCVN0cmluZ0xpdGVyYWwgbGl0ID0gYXN0Lm5ld1N0cmluZ0xpdGVyYWwoKTsKLQkJCQkJCQlsaXQuc2V0TGl0ZXJhbFZhbHVlKCJhIik7Ci0JCQkJCQkJbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMoKS5hZGQobGl0KTsKLQkJCQkJCQlFeHByZXNzaW9uU3RhdGVtZW50IGV4cHJlc3Npb25TdGF0ZW1lbnQgPSBhc3QubmV3RXhwcmVzc2lvblN0YXRlbWVudChtZXRob2RJbnZvY2F0aW9uKTsKLQkJCQkJCQlib2R5LnN0YXRlbWVudHMoKS5hZGQoZXhwcmVzc2lvblN0YXRlbWVudCk7Ci0JCQkJCQkJCi0JCQkJCQkJVGV4dEVkaXQgZWRpdHM9IGN1LnJld3JpdGUoZ2V0RG9jdW1lbnQoanNVbml0KSwgSmF2YVNjcmlwdENvcmUuZ2V0RGVmYXVsdE9wdGlvbnMoKSk7CQkJCQkJCQotCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCUphdmFNb2RlbFV0aWwuYXBwbHlFZGl0KGpzVW5pdCwgZWRpdHMsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQkJCX0gY2F0Y2ggKFZhbGlkYXRlRWRpdEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCQkJCX0KLQkJCQkJCQkKLQkJCQkJCQkKLS8vCQkJCQkJCWpzVW5pdC5iZWNvbWVXb3JraW5nQ29weShudWxsKTsKLQotCQkJCQkJCS8vIGdldCBzb3VyY2UgYW5kIG1ha2UgY2hhbmdlcyB0byB0aGUgYm9keSBkaXJlY3RseSBpbiB0aGUgYnVmZmVyCi0vLwkJCQkJCQlTdHJpbmcgc291cmNlID0ganNVbml0LmdldEJ1ZmZlcigpLmdldFRleHQoYm9keS5nZXRTdGFydFBvc2l0aW9uKCksIGJvZHkuZ2V0TGVuZ3RoKCkpOwotLy8JCQkJCQkJU3RyaW5nIHRvSW5zZXJ0ID0gIlx0ZG9qby5jb25uZWN0KGEgLGIgLCBjLCBkKTtcbiI7Ci0vLwkJCQkJCQlpbnQgb2Zmc2V0ID0gYm9keS5nZXRTdGFydFBvc2l0aW9uKCkrIGJvZHkuZ2V0TGVuZ3RoKCktMTsKLS8vCQkJCQkJCUlCdWZmZXIgYnVmZmVyID0ganNVbml0LmdldEJ1ZmZlcigpOwotLy8JCQkJCQkJYnVmZmVyLnJlcGxhY2Uob2Zmc2V0LCAwLCB0b0luc2VydCk7Ci0JCQkJCQkJCQkKLQkJCQkJCQkvLyBPUiBidWlsZCB0aGUgc3ludGF4IHVwIHVzaW5nIEFTVCBtYW5pcHVsYXRpb24KLQkJCQkJCQkKLS8vCQkJCQkJCQotCQkJCQkJCQotLy8JCQkJCQkJSW1wb3J0RGVjbGFyYXRpb24gaWQgPSBub2RlQXN0Lm5ld0ltcG9ydERlY2xhcmF0aW9uKCk7Ci0vLwkJCQkJCQkgaWQuc2V0TmFtZShub2RlQXN0Lm5ld05hbWUobmV3IFN0cmluZ1tdIHsiamF2YSIsICJ1dGlsIiwgIlNldCJ9KSk7Ci0vLwkJCQkJCQkgCi0vLwkJCQkJCQkJCUZ1bmN0aW9uSW52b2NhdGlvbiByZXBsYWNlbWVudD0gbm9kZUFzdC5uZXdGdW5jdGlvbkludm9jYXRpb24oKTsKLS8vCQkJCQkJCQkJCi0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgQVNUUmV3cml0ZSByZXdyaXRlciA9IEFTVFJld3JpdGUuY3JlYXRlKG5vZGVBc3QpOwotLy8JCQkJCQkJIAotLy8JCQkJCQkJIHJlcGxhY2VtZW50LnNldE5hbWUoKFNpbXBsZU5hbWUpIHJld3JpdGVyLmNyZWF0ZUNvcHlUYXJnZXQoZnVuY3Rpb24uZ2V0TmFtZSgpKSk7Ci0vLwkJCQkJCQkJcmVwbGFjZW1lbnQuYXJndW1lbnRzKCkuYWRkKG5vZGVBc3QubmV3VGhpc0V4cHJlc3Npb24oKSk7Ci0vLwkJCQkJCQkJcmVwbGFjZW1lbnQuc2V0RXhwcmVzc2lvbigoRXhwcmVzc2lvbikgcmV3cml0ZXIuY3JlYXRlQ29weVRhcmdldChyaWdodCkpOwotLy8JCQkJCQkJCXJld3JpdGVyLnJlcGxhY2UobWV0aG9kLCByZXBsYWNlbWVudCwgbnVsbCk7Ci0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgCi0vLwkJCQkJCQkgVHlwZURlY2xhcmF0aW9uIHRkID0gKFR5cGVEZWNsYXJhdGlvbikgY3UudHlwZXMoKS5nZXQoMCk7Ci0vLwkJCQkJCQkgSVRyYWNrZWROb2RlUG9zaXRpb24gdGRMb2NhdGlvbiA9IHJld3JpdGVyLnRyYWNrKHRkKTsKLS8vCQkJCQkJCSBMaXN0UmV3cml0ZSBscncgPSByZXdyaXRlci5nZXRMaXN0UmV3cml0ZShjdSwgSmF2YVNjcmlwdFVuaXQuVFlQRVNfUFJPUEVSVFkpOwotLy8JCQkJCQkJIGxydy5pbnNlcnRMYXN0KGlkLCBudWxsKTsKLS8vCQkJCQkJCSBJRG9jdW1lbnQgZG9jID0gZ2V0RG9jdW1lbnQoanNVbml0KTsKLS8vCQkJCQkJCSBUZXh0RWRpdCBlZGl0cyA9IHJld3JpdGVyLnJld3JpdGVBU1QoZG9jLCBudWxsKTsKLS8vCQkJCQkJCSB0cnkgewotLy8JCQkJCQkJCVVuZG9FZGl0IHVuZG8gPSBlZGl0cy5hcHBseShkb2MpOwotLy8JCQkJCQkJfSBjYXRjaCAoTWFsZm9ybWVkVHJlZUV4Y2VwdGlvbiBlMSkgewotLy8JCQkJCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLS8vCQkJCQkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQkJCQkJCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUxKSB7Ci0vLwkJCQkJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotLy8JCQkJCQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCQkJCQkJfQotLy8JCQkJCQkJCi0KLS8vCQkJCQkJCWpzVW5pdC5jb21taXRXb3JraW5nQ29weSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLS8vCQkJCQkJCWpzVW5pdC5kaXNjYXJkV29ya2luZ0NvcHkoKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChKYXZhU2NyaXB0TW9kZWxFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX07Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9FeGVjdXRlKElGaWxlIGpzRmlsZSkgewotCQlJUHJvamVjdCBwcm9qZWN0ID0ganNGaWxlLmdldFByb2plY3QoKTsKLS8vCQlTdHJpbmcgbmFtZXNwYWNlID0gQ29kZUdlblV0aWwuZ2V0TmFtZVNwYWNlKHByb2plY3QpOwotLy8JCWZpbmFsIFN0cmluZyBjbGFzc05hbWUgPSBJUENDb21tYW5kVXRpbC5nZXRQb3J0bGV0SGVscGVyQ2xhc3NOYW1lKGpzRmlsZSwgbmFtZXNwYWNlKTsKLQkJZmluYWwgSUphdmFTY3JpcHRVbml0IGpzVW5pdCA9IChJSmF2YVNjcmlwdFVuaXQpIEphdmFTY3JpcHRDb3JlLmNyZWF0ZShqc0ZpbGUpOwotCQkKLQkJaWYgKGpzVW5pdCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBudWxsOwotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQkKLQkJCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCQotCQkvLyB0aGlzIHBhcnQgbWF5IG5vdCBiZSBvZiBpbnRlcmVzdCBmb3Igd2hhdCB5b3UncmUgdHJ5aW5nIHRvIGRvCi0vLwkJSVR5cGUgdCA9IG51bGw7Ci0vLwkJdHJ5ewotLy8JCQlmb3IgKG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSUZ1bmN0aW9uIGZ1bmN0aW9uIDoganNVbml0LmdldEZ1bmN0aW9ucygpKSB7Ci0vLwkJCQkvLyBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gdGhlIGZpbGUgb3V0c2lkZSBvZiBhbnkgdHlwZXMKLS8vCQkJCW9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUuSVNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlID0gZnVuY3Rpb24uZ2V0U291cmNlUmFuZ2UoKTsKLS8vCQkJCVN0cmluZyBzb3VyY2UgPSBqc1VuaXQuZ2V0QnVmZmVyKCkuZ2V0VGV4dChzb3VyY2VSYW5nZS5nZXRPZmZzZXQoKSwgc291cmNlUmFuZ2UuZ2V0TGVuZ3RoKCkpOwotLy8JCQl9Ci0vLwkKLS8vCQkJLy8gc3RhcnQgd2l0aCB0aGUgdHlwZXMgaW4gdGhlIGZpbGUKLS8vCQkJSVR5cGVbXSB0eXBlcyA9IGpzVW5pdC5nZXRUeXBlcygpOwotLy8JCQkKLS8vCQkJZm9yIChJVHlwZSB0eXBlOiB0eXBlcykgewotLy8vLwkJCQlpZiAodHlwZS5nZXREaXNwbGF5TmFtZSgpLmVxdWFscyhjbGFzc05hbWUpKSB7Ci0vLwkJCQkJdCA9IHR5cGU7Ci0vLwkJCQkJZm9yIChJRnVuY3Rpb24gZnVuY3Rpb24gOiB0eXBlLmdldEZ1bmN0aW9ucygpKSB7Ci0vLwkJCQkJCS8vIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiBhIHR5cGUKLS8vCQkJCQkJaWYoZnVuY3Rpb24uZ2V0RGlzcGxheU5hbWUoKS5lcXVhbHMoInNheUhlbGxvIikgJiYgIWZ1bmN0aW9uLmlzQ29uc3RydWN0b3IoKSkgewotLy8JCQkJCQkJSVNvdXJjZVJhbmdlIHNvdXJjZVJhbmdlID0gZnVuY3Rpb24uZ2V0U291cmNlUmFuZ2UoKTsKLS8vCQkJCQkJCVN0cmluZyBzb3VyY2UgPSBqc1VuaXQuZ2V0QnVmZmVyKCkuZ2V0VGV4dChzb3VyY2VSYW5nZS5nZXRPZmZzZXQoKSwgc291cmNlUmFuZ2UuZ2V0TGVuZ3RoKCkpOwotLy8JCQkJCQl9Ci0vLwkJCQkJfQotLy8vLwkJCQl9Ci0vLwkJCX0KLS8vCQl9Y2F0Y2ggKEphdmFTY3JpcHRNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0vLwkJCS8vIFRPRE86IGhhbmRsZSBleGNlcHRpb24KLS8vCQkJLy87Ci0vLwkJfQotCi0JCS8vSXQgd291bGQgYmUgbW9yZSBhY2N1cmF0ZSB0byB3YWxrIHRoZSBBU1Qgb2YgdGhlIGZpbGUgaW5zdGVhZCBvZiBzZWFyY2hpbmcganVzdCB0aGUgdG9wLWxldmVsIGNoaWxkcmVuOgotLy8JCVNvdXJjZVR5cGUgc3QgPSBudWxsOwotLy8JCWlmKHQgaW5zdGFuY2VvZiBTb3VyY2VUeXBlKQotLy8JCQlzdCA9IChTb3VyY2VUeXBlKSB0OwotLy8JCXRyeSB7Ci0vLwkJCWlmKHN0IT1udWxsKQotLy8JCQkJc3QuY3JlYXRlTWV0aG9kKCJmdW5jdGlvbiBoZWxsbyhhcmdzKXt9IiwgbnVsbCwgZmFsc2UsIG51bGwpOwotLy8JCQkKLS8vCQl9IGNhdGNoIChKYXZhU2NyaXB0TW9kZWxFeGNlcHRpb24gZSkgewotLy8JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotCQlBU1RQYXJzZXIgcGFyc2VyID0gb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5kb20uQVNUUGFyc2VyLm5ld1BhcnNlcihBU1QuSkxTMyk7Ci0JCXBhcnNlci5zZXRTb3VyY2UoanNVbml0KTsKLQkJQVNUTm9kZSBhc3QgPSBwYXJzZXIuY3JlYXRlQVNUKG51bGwpOwotCQlBU1RWaXNpdG9yIHZpc2l0b3IgPSBuZXcgTXlOb2RlVmlzaXRvcihqc1VuaXQsLypjbGFzc05hbWUqL251bGwgLCBhc3QpOwkJCQotCQlhc3QuYWNjZXB0KHZpc2l0b3IpOwotCQkKLQkJCi0JfQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0JCQotCQkKLQkJCi0KLS8vCQkKLS8vCQl0cnkgewotLy8JCQkvLyBUT0RPOiBjaGVjayBmb3IgZGlydHkgc3RhdGUgZmlyc3QsIGFuZCBzYXZlIGFsbCB0aGUgb3BlbmVkIGRvY3VtZW50cwotLy8JCQkvL3RoZW4gZG8gdGhlIG9wZXJhdGlvbgotLy8JCQkKLS8vCQkJanNVbml0LmJlY29tZVdvcmtpbmdDb3B5KG1vbml0b3IpOwotLy8JCQlJSmF2YVNjcmlwdEVsZW1lbnRbXSBjaGlsZHJlbiA9IGpzVW5pdC5nZXRDaGlsZHJlbigpOwotLy8JCQlmb3IgKElKYXZhU2NyaXB0RWxlbWVudCBqYXZhU2NyaXB0RWxlbWVudCA6IGNoaWxkcmVuKSB7Ci0vLwkJCQlpZihqYXZhU2NyaXB0RWxlbWVudCBpbnN0YW5jZW9mIFNvdXJjZVR5cGUpewotLy8JCQkJCVNvdXJjZVR5cGUgc3QgPSAoU291cmNlVHlwZSkgamF2YVNjcmlwdEVsZW1lbnQ7Ci0vLwkJCQkJaWYoc3QuaXNDbGFzcygpKXsKLS8vCQkJCQkJaWYoc3QuZ2V0RGlzcGxheU5hbWUoKS5lcXVhbHMoY2xhc3NOYW1lKSl7Ci0vLwkJCQkJCQlTb3VyY2VUeXBlRWxlbWVudEluZm8gaW5mbyA9IChTb3VyY2VUeXBlRWxlbWVudEluZm8pIHN0LmdldEVsZW1lbnRJbmZvKCk7Ci0vLwkJCQkJCQlJSmF2YVNjcmlwdEVsZW1lbnRbXSBpbmZvQ2hpbGRyZW4gPWluZm8uZ2V0Q2hpbGRyZW4oKTsKLS8vCQkJCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLS8vCQkJCQkJCVNvdXJjZU1ldGhvZCBtZXRob2QgPSBudWxsOwotLy8JCQkJCQkJZm9yIChJSmF2YVNjcmlwdEVsZW1lbnQgamF2YVNjcmlwdEVsZW1lbnQyIDogaW5mb0NoaWxkcmVuKSB7Ci0vLwkJCQkJCQkJaWYoamF2YVNjcmlwdEVsZW1lbnQyIGluc3RhbmNlb2YgU291cmNlTWV0aG9kKXsKLS8vCQkJCQkJCQkJbWV0aG9kID0gKFNvdXJjZU1ldGhvZCkgamF2YVNjcmlwdEVsZW1lbnQyOwotLy8JCQkJCQkJCQlpZihtZXRob2QuZ2V0RGlzcGxheU5hbWUoKS5lcXVhbHMoInNheUhlbGxvIikpewotLy8JCQkJCQkJCQkJZm91bmQgPSB0cnVlOwotLy8JCQkJCQkJCQkJYnJlYWs7Ci0vLwkJCQkJCQkJCX0KLS8vCQkJCQkJCQl9Ci0vLwkJCQkJCQl9Ci0vLwkJCQkJCQlpZihmb3VuZCl7Ci0vLwkJCQkJCQkJCi0vLwkJCQkJCQkJSVBhdGggZmlsZVBhdGggPSBqc0ZpbGUuZ2V0RnVsbFBhdGgoKTsKLS8vCQkJCQkJCQlTdHJpbmcgdG9JbnNlcnQgPSAiZG9qby5jb25uZWN0KGEgLGIgLCBjLCBkKSI7Ci0vLwkJCQkJCQkJaW50IG9mZnNldCA9IG1ldGhvZC5nZXRTb3VyY2VSYW5nZSgpLmdldE9mZnNldCgpOwotLy8JCQkJCQkJCUlCdWZmZXIgc291cmNlID0ganNVbml0LmdldEJ1ZmZlcigpOwotLy8vLwkJCQkJCQkJc291cmNlLnJlcGxhY2Uob2Zmc2V0KzEsIDAsIHRvSW5zZXJ0KTsKLS8vLy8JCQkJCQkJCXN0LmNyZWF0ZU1ldGhvZCgiaGVsbG86IGZ1bmN0aW9uKCl7IHZhciB4PTUgfSIsIG51bGwsIHRydWUsIG1vbml0b3IpOwotLy8JCQkJCQkJCS8vbWV0aG9kLgotLy8JCQkJCQkJCUlEb2N1bWVudCBkb2N1bWVudCA9IGdldERvY3VtZW50KGpzVW5pdCk7Ci0vLwkJCQkJCQkJQ29tcGlsYXRpb25Vbml0Q2hhbmdlIHJlc3VsdCA9IG5ldyBDb21waWxhdGlvblVuaXRDaGFuZ2UoIkluc2VydCBkb2pvIGNvbm5lY3QiLCBqc1VuaXQpOwotLy8JCQkJCQkJCUFTVCBjdTsKLS8vCQkJCQkJCQlpZihqc1VuaXQgaW5zdGFuY2VvZiBKYXZhU2NyaXB0VW5pdCl7Ci0vLwkJCQkJCQkJCWN1ID0oKEphdmFTY3JpcHRVbml0KWpzVW5pdCkuZ2V0QVNUKCk7Ci0vLwkJCQkJCQkJCUFTVFJld3JpdGUgcmV3cml0ZXIgPSBBU1RSZXdyaXRlLmNyZWF0ZShjdSk7Ci0vLwkJCQkJCQkJCQotLy8JCQkJCQkJCX1lbHNlIHsKLS8vCQkJCQkJCQkJQVNUUGFyc2VyIHBhcnNlciA9IEFTVFBhcnNlci5uZXdQYXJzZXIoQVNULkpMUzMpOwotLy8JCQkJCQkJCQkgcGFyc2VyLnNldFNvdXJjZShkb2N1bWVudC5nZXQoKS50b0NoYXJBcnJheSgpKTsKLS8vCQkJCQkJCQkJIEphdmFTY3JpcHRVbml0IGN1ID0gKEphdmFTY3JpcHRVbml0KSBwYXJzZXIuY3JlYXRlQVNUKG51bGwpOwotLy8JCQkJCQkJCQkgY3UgPSBjdS5nZXRBU1QoKTsKLS8vCQkJCQkJCQkJIGN1LmdldEJvZHlDaGlsZCgpOwotLy8JCQkJCQkJCQkgTGlzdDxPYmplY3Q+IHN0bXRzID0gY3Uuc3RhdGVtZW50cygpOwotLy8JCQkJCQkJCQkgRXhwcmVzc2lvblN0YXRlbWVudCBzdG10ID0gKEV4cHJlc3Npb25TdGF0ZW1lbnQpIHN0bXRzLmdldCgyKTsKLS8vLy8JCQkJCQkJCQkgc3RtdC5nZXQKLS8vCQkJCQkJCQkJIGZvciAoT2JqZWN0IG9iamVjdCA6IHN0bXRzKSB7Ci0vLwkJCQkJCQkJCQlvYmplY3QgPSBvYmplY3Q7Ci0vLwkJCQkJCQkJCQkoKEV4cHJlc3Npb25TdGF0ZW1lbnQpb2JqZWN0KS5nZXRBU1QoKTsKLS8vCQkJCQkJCQkJCS8vQVNUTm9kZXMuZ2V0Qm9keURlY2xhcmF0aW9ucygoRXhwcmVzc2lvblN0YXRlbWVudClvYmplY3QpOwotLy8JCQkJCQkJCQkJRnVuY3Rpb25JbnZvY2F0aW9uIGZpID0gKEZ1bmN0aW9uSW52b2NhdGlvbikgKEFTVE5vZGVzLmdldENoaWxkcmVuKChFeHByZXNzaW9uU3RhdGVtZW50KW9iamVjdCkpLmdldCgwKTsKLS8vCQkJCQkJCQkJCWZpLmdldEJvZHlDaGlsZCgpOwotLy8vLwkJCQkJCQkJCQlmaS4KLS8vCQkJCQkJCQkJfQotLy8JCQkJCQkJCQkgCi0vLwkJCQkJCQkJCSBGdW5jdGlvbkludm9jYXRpb24gaW52b2NhdGlvbiA9IGN1Lm5ld0Z1bmN0aW9uSW52b2NhdGlvbigpOwotLy8JCQkJCQkJCX0KLS8vCQkJCQkJCQkJCi0vLwkJCQkJCQkJCi0vLwkJCQkJCQkJCi0vLwkJCQkJCQkJLy90ZXN0aW5nIG9ubHkuLi4KLS8vLy8JCQkJCQkJCUlKYXZhU2NyaXB0RWxlbWVudFtdIGVsZW1lbnRzID0gbWV0aG9kLmdldENoaWxkcmVuKCk7Ci0vLy8vCQkJCQkJCQlTdHJpbmcgc291cmNlID0gbWV0aG9kLmdldFNvdXJjZSgpOwotLy8vLwkJCQkJCQkJT2JqZWN0IGluZm8xID0gbWV0aG9kLmdldEVsZW1lbnRJbmZvKCk7Ci0vLy8vCQkJCQkJCQlJSmF2YVNjcmlwdE1vZGVsIG1vZGVsID0gbWV0aG9kLmdldEphdmFTY3JpcHRNb2RlbCgpOwotLy8vLy8vCQkJCQkJCQltb2RlbCA9IG1vZGVsOwotLy8vLwkJCQkJCQkJc3QuY3JlYXRlTWV0aG9kKCJteWZ1biA6IGZ1bmN0aW9uKCl7fSIsIG1ldGhvZCwgdHJ1ZSwgbW9uaXRvcik7Ci0vLwkJCQkJCQl9Ci0vLy8vCQkJCQkJCWluZm8gPSBpbmZvOwotLy8JCQkJCQl9Ci0vLwkJCQkJCQotLy8JCQkJCX0KLS8vCQkJCX0KLS8vCQkJfQotLy8vLwkJCVN0cmluZyB0b0luc2VydCA9ICJkb2pvLmNvbm5lY3QoYSAsYiAsIGMsIGQpIjsKLS8vLy8JCQlpbnQgb2Zmc2V0ID0gNTA7Ci0vLy8vCQkJSUJ1ZmZlciBzb3VyY2UgPSBqc1VuaXQuZ2V0QnVmZmVyKCk7Ci0vLy8vCQkJc291cmNlLnJlcGxhY2Uob2Zmc2V0KzEsIDAsIHRvSW5zZXJ0KTsKLS8vLy8JCQlJQnVmZmVyIHNvdXJjZSA9IGpzVW5pdC5nZXRCdWZmZXIoKTsKLS8vLy8JCQlqc1VuaXQuZ2V0QnVmZmVyKCkuYXBwZW5kKCJcbiIgKyAidmFyIHg7Iik7Ci0vLwkJCWpzVW5pdC5jb21taXRXb3JraW5nQ29weSh0cnVlLCBtb25pdG9yKTsKLS8vCQkJanNVbml0LmRpc2NhcmRXb3JraW5nQ29weSgpOwotLy8JCX0gY2F0Y2ggKEphdmFTY3JpcHRNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0vLwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0KLQkKLQkKLQlwcm90ZWN0ZWQgc3RhdGljIElEb2N1bWVudCBnZXREb2N1bWVudChJSmF2YVNjcmlwdFVuaXQgY3UpIHRocm93cyBKYXZhU2NyaXB0TW9kZWxFeGNlcHRpb24gewotCQlJQnVmZmVyIGJ1ZmZlciA9IGN1LmdldEJ1ZmZlcigpOwotCQlpZiAoYnVmZmVyIGluc3RhbmNlb2YgSURvY3VtZW50KQotCQkJcmV0dXJuIChJRG9jdW1lbnQpIGJ1ZmZlcjsKLQkJcmV0dXJuIG5ldyBEb2N1bWVudEFkYXB0ZXIoYnVmZmVyKTsKLQl9Ci0JCi0Jc3RhdGljIE9iamVjdExpdGVyYWxGaWVsZCBnZXRPYmplY3RMaXRlcmFsRmllbGQoU3RyaW5nIHNvdXJjZSl7Ci0JCVN0cmluZyBqcyA9ICJ4LnByb3RvdHlwZSA9IHsiICsgc291cmNlICsgIn0iOwotCQlKYXZhU2NyaXB0VW5pdCBqc3UgPSBnZXRBU1QoanMpOwotCQlFeHByZXNzaW9uU3RhdGVtZW50IHN0bXQgPSAoRXhwcmVzc2lvblN0YXRlbWVudClqc3Uuc3RhdGVtZW50cygpLmdldCgwKTsKLQkJT2JqZWN0TGl0ZXJhbCBsaXQgPSAoT2JqZWN0TGl0ZXJhbCkoKEFzc2lnbm1lbnQpIHN0bXQuZ2V0RXhwcmVzc2lvbigpKS5nZXRSaWdodEhhbmRTaWRlKCk7CQkKLQkJT2JqZWN0TGl0ZXJhbEZpZWxkIGZpZWxkID0gKE9iamVjdExpdGVyYWxGaWVsZCkgbGl0LmZpZWxkcygpLmdldCgwKTsKLQkJQVNUTm9kZSBub2RlID0gQVNUTm9kZS5jb3B5U3VidHJlZShqc3UuZ2V0QVNUKCksIGZpZWxkKTsKLQkJcmV0dXJuIChPYmplY3RMaXRlcmFsRmllbGQpIG5vZGU7Ci0JfQotCQotCXN0YXRpYyBKYXZhU2NyaXB0VW5pdCBnZXRBU1QoU3RyaW5nIHNvdXJjZSl7Ci0JCUFTVFBhcnNlciBwYXJzZXIgPSBBU1RQYXJzZXIubmV3UGFyc2VyKEFTVC5KTFMzKTsKLQkJcGFyc2VyLnNldFNvdXJjZShzb3VyY2UudG9DaGFyQXJyYXkoKSk7Ci0JCUFTVE5vZGUgYXN0ID0gcGFyc2VyLmNyZWF0ZUFTVChudWxsKTsKLQkJcmV0dXJuIChKYXZhU2NyaXB0VW5pdCkgYXN0OwotCX0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlCi0JICogb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMKLQkgKiAuRXhlY3V0aW9uRXZlbnQpCi0JICovCi0JcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlRWRpdG9yKGV2ZW50KTsKLQkJaWYgKCEoYWN0aXZlRWRpdG9yIGluc3RhbmNlb2YgSmF2YUVkaXRvcikpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCWRvRXhlY3V0ZSgoSUZpbGUpIEhhbmRsZXJVdGlsLmdldEFjdGl2ZUVkaXRvcihldmVudCkuZ2V0RWRpdG9ySW5wdXQoKS5nZXRBZGFwdGVyKElGaWxlLmNsYXNzKSk7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0Y2M3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9TaG93VHJhbnNsYXRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Bbm5vdGF0aW9uVHlwZUxvb2t1cDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5jb21waWxlci5JUHJvYmxlbTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YVNjcmlwdFVJOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LklKc1RyYW5zbGF0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LkpzVHJhbnNsYXRpb25BZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7DQotDQotDQotLyoqDQotICogT3BlbnMgdGhlIGN1cnJlbnQgbWFya3VwIGVkaXRvcidzIGN1cnJlbnQgdHJhbnNsYXRlZCBzb3VyY2UgaW4gdGhlIEphdmFTY3JpcHQgZWRpdG9yDQotICogDQotICogSW52b2tlIHdpdGggTTErTTIrOA0KLSAqIA0KLSAqIEBhdXRob3Igbml0aW4NCi0gKi8NCi1wdWJsaWMgY2xhc3MgU2hvd1RyYW5zbGF0aW9uSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXB1YmxpYyBTaG93VHJhbnNsYXRpb25IYW5kbGVyKCkgew0KLQl9DQotDQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogDQotCSAqIEBzZWUNCi0JICogb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMNCi0JICogLkV4ZWN1dGlvbkV2ZW50KQ0KLQkgKi8NCi0JcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCi0JCS8vIElERS5vcGVuRWRpdG9yKGV2ZW50LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLCBjcmVhdGVFZGl0b3JJbnB1dCgpLA0KLQkJLy8gSmF2YVVJLklEX0NVX0VESVRPUiwgdHJ1ZSk7DQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEN1cnJlbnRTZWxlY3Rpb24oZXZlbnQpOw0KLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQotCQkJTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKTsNCi0JCQlpZiAoIWxpc3QuaXNFbXB0eSgpKSB7DQotCQkJCWlmIChsaXN0LmdldCgwKSBpbnN0YW5jZW9mIElET01Ob2RlKSB7DQotCQkJCQlmaW5hbCBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKSBsaXN0LmdldCgwKSkuZ2V0TW9kZWwoKTsNCi0JCQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsNCi0JCQkJCWlmIChhZGFwdGVyICE9IG51bGwpIHsNCi0JCQkJCQlKb2Igb3BlbmVyID0gbmV3IFVJSm9iKCJPcGVuaW5nIEphdmFTY3JpcHQgVHJhbnNsYXRpb24iKSB7DQotCQkJCQkJCXB1YmxpYyBJU3RhdHVzIHJ1bkluVUlUaHJlYWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQotCQkJCQkJCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7DQotCQkJCQkJCQlmaW5hbCBJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsNCi0NCi0JCQkJCQkJCS8vIGNyZWF0ZSBhbiBJRWRpdG9ySW5wdXQgZm9yIHRoZSBKYXZhIGVkaXRvcg0KLQkJCQkJCQkJZmluYWwgSVN0b3JhZ2VFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQodHJhbnNsYXRpb24sIG1vZGVsLmdldEJhc2VMb2NhdGlvbigpKTsNCi0JCQkJCQkJCXRyeSB7DQotCQkJCQkJCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCksIGlucHV0LCBKYXZhU2NyaXB0VUkuSURfQ1VfRURJVE9SLCB0cnVlKTsNCi0JCQkJCQkJCQkvLyBOb3cgYWRkIHRoZSBwcm9ibGVtcyB3ZSBmb3VuZA0KLQkJCQkJCQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikgew0KLQkJCQkJCQkJCQlJQW5ub3RhdGlvbk1vZGVsIGFubm90YXRpb25Nb2RlbCA9ICgoSVRleHRFZGl0b3IpIGVkaXRvcikuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChpbnB1dCk7DQotCQkJCQkJCQkJCXRyYW5zbGF0aW9uLnJlY29uY2lsZUNvbXBpbGF0aW9uVW5pdCgpOw0KLQkJCQkJCQkJCQlMaXN0IHByb2JsZW1zTGlzdCA9IHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCk7DQotCQkJCQkJCQkJCUlQcm9ibGVtW10gcHJvYmxlbXMgPSAoSVByb2JsZW1bXSkgcHJvYmxlbXNMaXN0LnRvQXJyYXkobmV3IElQcm9ibGVtW3Byb2JsZW1zTGlzdC5zaXplKCldKTsNCi0JCQkJCQkJCQkJQW5ub3RhdGlvblR5cGVMb29rdXAgbG9va3VwID0gbmV3IEFubm90YXRpb25UeXBlTG9va3VwKCk7DQotCQkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvYmxlbXMubGVuZ3RoOyBpKyspIHsNCi0JCQkJCQkJCQkJCWludCBsZW5ndGggPSBwcm9ibGVtc1tpXS5nZXRTb3VyY2VFbmQoKSAtIHByb2JsZW1zW2ldLmdldFNvdXJjZVN0YXJ0KCkgKyAxOw0KLQkJCQkJCQkJCQkJUG9zaXRpb24gcG9zaXRpb24gPSBuZXcgUG9zaXRpb24ocHJvYmxlbXNbaV0uZ2V0U291cmNlU3RhcnQoKSwgbGVuZ3RoKTsNCi0JCQkJCQkJCQkJCUFubm90YXRpb24gYW5ub3RhdGlvbiA9IG51bGw7DQotCQkJCQkJCQkJCQlTdHJpbmcgdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfSU5GTyk7DQotCQkJCQkJCQkJCQlpZiAocHJvYmxlbXNbaV0uaXNFcnJvcigpKSB7DQotCQkJCQkJCQkJCQkJdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOw0KLQkJCQkJCQkJCQkJfQ0KLQkJCQkJCQkJCQkJZWxzZSBpZiAocHJvYmxlbXNbaV0uaXNXYXJuaW5nKCkpIHsNCi0JCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsNCi0JCQkJCQkJCQkJCX0NCi0JCQkJCQkJCQkJCWFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbih0eXBlLCBmYWxzZSwgcHJvYmxlbXNbaV0uZ2V0TWVzc2FnZSgpKTsNCi0JCQkJCQkJCQkJCWlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsNCi0JCQkJCQkJCQkJCQlhbm5vdGF0aW9uTW9kZWwuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uLCBwb3NpdGlvbik7DQotCQkJCQkJCQkJCQl9DQotCQkJCQkJCQkJCX0NCi0JCQkJCQkJCQl9DQotCQkJCQkJCQl9DQotCQkJCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgew0KLQkJCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQkJCQkJCQkJRGlzcGxheS5nZXRDdXJyZW50KCkuYmVlcCgpOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7DQotCQkJCQkJCX0NCi0JCQkJCQl9Ow0KLQkJCQkJCW9wZW5lci5zZXRTeXN0ZW0oZmFsc2UpOw0KLQkJCQkJCW9wZW5lci5zZXRVc2VyKHRydWUpOw0KLQkJCQkJCW9wZW5lci5zY2hlZHVsZSgpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIG51bGw7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGUwMDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLQ0KLTxwcm9qZWN0DQotICAgIG5hbWU9InRlc3RzdWl0ZSINCi0gICAgZGVmYXVsdD0icnVuIg0KLSAgICBiYXNlZGlyPSIuIj4NCi0gICAgDQotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4NCi0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4NCi0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+DQotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+DQotDQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIg0KLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cyIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiDQotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLkFsbFdlYlVJVGVzdHMiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0idGVzdFR5cGUiDQotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4NCi0NCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4NCi0NCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+DQotDQotDQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIg0KLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0id29ya3NwYWNlIg0KLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgICAgICANCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPg0KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPg0KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4NCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4NCi0gICAgICAgIDx0c3RhbXAgLz4NCi0gICAgICAgIDxkZWxldGU+DQotICAgICAgICAgICAgPGZpbGVzZXQNCi0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iDQotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPg0KLSAgICAgICAgPC9kZWxldGU+DQotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+DQotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+DQotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPg0KLSAgICAgICAgPGRlbGV0ZQ0KLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9Ig0KLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPg0KLQ0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4NCi0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+DQotDQotICAgICAgICA8YW50DQotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSINCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iDQotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICAgICAgPC9hbnQ+DQotDQotICAgICAgICA8Y29weQ0KLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSINCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciDQotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPg0KLQ0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+DQotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4NCi0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPg0KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPg0KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+DQotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4NCi0gICAgPC90YXJnZXQ+DQotDQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4NCi0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPg0KLSAgICA8dGFyZ2V0DQotICAgICAgICBuYW1lPSJydW4iDQotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPg0KLSAgICAgICAgPGFudA0KLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCINCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iDQotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPg0KLSAgICAgICAgPC9hbnQ+DQotICAgIDwvdGFyZ2V0Pg0KLQ0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmNiNzZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxkaXYgYWxpZ249ImxlZnQiIG9uY2xpY2s9InJldHVybiB0ZXN0RnVuY3Rpb24oKSI+PC9kaXY+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyYWEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08ZGl2IGFsaWduPSJsZWZ0IiBvbmNsaWNrPSJyZXR1cm4gc2F2ZUNvbmZpcm0oKSI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTAtZm10Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYzVlMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMC1mbXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCTwhLS0gdGhpcyBpcyBhIHRlc3QKLQkJdmFyIHQgPSB0cnVlOwotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTg5YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0gdGhpcyBpcyBhIHRlc3QKLXZhciB0ID0gdHJ1ZTsKLS8vLS0+IAotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMS1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1MTY1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JPCEtLQotCQl2YXIgdCA9IHRydWU7Ci0JLy8gdGhpcyBpcyBhIHRlc3QgLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDExLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiY2MwOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0gCi12YXIgdCA9IHRydWU7Ci0vLyB0aGlzIGlzIGEgdGVzdCAtLT4gCi08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTItZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEyLWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmI4YTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTItZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tIHRoaXMgaXMgYSB0ZXN0Ci0JCXZhciB0ID0gdHJ1ZTsKLQkvLyB0aGlzIGlzIGEgdGVzdCAtLT4KLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTIuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhNDczNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLSB0aGlzIGlzIGEgdGVzdAotdmFyIHQgPSB0cnVlOwotLy8gdGhpcyBpcyBhIHRlc3QgLS0+IAotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEzLWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxMy1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZDUwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEzLWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JCXZhciB0ID0gdHJ1ZTsKLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhZDZhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDEzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciB0ID0gdHJ1ZTs8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTQtZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDE0LWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTE1MzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0MTQtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tIHZhciB0ID0gdHJ1ZTsKLQkJCi0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDE0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDE0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MWIzOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QxNC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tIHZhciB0ID0gdHJ1ZTs8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Mi1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Mi1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljNzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDItZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tCi0JCXZhciB0ID0gdHJ1ZTsKLQkvLy0tPgotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3QyLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljNzk1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCTwhLS0KLQkJdmFyIHQgPSB0cnVlOwotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0My5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWM3OTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0My5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JPCEtLQotCQl2YXIgdCA9IHRydWU7Ci0JLy8tLT4KLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNWRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDQtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJdmFyIHQgPSB0cnVlOwotCQl2YXIgZiA9ICJmb28iOwotCQl2YXIgcSA9ICJibGEiOwotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTUxNzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLXZhciB0ID0gdHJ1ZTsKLXZhciBmID0gImZvbyI7Ci12YXIgcSA9ICJibGEiOwotLy8tLT4gCi08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NS1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NS1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlMjA2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDUtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tCi0JCXZhciB0ID0gdHJ1ZTsKLQkJdmFyIGYgPSAiZm9vIjsKLQkJdmFyIHEgPSAiYmxhIjsKLQk8L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0NS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q1Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDU5ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q1Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLQotCXZhciB0ID0gdHJ1ZTsKLQl2YXIgZiA9ICJmb28iOwotCXZhciBxID0gImJsYSI7Ci08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ni1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ni1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5ZDYxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDYtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJdmFyIGogPSAiPGRpdj4iOwotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q2Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwY2I1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci12YXIgaiA9ICI8ZGl2PiI7Ci08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ny1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0Ny1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlM2M0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDctZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJdmFyIHMgPSAiZm9vIjsKLQkJd2hpbGUgKHRydWUpIHsKLQkJCXZhciBpID0gNTsKLQkJfQotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q3Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRiMDU4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci0JCTxoZWFkPgotCQkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci0JCQkJCQk8dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotCTwvaGVhZD4KLTxib2R5PgotCQkJCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JCi12YXIgcyA9ICJmb28iOwotCQl3aGlsZSh0cnVlKSB7Ci0JCQkJCXZhciBpID0gNTsJCQkKLX0KLQkJCi08L3NjcmlwdD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OC1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzYjdkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDgtZm10Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQk8IS0tCi0JCXZhciBqID0gIjxkaXY+IjsKLQkvLy0tPgotCTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q4Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViODA3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci08IS0tCi12YXIgaiA9ICI8ZGl2PiI7Ci0vLy0tPgotPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDktZm10Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDktZm10Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZThjOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3RGaWxlcy9mb3JtYXR0aW5nL3Rlc3Q5LWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCTwhLS0KLQkJdmFyIHMgPSAiZm9vIjsKLQkJd2hpbGUgKHRydWUpIHsKLQkJCXZhciBpID0gNTsKLQkJfQotCS8vLS0+Ci0JPC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdEZpbGVzL2Zvcm1hdHRpbmcvdGVzdDkuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzhjYWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy90ZXN0RmlsZXMvZm9ybWF0dGluZy90ZXN0OS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLQkJPGhlYWQ+Ci0JCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLQkJCQkJCTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci0JPC9oZWFkPgotPGJvZHk+Ci0JCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQkJCTwhLS0KLQkKLXZhciBzID0gImZvbyI7Ci0JCXdoaWxlKHRydWUpIHsKLQkJCQkJdmFyIGkgPSA1OwkJCQotfQotCQkJCQkJLy8tLT4KLTwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyZmYyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zc2Vtb2RlbHRlc3RzLmphcgotamF2YUNvbXBpbGVyLnNzZW1vZGVsdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA3M2ZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTVkNDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogc3NlbW9kZWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5TU0VNb2RlbFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlcywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gY29tLmlibS5pY3UKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9lY2xpcHNlLmluZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9lY2xpcHNlLmluZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRjZjQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvTUVUQS1JTkYvZWNsaXBzZS5pbmYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgV2UgZG8gbm90IHdhbnQgYW55IG5lc3RlZCBqYXJzIAotIyBzaWduZWQgb3Igbm9ybWFsaXplZCBmb3IgcGFja2luZwotIyBzZWUgYnVnIDI3NDc0MyBTb21lIHVuaXQgdGVzdHMgYXJlIHNlbnNpdGl2ZSB0byBkZXRhaWxzIG9mIGJ1aWxkCi0jIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNzQ3NDMKLQotamFycHJvY2Vzc29yLmV4Y2x1ZGUuY2hpbGRyZW49dHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWFmMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBzc2Vtb2RlbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICByZXNvdXJjZXMvCi1zb3VyY2Uuc3NlbW9kZWx0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuc3NlbW9kZWx0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDA5MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Jlc291cmNlcy90ZXN0ZmlsZS5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcmVzb3VyY2VzL3Rlc3RmaWxlLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyZDE0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcmVzb3VyY2VzL3Rlc3RmaWxlLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5Y2NkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLlNTRUNvcmVQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEV4aXN0ZW5jZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCl7Ci0JCWFzc2VydE5vdE51bGwoU1NFQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OTIyNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2JiMjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0T2JqZWN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0Tm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3RSZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnV0aWwuVGVzdEphclV0aWxpdGllczsKLQotCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JLyoqCi0JICogdG8gZ2V0IHBpY2tlZCB1cCBieSBCVlQKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFNTRU1vZGVsVGVzdFN1aXRlKCk7Ci0JfQotCi0JLy8gbm90IHJlYWR5IGZvciB0aHJlYWRlZCB0ZXN0cywgeWV0LgotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldwotCS8vIENsYXNzW117VGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5jbGFzcywKLQkvLyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzLmNsYXNzLCBUZXN0Q3JlYXRpb24uY2xhc3N9OwotCi0JLy8gcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdENyZWF0aW9uLmNsYXNzLAotCS8vIFRlc3REb2N1bWVudFJlYWRlci5jbGFzc307Ci0JLy8gcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdENyZWF0aW9uLmNsYXNzLAotCS8vIFRlc3REb2N1bWVudFJlYWRlci5jbGFzcywgVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5jbGFzcywKLQkvLyBUZXN0UmVnaW9uTWF0Y2hlcy5jbGFzc307Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtFeGlzdGVuY2VUZXN0LmNsYXNzLCBUZXN0T2JqZWN0cy5jbGFzcywgVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmNsYXNzLCBUZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRFdmVudC5jbGFzcywgVGVzdE5vQ2hhbmdlRXZlbnQuY2xhc3MsIFRlc3RSZWdpb25DaGFuZ2VkRXZlbnQuY2xhc3MsVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzLFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzcywgVGVzdEphclV0aWxpdGllcy5jbGFzcywgVGVzdFVuc3VwcG9ydGVkQ29udGVudFR5cGUuY2xhc3MsIE1vZGVsSGFuZGxlclJlZ2lzdHJ5VGVzdC5jbGFzcywgVGVzdFJlZ2lvbkxpc3QuY2xhc3N9OwotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFIE1vZGVsIEJhc2ljIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFRlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNjcwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VNb2RlbFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMDVhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuQWJzdHJhY3RBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotCi0vKioKLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgQWJzdHJhY3RBZGFwdGVyRmFjdG9yeSBmRmFjdG9yeSA9IG51bGw7Ci0JCi0JY2xhc3MgTXlDbGFzcyBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCXJldHVybiB0eXBlIGluc3RhbmNlb2YgTXlDbGFzczsKLQkJfQotCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsaW50IGV2ZW50VHlwZSxPYmplY3QgY2hhbmdlZEZlYXR1cmUsT2JqZWN0IG9sZFZhbHVlLE9iamVjdCBuZXdWYWx1ZSxpbnQgcG9zKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJc2V0VXBBZGFwdGVyRmFjdG9yeSgpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBBZGFwdGVyRmFjdG9yeSgpIHsKLQkJZkZhY3RvcnkgPSBuZXcgQWJzdHJhY3RBZGFwdGVyRmFjdG9yeShUZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeS5NeUNsYXNzLmNsYXNzLCBmYWxzZSkgewotCQkJcHJvdGVjdGVkIElOb2RlQWRhcHRlciBjcmVhdGVBZGFwdGVyKElOb2RlTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCQkJcmV0dXJuIG5ldyBNeUNsYXNzKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGFwdCgpIHsKLQkJZkZhY3RvcnkuYWRhcHQobnVsbCk7Ci0JfQotCQotLy8JcHVibGljIHZvaWQgdGVzdEFkYXB0TmV3KCkgewotLy8JCWZGYWN0b3J5LmFkYXB0TmV3KG51bGwpOwotLy8JfQotCQotLy8JcHVibGljIHZvaWQgdGVzdENvcHkoKSB7Ci0vLwkJQWRhcHRlckZhY3RvcnkgZiA9IGZGYWN0b3J5LmNvcHkoKTsKLS8vCQlhc3NlcnROb3ROdWxsKGYpOwotLy8JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGUoKSB7Ci0JCS8vIFRPRE86IGNyZWF0ZSB1bml0IHRlc3QKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RVbnN1cHBvcnRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9UZXN0VW5zdXBwb3J0ZWRDb250ZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI2YThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RVbnN1cHBvcnRlZENvbnRlbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7DQotDQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07DQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOw0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsNCi0NCi1wdWJsaWMgY2xhc3MgVGVzdFVuc3VwcG9ydGVkQ29udGVudFR5cGUgZXh0ZW5kcyBUZXN0Q2FzZSB7DQotCS8qKg0KLQkgKiBDcmVhdGVzIGEgc2ltcGxlIHByb2plY3QuDQotCSAqIA0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKiAgICAgICAgICAgIC0gdGhlIG5hbWUgb2YgdGhlIHByb2plY3QNCi0JICogQHJldHVybg0KLQkgKi8NCi0Jc3RhdGljIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHsNCi0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOw0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsNCi0JCXRyeSB7DQotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKQ0KLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKQ0KLQkJCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQl9DQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JCXJldHVybiBwcm9qZWN0Ow0KLQl9DQotDQotDQotCS8qKg0KLQkgKiBWZXJpZnkgdGhhdCBhdHRlbXB0aW5nIHRvIGxvYWQgYSBtb2RlbCBmb3IgYW4gdW5zdXBwb3J0ZWQgY29udGVudCB0eXBlDQotCSAqIHNpbXBseSByZXR1cm5zIG51bGwgd2l0aG91dCBFeGNlcHRpb25zIG9yIGFzc2VydGlvbiBmYWlsdXJlcy4NCi0JICogDQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbg0KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9yUmVhZFdpdGhVbnN1cHBvcnRlZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsNCi0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgew0KLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7DQotCQl9DQotDQotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ0ZXN0UmVhZEZpbGUuanMiKTsNCi0JCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgidmFyIG4gPSAwOyIuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlIG5vdCBjcmVhdGVkIiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7DQotCQl0cnkgew0KLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsNCi0JCQlhc3NlcnROdWxsKCJtb2RlbCByZXR1cm5lZCBldmVuIHRob3VnaCBleHBlY3RlZCB0byBzaWxlbnRseSBnZXQgbnVsbCIsIG1vZGVsKTsNCi0JCQlpZiAobW9kZWwgIT0gbnVsbCkNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQl9DQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0JCQlTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOw0KLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihvdXQpKTsNCi0JCQlmYWlsKG91dC50b1N0cmluZygpKTsNCi0JCX0NCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOw0KLQl9DQotDQotCS8qKg0KLQkgKiBWZXJpZnkgdGhhdCBhdHRlbXB0aW5nIHRvIGxvYWQgYSBtb2RlbCBmb3IgYW4gdW5zdXBwb3J0ZWQgY29udGVudCB0eXBlDQotCSAqIHNpbXBseSByZXR1cm5zIG51bGwgd2l0aG91dCBFeGNlcHRpb25zIG9yIGFzc2VydGlvbiBmYWlsdXJlcy4NCi0JICogDQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbg0KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9yRWRpdFdpdGhVbnN1cHBvcnRlZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsNCi0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgew0KLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7DQotCQl9DQotDQotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ0ZXN0RWRpdEZpbGUuanMiKTsNCi0JCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgidmFyIG4gPSAwOyIuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlIG5vdCBjcmVhdGVkIiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7DQotCQl0cnkgew0KLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmaWxlKTsNCi0JCQlhc3NlcnROdWxsKCJtb2RlbCByZXR1cm5lZCBldmVuIHRob3VnaCBleHBlY3RlZCB0byBzaWxlbnRseSBnZXQgbnVsbCIsIG1vZGVsKTsNCi0JCQlpZiAobW9kZWwgIT0gbnVsbCkNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQl9DQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0JCQlTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOw0KLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihvdXQpKTsNCi0JCQlmYWlsKG91dC50b1N0cmluZygpKTsNCi0JCX0NCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGYWN0b3J5VGVzdE9ubHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGYWN0b3J5VGVzdE9ubHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY3YTI2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBleGlzdHMgb25seSB0byBzYXRpc2Z5IHNvbWUgb2YgdGhlIHVuaXQgdGVzdHMuCi0gKiAKLSAqIFRvIHRlc3QsIHVzZSBmb2xsb3dpbmcgbGluZSBpbiBjbGllbnQsIHN1Y2ggYXMgd2hlbiBpdCBpbnRpdGlhbGl6ZWQuCi0gKiBGYWN0b3J5UmVnaXN0cnkuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShuZXcKLSAqIEFkYXB0ZXJGYWN0b3J5VGVzdE9ubHkoKSk7Ci0gKiAKLSAqIENyZWF0aW9uIGRhdGU6ICgxMS8xNC8wMCA3OjA4OjE4IFBNKQotICogCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZhY3RvcnlUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlckZhY3RvcnkgewotCS8vIFRoaXMgZmFjdG9yeSBkZWFscyB3aXRoIHRocmVlIGFkYXB0ZXJzCi0JamF2YS51dGlsLkxpc3QgYWRhcHRlcnMgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdCgpOwotCi0JLyoqCi0JICogQ0FBZGFwdGVyRmFjdG9yeSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZhY3RvcnlUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQkJYWRhcHRlcnMuYWRkKG5ldyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpKTsKLQkJYWRhcHRlcnMuYWRkKG5ldyBBZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5KCkpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JBdHRyVGVzdE9ubHkoKSk7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgYWRhcHRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHRoaXMgZmFjdG9yeSBhbmQKLQkgKiB0aGUgZ2l2ZW4gb2JqZWN0LCBhbmQgInNldHMgdXAiIHRoZSBhZGFwdGFibGUgb2JqZWN0IHRvIHVzZSB0aGUKLQkgKiBhZGFwdGVyLgotCSAqIAotCSAqIFRoZSBhZGFwdGVyIG1heSBiZSBhIHNpbmdsZXRvbiBvciBub3QgLi4uIGRlcGVuZGluZyBvbiB0aGUgbmVlZHMgb2YgdGhlCi0JICogSU5vZGVBZGFwdGVyIC4uLiBidXQgaW4gZ2VuZXJhbCBpdCBpcyByZWNvbW1lbmRlZCBmb3IgYW4gYWRhcHRlciB0byBiZQotCSAqIHN0YXRlbGVzcywgc28gdGhlIGVmZmljaWVuY2llcyBvZiBhIHNpbmdsZXRvbiBjYW4gYmUgZ2FpbmVkLgotCSAqIAotCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBzaG91bGQgY2FsbCBhZGRBZGFwdGVyIG9uIHRoZSBhZGFwdGVkCi0JICogb2JqZWN0IHdpdGggdGhlIGNvcnJlY3QgaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIuCi0JICovCi0JcHVibGljIElOb2RlQWRhcHRlciBhZGFwdChJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkvLyBvYmplY3QuYWRkQWRhcHRlcihhZGFwdGVySW5zdGFuY2UpOwotCQkvLyByZXR1cm4gYWRhcHRlckluc3RhbmNlOwotCQlJTm9kZUFkYXB0ZXIgcmVzdWx0ID0gbnVsbDsKLQotCQlJdGVyYXRvciBhZGFwdGVyc0xpc3QgPSBhZGFwdGVycy5pdGVyYXRvcigpOwotCQl3aGlsZSAoYWRhcHRlcnNMaXN0Lmhhc05leHQoKSkgewotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSAoSU5vZGVBZGFwdGVyKSBhZGFwdGVyc0xpc3QubmV4dCgpOwotCQkJaWYgKGFkYXB0ZXIuaXNBZGFwdGVyRm9yVHlwZSh0YXJnZXQpKSB7Ci0JCQkJSU5vZGVBZGFwdGVyIGV4aXN0aW5nQWRhcHRlciA9IHRhcmdldC5nZXRFeGlzdGluZ0FkYXB0ZXIoYWRhcHRlcik7Ci0JCQkJaWYgKGV4aXN0aW5nQWRhcHRlciA9PSBudWxsKSB7Ci0JCQkJCXRhcmdldC5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJCQlyZXN1bHQgPSBhZGFwdGVyOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0KLQl9Ci0KLQkvKioKLQkgKiBpc0ZhY3RvcnlGb3JUeXBlIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLQkJLy8gZm9yIG5vdywgb25lIGFkYXB0ZXIgZm9yIGRvY3VtZW50cywgZWxlbWVudHMsIGFuZCBhdHRyLgotCQkvLwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIERvY3VtZW50KSB7Ci0JCQlyZXN1bHQgPSB0cnVlOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWlmICh0eXBlIGluc3RhbmNlb2YgQXR0cikgewotCQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJLy8gVE9ETzogY3JlYXRlIHVuaXQgdGVzdAotCi0JfQotCi0JcHVibGljIElOb2RlQWRhcHRlckZhY3RvcnkgY29weSgpIHsKLQkJcmV0dXJuIG5ldyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZjllYmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JBdHRyVGVzdE9ubHkgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCS8qKgotCSAqIENBQWRhcHRlclRlc3RPbmx5IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIEFkYXB0ZXJGb3JBdHRyVGVzdE9ubHkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotCSAqIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0eXBlIGluc3RhbmNlb2YgQXR0cikgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yQXR0clRlc3RPbmx5ICIgKyB0aGlzLmhhc2hDb2RlKCkgKyAiIGhhcyBiZWVuIG5vdGlmaWVkIG9mICIgKyBJTm9kZU5vdGlmaWVyLkVWRU5UX1RZUEVfU1RSSU5HU1tldmVudFR5cGVdICsgIiAod2hlbiAiICsgbm90aWZpZXIgKyAiIG5vdGlmaWVkIGl0KSIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYxM2VkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0JICogdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBEb2N1bWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYTllODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCS8qKgotCSAqIENBQWRhcHRlclRlc3RPbmx5IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotCSAqIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0eXBlIGluc3RhbmNlb2YgRWxlbWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5ICIgKyB0aGlzLmhhc2hDb2RlKCkgKyAiIGhhcyBiZWVuIG5vdGlmaWVkIG9mICIgKyBJTm9kZU5vdGlmaWVyLkVWRU5UX1RZUEVfU1RSSU5HU1tldmVudFR5cGVdICsgIiAod2hlbiAiICsgbm90aWZpZXIgKyAiIG5vdGlmaWVkIGl0KSIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L0FjY2Vzc29yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjQ4MWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotCi0KLS8qKgotICogSGVscGVyIGNsYXNzIGZvciBhY2Nlc3NpbmcgY2xhc3NlcyBhbmQgbWVtYmVycyB3aGljaCBjYW5ub3QKLSAqIGJlIGFjY2Vzc2VkIHVzaW5nIHN0YW5kYXJkIEphdmEgYWNjZXNzIGNvbnRyb2wgbGlrZSBwcml2YXRlCi0gKiBvciBwYWNrYWdlIHZpc2libGUgZWxlbWVudHMuCi0gKgotICogQHNpbmNlIDMuMQotICovCi1wdWJsaWMgY2xhc3MgQWNjZXNzb3IgewotCi0JLyoqIFRoZSBjbGFzcyB0byBhY2Nlc3MuICovCi0JcHJpdmF0ZSBDbGFzcyBmQ2xhc3M7Ci0JLyoqIFRoZSBpbnN0YW5jZSB0byBhY2Nlc3MuICovCi0JcHJpdmF0ZSBPYmplY3QgZkluc3RhbmNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIDxjb2RlPmluc3RhbmNlPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4uIE9ubHkgbm9uLWluaGVyaXRlZCBtZW1iZXJzIHRoYXQgcGFydGljdWxhcgotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPiBjYW4gYmUgYWNjZXNzZWQuCi0JICoKLQkgKiBAcGFyYW0gaW5zdGFuY2UgdGhlIGluc3RhbmNlCi0JICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIENsYXNzIGNsYXp6KSB7Ci0JCW9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQuaXNOb3ROdWxsKGluc3RhbmNlKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGF6eik7Ci0JCWZJbnN0YW5jZT0gaW5zdGFuY2U7Ci0JCWZDbGFzcz0gY2xheno7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIDxjb2RlPmluc3RhbmNlPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4uIE9ubHkgbm9uLWluaGVyaXRlZCBtZW1iZXJzIHRoYXQgcGFydGljdWxhcgotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPiBjYW4gYmUgYWNjZXNzZWQuCi0JICoKLQkgKiBAcGFyYW0gaW5zdGFuY2UgdGhlIGluc3RhbmNlCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKE9iamVjdCBpbnN0YW5jZSwgU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NOYW1lKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGFzc0xvYWRlcik7Ci0JCWZJbnN0YW5jZT0gaW5zdGFuY2U7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyB0aGV5IG11c3QgYWxsIGJlIGluc3RhbmNlb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI0FjY2Vzc29yKFN0cmluZywgQ2xhc3NMb2FkZXIsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JBcmdzIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMgd2hpY2ggbXVzdCBhbGwgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdGhpcyhjbGFzc05hbWUsIGNsYXNzTG9hZGVyLCBnZXRUeXBlcyhjb25zdHJ1Y3RvckFyZ3MpLCBjb25zdHJ1Y3RvckFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvclR5cGVzIHRoZSB0eXBlcyBvZiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCi0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCi0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBDbGFzc1tdIGNvbnN0cnVjdG9yVHlwZXMsIE9iamVjdFtdIGNvbnN0cnVjdG9yQXJncykgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlDb25zdHJ1Y3RvciBjb25zdHJ1Y3Rvcj0gbnVsbDsKLQkJdHJ5IHsKLQkJCWNvbnN0cnVjdG9yPSBmQ2xhc3MuZ2V0RGVjbGFyZWRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvclR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZTIpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQXNzZXJ0LmlzTm90TnVsbChjb25zdHJ1Y3Rvcik7Ci0JCWNvbnN0cnVjdG9yLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlmSW5zdGFuY2U9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKGNvbnN0cnVjdG9yQXJncyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICogPHA+Ci0JICogVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGFjY2VzcyBzdGF0aWMgc3R1ZmYuCi0JICogPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW52b2tlcyB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG1ldGhvZCBuYW1lIGFuZCBhcmd1bWVudHMuCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gZ2V0IHRoZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuCi0JICogYXJndW1lbnRzIGFsbCB0aG9zZSBhcmd1bWVudHMgbXVzdCBiZSBpbnN0YW5jZSBvZiBPYmplY3QuIFVzZQotCSAqIHtAbGluayAjaW52b2tlKFN0cmluZywgQ2xhc3NbXSwgT2JqZWN0W10pfSBpZiB0aGlzCi0JICogaXMgbm90IHRoZSBjYXNlLjwvcD4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSBhcmd1bWVudHMgdGhlIG1ldGhvZCBhcmd1bWVudHMgd2hpY2ggbXVzdCBhbGwgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0Ci0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJcmV0dXJuIGludm9rZShtZXRob2ROYW1lLCBnZXRUeXBlcyhhcmd1bWVudHMpLCBhcmd1bWVudHMpOwotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqCi0JICogQHBhcmFtIG1ldGhvZE5hbWUgdGhlIG1ldGhvZCBuYW1lCi0JICogQHBhcmFtIHR5cGVzIHRoZSBhcmd1bWVudCB0eXBlcwotCSAqIEBwYXJhbSBhcmd1bWVudHMgdGhlIG1ldGhvZCBhcmd1bWVudHMKLQkgKiBAcmV0dXJuIHRoZSBtZXRob2QgcmV0dXJuIHZhbHVlCi0JICovCi0JcHVibGljIE9iamVjdCBpbnZva2UoU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gdHlwZXMsIE9iamVjdFtdIGFyZ3VtZW50cykgewotCQlNZXRob2QgbWV0aG9kPSBudWxsOwotCQl0cnkgewotCQkJbWV0aG9kPSBmQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QobWV0aG9kTmFtZSwgdHlwZXMpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwobWV0aG9kKTsKLQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gbWV0aG9kLmludm9rZShmSW5zdGFuY2UsIGFyZ3VtZW50cyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0KGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0Qm9vbGVhbihmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgaW50IHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0SW50KGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldEJvb2xlYW4oZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIGludCBnZXRJbnQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRJbnQoZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwcml2YXRlIEZpZWxkIGdldEZpZWxkKFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IG51bGw7Ci0JCXRyeSB7Ci0JCQlmaWVsZD0gZkNsYXNzLmdldERlY2xhcmVkRmllbGQoZmllbGROYW1lKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hGaWVsZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcmV0dXJuIGZpZWxkOwotCX0KLQotCXByaXZhdGUgc3RhdGljIENsYXNzW10gZ2V0VHlwZXMoT2JqZWN0W10gb2JqZWN0cykgewotCQlpZiAob2JqZWN0cyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaW50IGxlbmd0aD0gb2JqZWN0cy5sZW5ndGg7Ci0JCUNsYXNzW10gY2xhc3Nlcz0gbmV3IENsYXNzW2xlbmd0aF07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJQXNzZXJ0LmlzTm90TnVsbChvYmplY3RzW2ldKTsKLQkJCWNsYXNzZXNbaV09IG9iamVjdHNbaV0uZ2V0Q2xhc3MoKTsKLQkJfQotCQlyZXR1cm4gY2xhc3NlczsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZmFpbCgpIHsKLQkJQXNzZXJ0LmlzVHJ1ZShmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTU4NWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5DaGFyU2VxdWVuY2VSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdENoYXJTZXF1ZW5jZVJlYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHVibGljIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0KLQlwdWJsaWMgVGVzdENoYXJTZXF1ZW5jZVJlYWRlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlTdHJpbmcgZlN0YW5kYXJkU3RyaW5nID0gInRlc3QxMjMiOwotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkQmVnaW5uaW5nKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJ3QnKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICdlJyk7Ci0JCWNoYXIgY2hhcjMgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMyA9PSAncycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZE1pZGRsZSgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAyLCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICdzJyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAndCcpOwotCQljaGFyIGNoYXIzID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjMgPT0gJzEnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRFbmQoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNCwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAnMScpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJzInKTsKLQkJY2hhciBjaGFyMyA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIzID09ICczJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkT3V0T2ZSYW5nZSgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA1MCwgMyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkUGFydGlhbGx5T3V0T2ZSYW5nZSgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA1LCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICcyJyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAnMycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJCZWdpbmluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAidGVzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyRW5kKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA0LCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICIxMjMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyRW5kRW5sYXJnZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDQsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gIjEyMyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzIwMF07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmdFbmxhcmdlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAidGVzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMjAwXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJCZWdpbmluZ1JlZHVjZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCS8vd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIsIDAsIDIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQkvL30KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkvLy8gbm93IGNvbnRpbnVlIHJlYWRpbmcgc2FtZSByZWFkZXIKLQkJdGFyZ2V0U3RyaW5nID0gInMiOwotCQlzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCW5SZWFkID0gMDsKLQkJLy93aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlciwgMCwgMik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCS8vfQotCQl0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0T2JqZWN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdE9iamVjdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU5M2M2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0T2JqZWN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50Ow0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsNCi0NCi1wdWJsaWMgY2xhc3MgVGVzdE9iamVjdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7DQotDQotCS8qKg0KLQkgKiAgDQotCSAqLw0KLQlwdWJsaWMgVGVzdE9iamVjdHMoKSB7DQotCQlzdXBlcigpOw0KLQ0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKi8NCi0JcHVibGljIFRlc3RPYmplY3RzKFN0cmluZyBuYW1lKSB7DQotCQlzdXBlcihuYW1lKTsNCi0NCi0JfQ0KLQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RW5kZWRGbGFnKCkgew0KLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gbmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7DQotCQlyZWdpb24uc2V0UGFyZW50RG9jdW1lbnQobmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50KCkpOw0KLQkJYm9vbGVhbiBkZWxldGVkID0gcmVnaW9uLmlzRGVsZXRlZCgpOw0KLQkJYm9vbGVhbiBlbmRlZCA9IHJlZ2lvbi5pc0VuZGVkKCk7DQotCQlyZWdpb24uc2V0RW5kZWQoIWVuZGVkKTsNCi0JCWFzc2VydEVxdWFscyghZW5kZWQsIHJlZ2lvbi5pc0VuZGVkKCkpOw0KLQkJYXNzZXJ0RXF1YWxzKGRlbGV0ZWQsIHJlZ2lvbi5pc0RlbGV0ZWQoKSk7DQotCX0NCi0NCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZWRGbGFnKCkgew0KLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gbmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7DQotCQlyZWdpb24uc2V0UGFyZW50RG9jdW1lbnQobmV3IEJhc2ljU3RydWN0dXJlZERvY3VtZW50KCkpOw0KLQkJYm9vbGVhbiBkZWxldGVkID0gcmVnaW9uLmlzRGVsZXRlZCgpOw0KLQkJYm9vbGVhbiBlbmRlZCA9IHJlZ2lvbi5pc0VuZGVkKCk7DQotCQlyZWdpb24uc2V0RGVsZXRlZCghZGVsZXRlZCk7DQotCQlhc3NlcnRFcXVhbHMoIWRlbGV0ZWQsIHJlZ2lvbi5pc0RlbGV0ZWQoKSk7DQotCQlhc3NlcnRFcXVhbHMoZW5kZWQsIHJlZ2lvbi5pc0VuZGVkKCkpOw0KLQl9DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25MaXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0UmVnaW9uTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzNhMzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25MaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wYXJzZXIuQ29udGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5UZXh0UmVnaW9uTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnV0aWwuQWNjZXNzb3I7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdFJlZ2lvbkxpc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUdJT05fVFlQRSA9IFRlc3RSZWdpb25MaXN0LmNsYXNzLmdldE5hbWUoKTsKLQotCi0JcHVibGljIFRlc3RSZWdpb25MaXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCi0JcHVibGljIFRlc3RSZWdpb25MaXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfYWRkKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfYWRkMigpIHsKLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X2FkZEFsbFRvUG9zaXRpb24oKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsMiA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYWRkZWQgPSBpbXBsMi5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFkZGVkID0gaW1wbDIuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCi0JCWFkZGVkID0gaW1wbC5hZGRBbGwoMCwgaW1wbDIpOwotCQlhc3NlcnRUcnVlKCJyZWdpb25zIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzFdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMF0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzJdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMV0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzBdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMl0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfYWRkQWxsVG9FbXB0eSgpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0KLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbDIgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWFkZGVkID0gaW1wbDIuYWRkQWxsKDAsIGltcGwpOwotCQlhc3NlcnRUcnVlKCJyZWdpb25zIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzBdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMF0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzFdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMV0pOwotCQlhc3NlcnRFcXVhbHMoIm9iamVjdCB3YXMgd3JvbmciLCByZWdpb25zWzJdLCAoKElUZXh0UmVnaW9uW10pIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSlbMl0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfY2xlYXIoKSB7Ci0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJaW1wbC5jbGVhcigpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDAsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X2dldE92ZXIoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgcmVnaW9uc1swXSwgaW1wbC5nZXQoMCkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIHJlZ2lvbnNbMV0sIGltcGwuZ2V0KDEpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCByZWdpb25zWzJdLCBpbXBsLmdldCgyKSk7Ci0KLQkJQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUgPSBudWxsOwotCQl0cnkgewotCQkJaW1wbC5nZXQoaW1wbC5zaXplKCkpOwotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZTIpewotCQkJZSA9IGUyOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoIm5vIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gd2hlbiBleHBlY3RlZCIsIGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfZ2V0VW5kZXIoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgcmVnaW9uc1swXSwgaW1wbC5nZXQoMCkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIHJlZ2lvbnNbMV0sIGltcGwuZ2V0KDEpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCByZWdpb25zWzJdLCBpbXBsLmdldCgyKSk7Ci0KLQkJQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUgPSBudWxsOwotCQl0cnkgewotCQkJaW1wbC5nZXQoLTEpOwotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZTIpewotCQkJZSA9IGUyOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoIm5vIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB0aHJvd24gd2hlbiBleHBlY3RlZCIsIGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfZ2V0KCkgewotCQlJVGV4dFJlZ2lvbltdIHJlZ2lvbnMgPSBuZXcgSVRleHRSZWdpb25bM107Ci0KLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzBdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIHJlZ2lvbnNbMF0sIGltcGwuZ2V0KDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCByZWdpb25zWzFdLCBpbXBsLmdldCgxKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgcmVnaW9uc1syXSwgaW1wbC5nZXQoMikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaW5kZXhPZigpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMV0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMSwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAzLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAwLCBpbXBsLmluZGV4T2YocmVnaW9uc1swXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDEsIGltcGwuaW5kZXhPZihyZWdpb25zWzFdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMiwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMl0pKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X2lzRW1wdHkoKSB7Ci0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQobmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJaW1wbC5jbGVhcigpOwotCi0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgdHJ1ZSwgaW1wbC5pc0VtcHR5KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaXRlcmF0b3IwKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJSXRlcmF0b3IgaXQgPSBudWxsOwotCQlhc3NlcnROb3ROdWxsKCJubyBpdGVyYXRvciByZXR1cm5lZCIsIGl0ID0gKEl0ZXJhdG9yKSBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5pbnZva2UoIml0ZXJhdG9yIiwgbmV3IE9iamVjdFswXSkpOwotCQlhc3NlcnRGYWxzZShpdC5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaXRlcmF0b3IxKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgaW1wbC5zaXplKCkpOwotCQlhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgaW1wbC5zaXplKCkpOwotCi0JCUl0ZXJhdG9yIGl0ID0gbnVsbDsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gaXRlcmF0b3IgcmV0dXJuZWQiLCBpdCA9IChJdGVyYXRvcikgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuaW52b2tlKCJpdGVyYXRvciIsIG5ldyBPYmplY3RbMF0pKTsKLQkJYXNzZXJ0VHJ1ZShpdC5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfaXRlcmF0b3IyKCkgewotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCUl0ZXJhdG9yIGl0ID0gbnVsbDsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gaXRlcmF0b3IgcmV0dXJuZWQiLCBpdCA9IChJdGVyYXRvcikgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuaW52b2tlKCJpdGVyYXRvciIsIG5ldyBPYmplY3RbMF0pKTsKLQkJYXNzZXJ0VHJ1ZShpdC5oYXNOZXh0KCkpOwotCi0JCWFzc2VydE5vdE51bGwoaXQubmV4dCgpKTsKLQkJYXNzZXJ0Tm90TnVsbChpdC5uZXh0KCkpOwotCQlhc3NlcnROb3ROdWxsKGl0Lm5leHQoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoaXQuaGFzTmV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X3JlbW92ZUJ5UG9zaXRpb24oKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMCwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMF0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAxLCBpbXBsLmluZGV4T2YocmVnaW9uc1sxXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDIsIGltcGwuaW5kZXhPZihyZWdpb25zWzJdKSk7Ci0KLQkJaW1wbC5yZW1vdmUoMSk7Ci0KLQkJSXRlcmF0b3IgaXQgPSBudWxsOwotCQlhc3NlcnROb3ROdWxsKCJubyBpdGVyYXRvciByZXR1cm5lZCIsIGl0ID0gKEl0ZXJhdG9yKSBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5pbnZva2UoIml0ZXJhdG9yIiwgbmV3IE9iamVjdFswXSkpOwotCQlhc3NlcnRUcnVlKGl0Lmhhc05leHQoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKHJlZ2lvbnNbMF0sIGl0Lm5leHQoKSk7Ci0JCWFzc2VydEVxdWFscyhyZWdpb25zWzJdLCBpdC5uZXh0KCkpOwotCi0JCWFzc2VydEZhbHNlKGl0Lmhhc05leHQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9yZW1vdmVCeU9iamVjdCgpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMV0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMSwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAzLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAwLCBpbXBsLmluZGV4T2YocmVnaW9uc1swXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDEsIGltcGwuaW5kZXhPZihyZWdpb25zWzFdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMiwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMl0pKTsKLQotCQlpbXBsLnJlbW92ZShyZWdpb25zWzFdKTsKLQotCQlJdGVyYXRvciBpdCA9IG51bGw7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGl0ZXJhdG9yIHJldHVybmVkIiwgaXQgPSAoSXRlcmF0b3IpIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmludm9rZSgiaXRlcmF0b3IiLCBuZXcgT2JqZWN0WzBdKSk7Ci0JCWFzc2VydFRydWUoaXQuaGFzTmV4dCgpKTsKLQotCQlhc3NlcnRFcXVhbHMocmVnaW9uc1swXSwgaXQubmV4dCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHJlZ2lvbnNbMl0sIGl0Lm5leHQoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoaXQuaGFzTmV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X3JlbW92ZUFsbCgpIHsKLQkJSVRleHRSZWdpb25bXSByZWdpb25zID0gbmV3IElUZXh0UmVnaW9uWzNdOwotCi0JCVRleHRSZWdpb25MaXN0SW1wbCBpbXBsID0gbmV3IFRleHRSZWdpb25MaXN0SW1wbCgpOwotCQlib29sZWFuIGFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1swXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAwLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMV0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMSwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDIsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzJdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDIsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAzLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAwLCBpbXBsLmluZGV4T2YocmVnaW9uc1swXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDEsIGltcGwuaW5kZXhPZihyZWdpb25zWzFdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMiwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMl0pKTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbDIgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWltcGwyLmFkZChyZWdpb25zWzBdKTsKLQkJaW1wbDIuYWRkKHJlZ2lvbnNbMV0pOwotCQlpbXBsMi5hZGQocmVnaW9uc1syXSk7Ci0JCWltcGwucmVtb3ZlQWxsKGltcGwyKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDAsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X3NpemUoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIGltcGwuc2l6ZSgpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgaW1wbC5zaXplKCkpOwotCi0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMCwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMF0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAxLCBpbXBsLmluZGV4T2YocmVnaW9uc1sxXSkpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDIsIGltcGwuaW5kZXhPZihyZWdpb25zWzJdKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBjb3VudCIsIDMsIGltcGwuc2l6ZSgpKTsKLQkJaW1wbC5yZW1vdmUocmVnaW9uc1sxXSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgY291bnQiLCAyLCBpbXBsLnNpemUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF90b0FycmF5KCkgewotCQlJVGV4dFJlZ2lvbltdIHJlZ2lvbnMgPSBuZXcgSVRleHRSZWdpb25bM107Ci0KLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzBdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgaW1wbC5zaXplKCkpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIGltcGwuc2l6ZSgpKTsKLQotCQlhc3NlcnRFcXVhbHMoIndyb25nIG9iamVjdCIsIDAsIGltcGwuaW5kZXhPZihyZWdpb25zWzBdKSk7Ci0JCWFzc2VydEVxdWFscygid3Jvbmcgb2JqZWN0IiwgMSwgaW1wbC5pbmRleE9mKHJlZ2lvbnNbMV0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBvYmplY3QiLCAyLCBpbXBsLmluZGV4T2YocmVnaW9uc1syXSkpOwotCi0JCWFzc2VydFRydWUoIndyb25nIGFycmF5IiwgQXJyYXlzLmVxdWFscyhyZWdpb25zLCBpbXBsLnRvQXJyYXkoKSkpOwotCQlpbXBsLnJlbW92ZShyZWdpb25zWzFdKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgYXJyYXkiLCBBcnJheXMuZXF1YWxzKG5ldyBJVGV4dFJlZ2lvbltde3JlZ2lvbnNbMF0sIHJlZ2lvbnNbMl19LCBpbXBsLnRvQXJyYXkoKSkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfdHJpbVRvU2l6ZTAoKSB7Ci0JCUlUZXh0UmVnaW9uW10gcmVnaW9ucyA9IG5ldyBJVGV4dFJlZ2lvblszXTsKLQotCQlUZXh0UmVnaW9uTGlzdEltcGwgaW1wbCA9IG5ldyBUZXh0UmVnaW9uTGlzdEltcGwoKTsKLQkJYm9vbGVhbiBhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMF0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMCwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDEsIGltcGwuc2l6ZSgpKTsKLQkJYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzFdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDEsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAyLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1syXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAyLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMywgaW1wbC5zaXplKCkpOwotCi0JCWltcGwuY2xlYXIoKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAwLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWltcGwudHJpbVRvU2l6ZSgpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDAsIG5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldEludCgiZlJlZ2lvbnNDb3VudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJub3QgdHJpbW1lZCIsIDAsICgoT2JqZWN0W10pbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0KCJmUmVnaW9ucyIpKS5sZW5ndGgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0X3RyaW1Ub1NpemUxKCkgewotCQlJVGV4dFJlZ2lvbltdIHJlZ2lvbnMgPSBuZXcgSVRleHRSZWdpb25bM107Ci0KLQkJVGV4dFJlZ2lvbkxpc3RJbXBsIGltcGwgPSBuZXcgVGV4dFJlZ2lvbkxpc3RJbXBsKCk7Ci0JCWJvb2xlYW4gYWRkZWQgPSBpbXBsLmFkZChyZWdpb25zWzBdID0gbmV3IENvbnRleHRSZWdpb24oUkVHSU9OX1RZUEUsIDAsIDEsIDEpKTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIG5vdCBhZGRlZCIsIGFkZGVkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBpbXBsLnNpemUoKSk7Ci0JCWFkZGVkID0gaW1wbC5hZGQocmVnaW9uc1sxXSA9IG5ldyBDb250ZXh0UmVnaW9uKFJFR0lPTl9UWVBFLCAxLCAxLCAxKSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBub3QgYWRkZWQiLCBhZGRlZCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMiwgaW1wbC5zaXplKCkpOwotCQlhZGRlZCA9IGltcGwuYWRkKHJlZ2lvbnNbMl0gPSBuZXcgQ29udGV4dFJlZ2lvbihSRUdJT05fVFlQRSwgMiwgMSwgMSkpOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gbm90IGFkZGVkIiwgYWRkZWQpOwotCQlhc3NlcnRFcXVhbHMoImNvdW50IHdhcyB3cm9uZyIsIDMsIGltcGwuc2l6ZSgpKTsKLQotCQlpbXBsLnJlbW92ZSgwKTsKLQkJaW1wbC5yZW1vdmUoMCk7Ci0JCWFzc2VydEVxdWFscygiY291bnQgd2FzIHdyb25nIiwgMSwgbmV3IEFjY2Vzc29yKGltcGwsIFRleHRSZWdpb25MaXN0SW1wbC5jbGFzcykuZ2V0SW50KCJmUmVnaW9uc0NvdW50IikpOwotCQlpbXBsLnRyaW1Ub1NpemUoKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb3VudCB3YXMgd3JvbmciLCAxLCBuZXcgQWNjZXNzb3IoaW1wbCwgVGV4dFJlZ2lvbkxpc3RJbXBsLmNsYXNzKS5nZXRJbnQoImZSZWdpb25zQ291bnQiKSk7Ci0JCWFzc2VydEVxdWFscygibm90IHRyaW1tZWQiLCAxLCAoKE9iamVjdFtdKW5ldyBBY2Nlc3NvcihpbXBsLCBUZXh0UmVnaW9uTGlzdEltcGwuY2xhc3MpLmdldCgiZlJlZ2lvbnMiKSkubGVuZ3RoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2QxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25NYXRjaGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0UmVnaW9uTWF0Y2hlcygpIHsKLQkJc3VwZXIoKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RSZWdpb25NYXRjaGVzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMxKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMSwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMyKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMiwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg3LCAzLCAiMTIzIik7Ci0JCWFzc2VydEVxdWFscyh0cnVlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczQoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg4LCAzLCAiMjM0Iik7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlTdHJpbmcgdGVzdCA9ICJ0ZXN0aW5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdGluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMigpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdFx1MDEzMG5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdEluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMygpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdGluZzEyMyI7Ci0JCVN0cmluZyBjb21wYXJlID0gIlRlU3RcdTAxMzFuZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9OdWxsUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzZlNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotCi1wdWJsaWMgY2xhc3MgTnVsbFBhcnNlciBpbXBsZW1lbnRzIFJlZ2lvblBhcnNlciB7Ci0KLQlwdWJsaWMgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBnZXREb2N1bWVudFJlZ2lvbnMoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0UmVnaW9ucygpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgUmVnaW9uUGFyc2VyIG5ld0luc3RhbmNlKCkgewotCi0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFJlYWRlciByZWFkZXIpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoUmVhZGVyIHJlYWRlciwgaW50IG9mZnNldCkgewotCQkvLyBkbyBub3RoaW5nCi0KLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldChTdHJpbmcgaW5wdXQpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGlucHV0LCBpbnQgb2Zmc2V0KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZiZmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5BYm91dFRvQmVDaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXREZWxldGVkVGV4dCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgZCA9IGV2ZW50LmdldERlbGV0ZWRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyhkLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T3JpZ2luYWxSZXF1ZXN0ZXIoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJT2JqZWN0IHIgPSBldmVudC5nZXRPcmlnaW5hbFJlcXVlc3RlcigpOwotCQlhc3NlcnRFcXVhbHModGhpcywgcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGQgPSBldmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RGVsZXRlZFRleHQoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJZXZlbnQuc2V0RGVsZXRlZFRleHQoImp1bmt5Tm90aGluZyIpOwotCQkvLyBhc3N1bWUgb2sgaWYgbm8gZXhjZXB0aW9uCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBBYm91dFRvQmVDaGFuZ2VkRXZlbnQoZG9jdW1lbnQsIHRoaXMsICJ0ZXN0IiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAwOWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdHJpbmcgPSAidGVzdGluZyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T2Zmc2V0KCkgewotCQlOZXdEb2N1bWVudENvbnRlbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciBTdHJpbmcgZ2V0VGV4dCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgdGV4dCA9IGV2ZW50LmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmcsIHRleHQpOwotCX0KLQotCXByaXZhdGUgTmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50Q29udGVudEV2ZW50KGRvY3VtZW50LCB0aGlzKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczMWVhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3ROZXdEb2N1bWVudEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdEdldE9mZnNldCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWludCBpID0gZXZlbnQuZ2V0TGVuZ3RoKCk7Ci0JCWFzc2VydEVxdWFscyh0ZXN0U3RyaW5nLmxlbmd0aCgpLCBpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRFdmVudCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJU3RyaW5nIHRleHQgPSBldmVudC5nZXRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyh0ZXN0U3RyaW5nLCB0ZXh0KTsKLQl9Ci0KLQlwcml2YXRlIE5ld0RvY3VtZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBuZXcgTmV3RG9jdW1lbnRFdmVudChkb2N1bWVudCwgdGhpcyk7Ci0JCXJldHVybiBldmVudDsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROb0NoYW5nZUV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTZjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROb0NoYW5nZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Tm9DaGFuZ2VFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZUV2ZW50KCkgewotCQlOb0NoYW5nZUV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQkJYXNzZXJ0RXF1YWxzKE5vQ2hhbmdlRXZlbnQuTk9fQ09OVEVOVF9DSEFOR0UsIGV2ZW50LnJlYXNvbik7Ci0JfQotCi0JcHJpdmF0ZSBOb0NoYW5nZUV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlOb0NoYW5nZUV2ZW50IGV2ZW50ID0gbmV3IE5vQ2hhbmdlRXZlbnQoZG9jdW1lbnQsIHRoaXMsICIiLCAwLCAwKTsKLQkJZXZlbnQucmVhc29uID0gTm9DaGFuZ2VFdmVudC5OT19DT05URU5UX0NIQU5HRTsKLQkJcmV0dXJuIGV2ZW50OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0UmVnaW9uQ2hhbmdlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NTgxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbkNoYW5nZWRFdmVudCgpIHsKLQkJUmVnaW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uKCkgewotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbkNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gZXZlbnQuZ2V0UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCByZWdpb24pOwotCX0KLQotCXByaXZhdGUgUmVnaW9uQ2hhbmdlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgUmVnaW9uQ2hhbmdlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZGVkMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25zUmVwbGFjZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50KCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE5ld1JlZ2lvbnMoKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE5ld1JlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9sZFJlZ2lvbnMoKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE9sZFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpIHsKLQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE51bGwoZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkpOwotCX0KLQotCXByaXZhdGUgUmVnaW9uc1JlcGxhY2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gbmV3IFJlZ2lvbnNSZXBsYWNlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjZhNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCgpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkpOwotCX0KLQotCXByaXZhdGUgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOTEwMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXhhbXBsZXMvVGVzdEF0U2lnbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXhhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0QXRTaWduIHsKLQotCXB1YmxpYyBUZXN0QXRTaWduKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7IC8vU3lzdGVtLmdldFByb3BlcnRpZXMoKTsKLQkJcHJvcGVydGllcy5wdXQoImF0IHNpZ24iLCAidGhpcyBpcyBhbiBcdTAwNDAgc2lnbiIpOwotCQlwcm9wZXJ0aWVzLmxpc3QoU3lzdGVtLm91dCk7Ci0JCUZpbGVPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oInRlc3RBdC50eHQiKTsKLQkJcHJvcGVydGllcy5zdG9yZShvdXRwdXRTdHJlYW0sICJ0ZXN0cyIpOwotCQlvdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCJ0ZXN0QXQudHh0Iik7Ci0JCVByb3BlcnRpZXMgcmVhZFByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwotCQlyZWFkUHJvcGVydGllcy5sb2FkKGluU3RyZWFtKTsKLQkJU3RyaW5nIGF0U2lnbiA9IChTdHJpbmcpIHJlYWRQcm9wZXJ0aWVzLmdldCgiYXQgc2lnbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImF0IHNpZ24gZnJvbSByZWFkOiAiICsgYXRTaWduKTsKLQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvRW1wdHlNb2RlbEZvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZmNlYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBFbXB0eU1vZGVsRm9yVGVzdHMgZXh0ZW5kcyBBYnN0cmFjdFN0cnVjdHVyZWRNb2RlbCB7Ci0KLQlwdWJsaWMgRW1wdHlNb2RlbEZvclRlc3RzKCkgewotCi0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJbmRleGVkUmVnaW9uIGdldEluZGV4ZWRSZWdpb24oaW50IG9mZnNldCkgewotCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9UZXN0Q3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNmY0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9UZXN0Q3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5Nb2RlbExpZmVjeWNsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdENyZWF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IG5ldyBFbXB0eU1vZGVsRm9yVGVzdHMoKTsKLQkJTW9kZWxMaWZlY3ljbGVFdmVudCBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRUxFQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9ESVJUWV9TVEFURSk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9ET0NVTUVOVF9DSEFOR0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCS8qICAgICAgICBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRUlOSVRJQUxJWkVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50LkFEQVBURVJTX05PVElGSUVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFTE9BREVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFU09VUkNFX0RFTEVURUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVTT1VSQ0VfTU9WRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgKi8KLQkJZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfU0FWRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCX0KLQotCi0JCS8vIGlmIGdldHMgdG8gaGVyZSB3aXRob3V0IGV4Y2VwdGlvbiwgYXNzdW1lIG9rLgotCQlhc3NlcnRUcnVlKHRydWUpOwotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OTU2YWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbW9kZWxoYW5kbGVyL01vZGVsSGFuZGxlclJlZ2lzdHJ5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubW9kZWxoYW5kbGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1QgPSAiTW9kZWxIYW5kbGVyUmVnaXN0cnlUZXN0XyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEUgPSAidGVzdC5NSFJUZm9vIjsKLQotCUlQcm9qZWN0IHNldFVwKFN0cmluZyBuYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUICsgbmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdC5nZXROYW1lKCkpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQotCXZvaWQgdGVhckRvd24oU3RyaW5nIG5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KFBST0pFQ1QgKyBuYW1lKTsKLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9qZWN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICAtIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0Ci0JICogQHJldHVybgotCSAqLwotCXN0YXRpYyBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEhhbmRsZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IHNldFVwKGdldE5hbWUoKSk7Ci0JCUlGaWxlIGZpbGUgPSBwcm9qZWN0LmdldEZpbGUoRklMRSk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlcjsKLQkJdHJ5IHsKLQkJCWhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3IoZmlsZSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJNb2RlbCBoYW5kbGVyIGRlZmF1bHQgc2hvdWxkIG5vdCBiZSBudWxsLiIsIGhhbmRsZXIpOwotCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXIgZGVmYXVsdCBtb2RlbCBoYW5kbGVyIHdhcyBub3QgcmV0dXJuZWQuIiwgaGFuZGxlci5nZXRJZCgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLm1vZGVsaGFuZGxlciIpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkNhdWdodCBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCQl0ZWFyRG93bihnZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIYW5kbGVyV2l0aERlZmF1bHQoKSAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBzZXRVcChnZXROYW1lKCkpOwotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKEZJTEUpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXI7Ci0JCXRyeSB7Ci0JCQloYW5kbGVyID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRIYW5kbGVyRm9yKGZpbGUsIHRydWUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTW9kZWwgaGFuZGxlciBkZWZhdWx0IHNob3VsZCBub3QgYmUgbnVsbC4iLCBoYW5kbGVyKTsKLQkJCWFzc2VydEVxdWFscygiUHJvcGVyIGRlZmF1bHQgbW9kZWwgaGFuZGxlciB3YXMgbm90IHJldHVybmVkLiIsIGhhbmRsZXIuZ2V0SWQoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5tb2RlbGhhbmRsZXIiKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJDYXVnaHQgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQkJdGVhckRvd24oZ2V0TmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SGFuZGxlcldpdGhvdXREZWZhdWx0KCkgIHRocm93cyBFeGNlcHRpb24gewotCQlJUHJvamVjdCBwcm9qZWN0ID0gc2V0VXAoZ2V0TmFtZSgpKTsKLQkJSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZShGSUxFKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyOwotCQl0cnkgewotCQkJaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvcihmaWxlLCBmYWxzZSk7Ci0JCQlhc3NlcnROdWxsKCJNb2RlbCBoYW5kbGVyIHNob3VsZCBub3QgaGF2ZSByZXR1cm5lZCBhIGhhbmRsZXIuIiwgaGFuZGxlcik7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiQ2F1Z2h0IGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0JCXRlYXJEb3duKGdldE5hbWUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTIwNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBUbyBwcmludCBvdXQgdGltaW5ncywgc2V0IERFQlVHX1RFU1QgdG8gdHJ1ZSwgb3RoZXIgd2lzZSwgdGhpcyB0ZXN0IHBhc3NlcwotICogaWYgbm8gZXhjZXB0aW9ucyB0aHJvd24uCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50IGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUgCi0JLy8gcmVwZWF0ZWQgKGZvciBtb3JlIGFjY3VyYXRlIGF2ZXJhZ2VzKS4KLQlpbnQgblRyaWFscyA9IDM7Ci0JSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jdW1lbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVCA9IGZhbHNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyB0ZXN0cyBmcm9tIDEgdG8gTUFYX1RSRUFEUy0xIHRocmVhZHMKLQlwcml2YXRlIGludCBNQVhfVEhSRUFEUyA9IDU7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLS8vCQlpbnQgblJlZ2lvbnMgPSAwOwotCQlmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJaW50IGluZGV4ID0gaTsKLQkJCWlmICghZGlyZWN0aW9uLmJvb2xlYW5WYWx1ZSgpKSB7Ci0JCQkJaW5kZXggPSAobGVuZ3RoIC0gMSkgLSBpOwotCQkJfQotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBjdXJyZW50RG9jdW1lbnRSZWdpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoaW5kZXgpOwotCQkJaWYgKGN1cnJlbnREb2N1bWVudFJlZ2lvbiAhPSBwcmV2aW91c0RvY3VtZW50UmVnaW9uKSB7Ci0vLwkJCQluUmVnaW9ucysrOwotCQkJCXByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBjdXJyZW50RG9jdW1lbnRSZWdpb247Ci0JCQl9Ci0JCQlUaHJlYWQueWllbGQoKTsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKFNMRUVQX1RJTUUpOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICIgICBmcm9tICIgKyBsZW5ndGggKyAiIGNoYXJhY3RlcnMsIGZvdW5kICIgKyAvKm5SZWdpb25zKi8iIiAgKyAiIHJlZ2lvbnMgaW4gIiArIChlbmRUaW1lIC0gc3RhcnRUaW1lKSArICIgbXNlY3MuIik7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGxvbmcgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aFRocmVhZExvY2FsKGludCBuVGhyZWFkcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VVNFX0xPQ0FMX1RIUkVBRCh0cnVlKTsKLQkJZkRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoZ2V0Q29udGVudCgpKTsKLQkJbG9uZyBzdGFydFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWRvRG9jdW1lbnRXYWxraW5nKG5UaHJlYWRzKTsKLQkJbG9uZyBlbmRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlsb25nIGZpbmFsT3ZlcmFsbCA9IGVuZFRpbWVPdmVyYWxsIC0gc3RhcnRUaW1lT3ZlcmFsbDsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk92ZXJhbGwgdGltZSB1c2luZyBMb2NhbF9UaHJlYWQ6ICIgKyBmaW5hbE92ZXJhbGwpOwotCQl9Ci0JCXJldHVybiBmaW5hbE92ZXJhbGw7Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhvdXRUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQoZmFsc2UpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIE5PVCB1c2luZyBMb2NhbF9UaHJlYWQ6ICIgKyBmaW5hbE92ZXJhbGwpOwotCQl9Ci0JCXJldHVybiBmaW5hbE92ZXJhbGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvRG9jdW1lbnRXYWxraW5nKGludCBuVGhyZWFkcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJVGhyZWFkW10gdGhyZWFkcyA9IG5ldyBUaHJlYWRbblRocmVhZHNdOwotCQlib29sZWFuIHRvZ2dsZSA9IHRydWU7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24gPSBuZXcgQm9vbGVhbih0b2dnbGUpOwotCQkJdG9nZ2xlID0gIXRvZ2dsZTsKLQkJCVRocmVhZEdyb3VwIHRocmVhZEdyb3VwID0gbmV3IFRocmVhZEdyb3VwKCJzc2UgdW5pdCB0ZXN0cyIpOwotCQkJVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQodGhyZWFkR3JvdXAsIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCWxpbmtSdW5uZXIoZGlyZWN0aW9uLCBmRG9jdW1lbnQpOwotCQkJCX0KLQkJCX0sICgic3NlIHVuaXQgdGVzdCB0aHJlYWQgIiArIGkpKTsKLQkJCS8vIEkgdXNlZCBNSU5fUFJJT1JJVFkgc2luY2UgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gInNlZSIgaW4gZGVidWdnZXIgbGlzdCBvZiB0aHJlYWRzCi0JCQl0aHJlYWQuc2V0UHJpb3JpdHkoVGhyZWFkLk1JTl9QUklPUklUWSk7Ci0JCQl0aHJlYWRzW2ldID0gdGhyZWFkOwotCQl9Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJdGhyZWFkc1tpXS5zdGFydCgpOwotCQl9Ci0JCXRyeSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCQl0aHJlYWRzW2ldLmpvaW4oKTsKLQotCQkJfQotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5UaHJlYWRzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZm9yIChpbnQgaSA9IDE7IGkgPCBNQVhfVEhSRUFEUzsgaSsrKSB7Ci0JCQlpbnQgblRocmVhZHMgPSBpOwotCQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgPj4+Pi0tLS0gTiBUaHJlYWRzOiAiICsgaSk7Ci0JCQl9Ci0JCQlmbG9hdCB3b0N1bW0gPSAwOwotCQkJZmxvYXQgd0N1bW0gPSAwOwotCi0JCQlmb3IgKGludCBqID0gMDsgaiA8IG5UcmlhbHM7IGorKykgewotCQkJCXdvQ3VtbSA9IHdvQ3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhvdXRUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQkJd0N1bW0gPSB3Q3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQl9Ci0JCQlmbG9hdCBhdmVyYWdlV08gPSB3b0N1bW0gLyBuVHJpYWxzOwotCQkJZmxvYXQgYXZlcmFnZVcgPSB3Q3VtbSAvIG5UcmlhbHM7Ci0JCQlmbG9hdCBwZXJUaHJlYWRXTyA9IGF2ZXJhZ2VXTyAvIG5UaHJlYWRzOwotCQkJZmxvYXQgcGVyVGhyZWFkVyA9IGF2ZXJhZ2VXIC8gblRocmVhZHM7Ci0JCQlpbnQgcm91bmRlZFdPID0gbmV3IEZsb2F0KHBlclRocmVhZFdPKS5pbnRWYWx1ZSgpOwotCQkJaW50IHJvdW5kZWRXID0gbmV3IEZsb2F0KHBlclRocmVhZFcpLmludFZhbHVlKCk7Ci0JCQlpZiAoREVCVUdfVEVTVCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXZlcmFnZSBwZXIgdGhyZWFkOiB3aXRob3V0OiAiICsgcm91bmRlZFdPICsgIiB3aXRoOiAiICsgcm91bmRlZFcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIDw8PDw8LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJfQotCQkvLyBpZiBnZXRzIHRvIGhlcmUgKHdpdGggbm8gZXhjZXB0aW9ucykgYWxsIGlzIG9rLgotCQlhc3NlcnRUcnVlKDAgPT0gMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzVmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3RhcnRlZCBvZmYgYXMgY29weSBvZiBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50cywgYW5kIEkganVzdAotICogYWRkZWQgYW5vdGhlciB0aHJlYWQgd2l0aCBtb2RpZmllcyB0aGUgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUKLQkvLyByZXBlYXRlZCAoZm9yIG1vcmUgYWNjdXJhdGUgYXZlcmFnZXMpLgotCWludCBuVHJpYWxzID0gMzsKLQlJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIHRlc3RzIGZyb20gMSB0byBNQVhfVFJFQURTLTEgdGhyZWFkcwotCXByaXZhdGUgaW50IE1BWF9USFJFQURTID0gMTQ7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAyOwotCXByaXZhdGUgaW50IE5fQ0hBTkdFUyA9IDEwMDAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLS8vCQlpbnQgblJlZ2lvbnMgPSAwOwotCQkvLyBJIG1hZGUgbGVuZ3RoICJkeW5hbWljIiBhZnRlciBhZGRpbmcgbW9kaWZpY2F0aW9uIHRocmVhZAotCQlmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJaW50IGluZGV4ID0gaTsKLQkJCWlmICghZGlyZWN0aW9uLmJvb2xlYW5WYWx1ZSgpKSB7Ci0JCQkJaW50IGN1cnJlbnRMZW5ndGggPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCQkJaW5kZXggPSAoY3VycmVudExlbmd0aCAtIDEpIC0gaTsKLQkJCX0KLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gY3VycmVudERvY3VtZW50UmVnaW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KGluZGV4KTsKLQkJCWlmIChjdXJyZW50RG9jdW1lbnRSZWdpb24gIT0gcHJldmlvdXNEb2N1bWVudFJlZ2lvbikgewotLy8JCQkJblJlZ2lvbnMrKzsKLQkJCQlwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gY3VycmVudERvY3VtZW50UmVnaW9uOwotCQkJfQotCQkJVGhyZWFkLnlpZWxkKCk7Ci0JCQl0cnkgewotCQkJCVRocmVhZC5zbGVlcChTTEVFUF9USU1FKTsKLQkJCX0KLQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiICAgZnJvbSAiICsgbGVuZ3RoICsgIiBjaGFyYWN0ZXJzLCBmb3VuZCAiICsgLypuUmVnaW9ucyovICIiICsgIiByZWdpb25zIGluICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIG1zZWNzLiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQodHJ1ZSk7Ci0JCWZEb2N1bWVudCA9IGdldERvY3VtZW50KGdldENvbnRlbnQoKSk7Ci0JCWxvbmcgc3RhcnRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlkb0RvY3VtZW50V2Fsa2luZyhuVGhyZWFkcyk7Ci0JCWxvbmcgZW5kVGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJbG9uZyBmaW5hbE92ZXJhbGwgPSBlbmRUaW1lT3ZlcmFsbCAtIHN0YXJ0VGltZU92ZXJhbGw7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdmVyYWxsIHRpbWUgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0RvY3VtZW50V2Fsa2luZyhpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVRocmVhZFtdIHRocmVhZHMgPSBuZXcgVGhyZWFkW25UaHJlYWRzXTsKLQkJYm9vbGVhbiB0b2dnbGUgPSB0cnVlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCWZpbmFsIEJvb2xlYW4gZGlyZWN0aW9uID0gbmV3IEJvb2xlYW4odG9nZ2xlKTsKLQkJCS8vIHRvZ2dsZSBjb250cm9scyB3aGV0aGVyIG1vdmVzIGZyb20gc3RhcnQgdG8gZW5kLCBvciBlbmQgdG8gc3RhcnQKLQkJCS8vIG9mIGRvY3VtZW50LgotCQkJdG9nZ2xlID0gIXRvZ2dsZTsKLQkJCVRocmVhZEdyb3VwIHRocmVhZEdyb3VwID0gbmV3IFRocmVhZEdyb3VwKCJ1bml0IHRlc3RzIik7Ci0JCQlUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZCh0aHJlYWRHcm91cCwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJbGlua1J1bm5lcihkaXJlY3Rpb24sIGZEb2N1bWVudCk7Ci0JCQkJfQotCQkJfSwgKCJzc2UgdW5pdCB0ZXN0IHRocmVhZCAiICsgaSkpOwotCQkJLy8gSSB1c2VkIE1JTl9QUklPUklUWSBzaW5jZSB0aGF0IG1ha2VzIGl0IGVhc2llciB0byAic2VlIiBpbgotCQkJLy8gZGVidWdnZXIgbGlzdCBvZiB0aHJlYWRzCi0JCQl0aHJlYWQuc2V0UHJpb3JpdHkoVGhyZWFkLk1JTl9QUklPUklUWSk7Ci0JCQl0aHJlYWRzW2ldID0gdGhyZWFkOwotCQl9Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJdGhyZWFkc1tpXS5zdGFydCgpOwotCQl9Ci0JCS8vIG5vdyB0aGF0ICJyZWFkZXJzIiBoYXZlIHN0YXJ0ZWQsIHdlJ2xsIHN0YXJ0IGEgbW9kaWZpY2F0aW9uIHRocmVhZAotCQkvLyB0b28KLQkJVGhyZWFkIG1vZGlmeWluZ1RocmVhZCA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCW1vZGlmaXlEb2N1bWVudChmRG9jdW1lbnQpOwotCQkJfQotCQl9LCAoInNzZSB1bml0IHRlc3QgbW9kaWZpY2F0aW9uIHRocmVhZCAiKSk7Ci0JCS8vIEkgdXNlZCBNQVhfUFJJT1JJVFkgdG8gYmUgc3VyZSBsb3RzIG9mIG1vZGlmaWNhdGlvbnMgdGFrZSBwbGFjZQotCQltb2RpZnlpbmdUaHJlYWQuc2V0UHJpb3JpdHkoVGhyZWFkLk1JTl9QUklPUklUWSk7Ci0JCW1vZGlmeWluZ1RocmVhZC5zdGFydCgpOwotCQl0cnkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdGhyZWFkc1tpXS5qb2luKCk7Ci0JCQl9Ci0JCQltb2RpZnlpbmdUaHJlYWQuam9pbigpOwotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0Jdm9pZCBtb2RpZml5RG9jdW1lbnQoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IE5fQ0hBTkdFUyArIDE7IGkrKykgewotCQkJaW50IHJhbmRvbU9mZnNldCA9IHJhbmRvbS5uZXh0SW50KGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJCS8vIDEwMCBqdXN0IHNlZW1zIGxpa2UgYSBnb29kIG1heGltdW0gbGVuZ3RoIHRvIHJlcGxhY2UKLQkJCS8vIChjb3VsZCBwbGF5IHdpdGggaW4gZnV0dXJlKS4KLQkJCWludCByYW5kb21MZW5ndGggPSByYW5kb20ubmV4dEludCgxMDApOwotCQkJLy8gaWYgd2UgImFjY2lkZW50bHkiIGdldCBtb3JlIHRoYW4gdGhlIGxlbmd0aCwganVzdCBza2lwaXQKLQkJCWlmIChyYW5kb21PZmZzZXQgKyByYW5kb21MZW5ndGggPCBkb2N1bWVudC5nZXRMZW5ndGgoKSkgewotCQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIHJhbmRvbU9mZnNldCwgcmFuZG9tTGVuZ3RoLCAidGVzdGluZ3RleHQiKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROVGhyZWFkcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZvciAoaW50IGkgPSAxOyBpIDwgTUFYX1RIUkVBRFM7IGkrKykgewotCQkJaW50IG5UaHJlYWRzID0gaTsKLQkJCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiID4+Pj4tLS0tIE4gVGhyZWFkczogIiArIGkpOwotCQkJfQotCQkJZmxvYXQgd0N1bW0gPSAwOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuVHJpYWxzOyBqKyspIHsKLQkJCQl3Q3VtbSA9IHdDdW1tICsgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aFRocmVhZExvY2FsKG5UaHJlYWRzKTsKLQkJCX0KLQkJfQotCQkvLyBpZiBnZXRzIHRvIGhlcmUgKHdpdGggbm8gZXhjZXB0aW9ucykgYWxsIGlzIG9rLgotCQlhc3NlcnRUcnVlKDAgPT0gMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDdkMDFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEV4YW1wbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci0KLS8qKgotICogU2VlIGh0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL0pEQ1RlY2hUaXBzLzIwMDMvdHQxMjA4Lmh0bWwjMiBmb3IKLSAqIGluZm9ybWF0aXZlIGFydGljbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUaHJlYWRMb2NhbEV4YW1wbGUgewotCi0JLy8gQ3JlYXRlIHRocmVhZCBsb2NhbCBjbGFzcwotCS8vIEluaXRpYWwgdmFsdWUgaXMgYSByYW5kb20gbnVtYmVyIGZyb20gMC05OTkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBNeVRocmVhZExvY2FsIGV4dGVuZHMgVGhyZWFkTG9jYWwgewotCQlwcml2YXRlIFJhbmRvbSBpbm5lclJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCQlwcm90ZWN0ZWQgT2JqZWN0IGluaXRpYWxWYWx1ZSgpIHsKLQkJCXJldHVybiBuZXcgSW50ZWdlcihpbm5lclJhbmRvbS5uZXh0SW50KDEwMDApKTsKLQkJfQotCX0KLQotCS8vIENyZWF0ZSBjbGFzcyB2YXJpYWJsZQotCXN0YXRpYyB2b2xhdGlsZSBpbnQgY291bnRlciA9IDA7Ci0KLQkvLyBEZWZpbmUvY3JlYXRlIHRocmVhZCBsb2NhbCB2YXJpYWJsZQotCXN0YXRpYyBUaHJlYWRMb2NhbCB0aHJlYWRMb2NhbCA9IG5ldyBNeVRocmVhZExvY2FsKCk7Ci0KLQkvLyBGb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCi0JLy8gc3RhdGljIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkvLyBEaXNwbGF5cyB0aHJlYWQgbG9jYWwgdmFyaWFibGUsIGNvdW50ZXIsCi0JLy8gYW5kIHRocmVhZCBuYW1lCi0Jc3RhdGljIHZvaWQgZGlzcGxheVZhbHVlcygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRocmVhZExvY2FsLmdldCgpICsgIlx0IiArIGNvdW50ZXIgKyAiXHQiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQotCQkvLyBFYWNoIHRocmVhZCBpbmNyZW1lbnRzIGNvdW50ZXIKLQkJLy8gRGlzcGxheXMgdmFyaWFibGUgaW5mbwotCQkvLyBBbmQgc2xlZXBzIGZvciB0aGUgcmFuZG9tIGFtb3VudCBvZiB0aW1lCi0JCS8vIEJlZm9yZSBkaXNwbGF5aW5nIGluZm8gYWdhaW4KLQkJUnVubmFibGUgcnVubmVyID0gbmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCXN5bmNocm9uaXplZCAoVGhyZWFkTG9jYWxFeGFtcGxlLmNsYXNzKSB7Ci0JCQkJCWNvdW50ZXIrKzsKLQkJCQl9Ci0JCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCXRyeSB7Ci0JCQkJCVRocmVhZC5zbGVlcCgoKEludGVnZXIpIHRocmVhZExvY2FsLmdldCgpKS5pbnRWYWx1ZSgpKTsKLQkJCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCX0KLQkJCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBBbm90aGVyIGluc3RhbmNlIG9mIGNsYXNzIGNyZWF0ZWQKLQkJLy8gYW5kIHZhbHVlcyBkaXNwbGF5ZWQKLQkJZGlzcGxheVZhbHVlcygpOwotCi0JCS8vIEhlcmUncyB3aGVyZSB0aGUgb3RoZXIgdGhyZWFkcwotCQkvLyBhcmUgYWN0dWFsbHkgY3JlYXRlZAotCQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotCQkJVGhyZWFkIHQgPSBuZXcgVGhyZWFkKHJ1bm5lcik7Ci0JCQl0LnN0YXJ0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRocmVhZExvY2FsRXhhbXBsZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwOGY1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci0KLS8qKgotICogU2VlIGh0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL0pEQ1RlY2hUaXBzLzIwMDMvdHQxMjA4Lmh0bWwjMiBmb3IKLSAqIGluZm9ybWF0aXZlIGFydGljbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSB7Ci0KLQkvLyBDcmVhdGUgdGhyZWFkIGxvY2FsIGNsYXNzCi0JLy8gSW5pdGlhbCB2YWx1ZSBpcyBhIHJhbmRvbSBudW1iZXIgZnJvbSAwLTk5OQotCXByaXZhdGUgY2xhc3MgTXlUaHJlYWRMb2NhbCBleHRlbmRzIFRocmVhZExvY2FsIHsKLQkJcHJpdmF0ZSBSYW5kb20gaW5uZXJSYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkJcHJvdGVjdGVkIE9iamVjdCBpbml0aWFsVmFsdWUoKSB7Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoaW5uZXJSYW5kb20ubmV4dEludCgxMDAwKSk7Ci0JCX0KLQl9Ci0KLQkvLyBDcmVhdGUgY2xhc3MgdmFyaWFibGUKLQlzdGF0aWMgdm9sYXRpbGUgaW50IGNvdW50ZXIgPSAwOwotCi0JLy8gRGVmaW5lL2NyZWF0ZSB0aHJlYWQgbG9jYWwgdmFyaWFibGUKLQlUaHJlYWRMb2NhbCB0aHJlYWRMb2NhbCA9IG5ldyBNeVRocmVhZExvY2FsKCk7Ci0KLQkvLyBGb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCi0JLy8gc3RhdGljIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkvLyBEaXNwbGF5cyB0aHJlYWQgbG9jYWwgdmFyaWFibGUsIGNvdW50ZXIsCi0JLy8gYW5kIHRocmVhZCBuYW1lCi0Jdm9pZCBkaXNwbGF5VmFsdWVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGhyZWFkTG9jYWwuZ2V0KCkgKyAiXHQiICsgY291bnRlciArICJcdCIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCQluZXcgVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUoKS5zdGFydFJ1bigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdGFydFJ1bigpIHsKLQotCQkvLyBFYWNoIHRocmVhZCBpbmNyZW1lbnRzIGNvdW50ZXIKLQkJLy8gRGlzcGxheXMgdmFyaWFibGUgaW5mbwotCQkvLyBBbmQgc2xlZXBzIGZvciB0aGUgcmFuZG9tIGFtb3VudCBvZiB0aW1lCi0JCS8vIEJlZm9yZSBkaXNwbGF5aW5nIGluZm8gYWdhaW4KLQkJUnVubmFibGUgcnVubmVyID0gbmV3IFJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCQljb3VudGVyKys7Ci0JCQkJfQotCQkJCWRpc3BsYXlWYWx1ZXMoKTsKLQkJCQl0cnkgewotCQkJCQlUaHJlYWQuc2xlZXAoKChJbnRlZ2VyKSB0aHJlYWRMb2NhbC5nZXQoKSkuaW50VmFsdWUoKSk7Ci0JCQkJCWRpc3BsYXlWYWx1ZXMoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0KLQkJLy8gQW5vdGhlciBpbnN0YW5jZSBvZiBjbGFzcyBjcmVhdGVkCi0JCS8vIGFuZCB2YWx1ZXMgZGlzcGxheWVkCi0JCWRpc3BsYXlWYWx1ZXMoKTsKLQotCQkvLyBIZXJlJ3Mgd2hlcmUgdGhlIG90aGVyIHRocmVhZHMKLQkJLy8gYXJlIGFjdHVhbGx5IGNyZWF0ZWQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCVRocmVhZCB0ID0gbmV3IFRocmVhZChydW5uZXIpOwotCQkJdC5zdGFydCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9BY2Nlc3Nvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2ZiY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3V0aWwvQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy51dGlsOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3IgYWNjZXNzaW5nIGNsYXNzZXMgYW5kIG1lbWJlcnMgd2hpY2ggY2Fubm90Ci0gKiBiZSBhY2Nlc3NlZCB1c2luZyBzdGFuZGFyZCBKYXZhIGFjY2VzcyBjb250cm9sIGxpa2UgcHJpdmF0ZQotICogb3IgcGFja2FnZSB2aXNpYmxlIGVsZW1lbnRzLgotICoKLSAqIEBzaW5jZSAzLjEKLSAqLwotcHVibGljIGNsYXNzIEFjY2Vzc29yIHsKLQotCS8qKiBUaGUgY2xhc3MgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgQ2xhc3MgZkNsYXNzOwotCS8qKiBUaGUgaW5zdGFuY2UgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgT2JqZWN0IGZJbnN0YW5jZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoT2JqZWN0IGluc3RhbmNlLCBDbGFzcyBjbGF6eikgewotCQlvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhenopOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQlmQ2xhc3M9IGNsYXp6OwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCUFzc2VydC5pc05vdE51bGwoaW5zdGFuY2UpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXNzTmFtZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NMb2FkZXIpOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiA8cD4KLQkgKiBJbiBvcmRlciB0byBnZXQgdGhlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4KLQkgKiBhcmd1bWVudHMgdGhleSBtdXN0IGFsbCBiZSBpbnN0YW5jZW9mIE9iamVjdC4gVXNlCi0JICoge0BsaW5rICNBY2Nlc3NvcihTdHJpbmcsIENsYXNzTG9hZGVyLCBDbGFzc1tdLCBPYmplY3RbXSl9IGlmIHRoaXMKLQkgKiBpcyBub3QgdGhlIGNhc2UuPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgT2JqZWN0W10gY29uc3RydWN0b3JBcmdzKSB7Ci0JCXRoaXMoY2xhc3NOYW1lLCBjbGFzc0xvYWRlciwgZ2V0VHlwZXMoY29uc3RydWN0b3JBcmdzKSwgY29uc3RydWN0b3JBcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JUeXBlcyB0aGUgdHlwZXMgb2YgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvckFyZ3MgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgQ2xhc3NbXSBjb25zdHJ1Y3RvclR5cGVzLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQ29uc3RydWN0b3IgY29uc3RydWN0b3I9IG51bGw7Ci0JCXRyeSB7Ci0JCQljb25zdHJ1Y3Rvcj0gZkNsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3JUeXBlcyk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlMikgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwoY29uc3RydWN0b3IpOwotCQljb25zdHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJZkluc3RhbmNlPSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShjb25zdHJ1Y3RvckFyZ3MpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCB0byBhY2Nlc3Mgc3RhdGljIHN0dWZmLgotCSAqIDwvcD4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyBhbGwgdGhvc2UgYXJndW1lbnRzIG11c3QgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI2ludm9rZShTdHJpbmcsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbWV0aG9kIG5hbWUKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqIEByZXR1cm4gdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGludm9rZShTdHJpbmcgbWV0aG9kTmFtZSwgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCXJldHVybiBpbnZva2UobWV0aG9kTmFtZSwgZ2V0VHlwZXMoYXJndW1lbnRzKSwgYXJndW1lbnRzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnZva2VzIHRoZSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWUgYW5kIGFyZ3VtZW50cy4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSB0eXBlcyB0aGUgYXJndW1lbnQgdHlwZXMKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzCi0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHR5cGVzLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJTWV0aG9kIG1ldGhvZD0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1ldGhvZD0gZkNsYXNzLmdldERlY2xhcmVkTWV0aG9kKG1ldGhvZE5hbWUsIHR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlBc3NlcnQuaXNOb3ROdWxsKG1ldGhvZCk7Ci0JCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJcmV0dXJuIG1ldGhvZC5pbnZva2UoZkluc3RhbmNlLCBhcmd1bWVudHMpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIE9iamVjdCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEJvb2xlYW4oZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIGludCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEludChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldChmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRCb29sZWFuKGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SW50KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0SW50KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpdmF0ZSBGaWVsZCBnZXRGaWVsZChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBudWxsOwotCQl0cnkgewotCQkJZmllbGQ9IGZDbGFzcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoRmllbGRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXJldHVybiBmaWVsZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGdldFR5cGVzKE9iamVjdFtdIG9iamVjdHMpIHsKLQkJaWYgKG9iamVjdHMgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCWludCBsZW5ndGg9IG9iamVjdHMubGVuZ3RoOwotCQlDbGFzc1tdIGNsYXNzZXM9IG5ldyBDbGFzc1tsZW5ndGhdOwotCQlmb3IgKGludCBpPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCUFzc2VydC5pc05vdE51bGwob2JqZWN0c1tpXSk7Ci0JCQljbGFzc2VzW2ldPSBvYmplY3RzW2ldLmdldENsYXNzKCk7Ci0JCX0KLQkJcmV0dXJuIGNsYXNzZXM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZhaWwoKSB7Ci0JCUFzc2VydC5pc1RydWUoZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3V0aWwvVGVzdEphclV0aWxpdGllcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9UZXN0SmFyVXRpbGl0aWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTVkZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9UZXN0SmFyVXRpbGl0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkphclV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuU1NFTW9kZWxUZXN0c1BsdWdpbjsKLQotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5KYXJVdGlsaXRpZXMKLSAqLwotcHVibGljIGNsYXNzIFRlc3RKYXJVdGlsaXRpZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBmRXhwZWN0ZWROYW1lcyA9IG5ldyBTdHJpbmdbXXsiLnByb2plY3QiLCAiYWJvdXQuaHRtbCIsICJidWlsZC5wcm9wZXJ0aWVzIiwgInBsdWdpbi5wcm9wZXJ0aWVzIiwgInRlc3QueG1sIn07Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfSkFSX1VUSUxJVElFU19QUk9KRUNUID0gIlRlc3RKYXJVdGlsaXRpZXMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0pBUl9VVElMSVRJRVNfVEVTVEZJTEVfSkFSID0gInRlc3RmaWxlLmphciI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RGSUxFX0JVTkRMRV9FTlRSWSA9ICJyZXNvdXJjZXMvdGVzdGZpbGUuamFyIjsKLQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aChmdWxsUGF0aCk7Ci0JCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJaW50IGkgPSAtMTsKLQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQl9Ci0JCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbigiY2FuJ3QgZmluZCAiICsgZW50cnluYW1lKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJdHJ5IHsKLQkJCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBTU0VNb2RlbFRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbnVsbCwgZSkpOwotCQkJCX0KLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJldHVybiBmaWxlWzBdOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBzaW1wbGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgLSB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdAotCSAqIEByZXR1cm4KLQkgKi8KLQlzdGF0aWMgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgbmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQotCXB1YmxpYyBUZXN0SmFyVXRpbGl0aWVzKCkgewotCQlzdXBlcigiSmFyVXRpbGl0aWVzIFRlc3RzIik7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcmVhZENvbnRlbnRzKElucHV0U3RyZWFtIGlzKSB7Ci0JCVN0cmluZyBjaGFyc2V0ID0gImlzby04ODU5LTEiOwotCi0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlSZWFkZXIgcmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcywgY2hhcnNldCk7Ci0JCQljaGFyW10gcmVhZEJ1ZmZlciA9IG5ldyBjaGFyWzIwNDhdOwotCQkJaW50IG4gPSByZWFkZXIucmVhZChyZWFkQnVmZmVyKTsKLQkJCXdoaWxlIChuID4gMCkgewotCQkJCXMuYXBwZW5kKHJlYWRCdWZmZXIsIDAsIG4pOwotCQkJCW4gPSByZWFkZXIucmVhZChyZWFkQnVmZmVyKTsKLQkJCX0KLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpZiAoaXMgIT0gbnVsbCkgewotCQkJCQlpcy5jbG9zZSgpOwotCQkJCX0KLQkJCQlpZiAocmVhZGVyICE9IG51bGwpCi0JCQkJCXJlYWRlci5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gbm90aGluZyB0byBkbwotCQkJfQotCQl9Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChnZXROYW1lKCkpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7Ci0JCQljb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFRFU1RGSUxFX0JVTkRMRV9FTlRSWSwgZ2V0SmFyRmlsZSgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldEphckZpbGUoKSB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsKLQkJcmV0dXJuIHByb2plY3QuZ2V0RmlsZShURVNUX0pBUl9VVElMSVRJRVNfVEVTVEZJTEVfSkFSKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsKLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbnRyeUNvdW50RnJvbUZpbGVzeXN0ZW0oKSB7Ci0JCVN0cmluZ1tdIGVudHJ5TmFtZXMgPSBKYXJVdGlsaXRpZXMuZ2V0RW50cnlOYW1lcyhnZXRKYXJGaWxlKCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbmNvcnJlY3QgbnVtYmVyIG9mIGVudHJpZXMiLCA1LCBlbnRyeU5hbWVzLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudHJ5Q291bnRGcm9tTWlzc2luZ0ZpbGUoKSB7Ci0JCVN0cmluZ1tdIG5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoVEVTVF9KQVJfVVRJTElUSUVTX1BST0pFQ1QgKyAiL25vbmV4aXN0ZW50LmphciIpOwotCQlhc3NlcnROb3ROdWxsKCJudWxsIG5hbWVzIiwgbmFtZXMpOwotCQlhc3NlcnRFcXVhbHMoImVudHJpZXMgcmV0dXJuZWQgZm9yIG1pc3NpbmcgZmlsZSIsIDAsIG5hbWVzLmxlbmd0aCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlDb3VudEZyb21Xb3Jrc3BhY2UoKSB7Ci0JCVN0cmluZ1tdIGVudHJ5TmFtZXMgPSBKYXJVdGlsaXRpZXMuZ2V0RW50cnlOYW1lcyhnZXRKYXJGaWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImluY29ycmVjdCBudW1iZXIgb2YgZW50cmllcyIsIDUsIGVudHJ5TmFtZXMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlDb3VudFdpdGhEaXJlY3Rvcmllc0Zyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSwgZmFsc2UpOwotCQlhc3NlcnRFcXVhbHMoImluY29ycmVjdCBudW1iZXIgb2YgZW50cmllcyIsIDYsIGVudHJ5TmFtZXMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlOYW1lc0Zyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7Ci0JCUNvbGxlY3Rpb24gbmFtZXMgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoZW50cnlOYW1lcykpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZkV4cGVjdGVkTmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoIm1pc3NpbmcgbmFtZSBvZiBlbnRyeTogIiArIGZFeHBlY3RlZE5hbWVzW2ldLCBuYW1lcy5jb250YWlucyhmRXhwZWN0ZWROYW1lc1tpXSkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudHJ5TmFtZXNGcm9tV29ya3NwYWNlKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpKTsKLQkJQ29sbGVjdGlvbiBuYW1lcyA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChlbnRyeU5hbWVzKSk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRXhwZWN0ZWROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0VHJ1ZSgibWlzc2luZyBuYW1lIG9mIGVudHJ5OiAiICsgZkV4cGVjdGVkTmFtZXNbaV0sIG5hbWVzLmNvbnRhaW5zKGZFeHBlY3RlZE5hbWVzW2ldKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50cnlOYW1lc1dpdGhEaXJlY3Rvcmllc0Zyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmdbXSBlbnRyeU5hbWVzID0gSmFyVXRpbGl0aWVzLmdldEVudHJ5TmFtZXMoZ2V0SmFyRmlsZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSwgZmFsc2UpOwotCQlDb2xsZWN0aW9uIG5hbWVzID0gbmV3IEFycmF5TGlzdChBcnJheXMuYXNMaXN0KGVudHJ5TmFtZXMpKTsKLQotCQlTdHJpbmdbXSBleHBlY3RlZE5hbWVzID0gbmV3IFN0cmluZ1tdeyIucHJvamVjdCIsICJhYm91dC5odG1sIiwgImJ1aWxkLnByb3BlcnRpZXMiLCAicGx1Z2luLnByb3BlcnRpZXMiLCAidGVzdC54bWwifTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRUcnVlKCJtaXNzaW5nIG5hbWUgb2YgZW50cnk6ICIgKyBlbnRyeU5hbWVzW2ldLCBuYW1lcy5jb250YWlucyhlbnRyeU5hbWVzW2ldKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgibWlzc2luZyBuYW1lIG9mIGZvbGRlciBlbnRyeTogZW1wdHkvIiwgbmFtZXMuY29udGFpbnMoImVtcHR5LyIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZEZyb21GaWxlc3lzdGVtKCkgewotCQlTdHJpbmcgbG9jYXRpb24gPSBnZXRKYXJGaWxlKCkuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOwotCQlTdHJpbmcgY29udGVudHMgPSByZWFkQ29udGVudHMoSmFyVXRpbGl0aWVzLmdldElucHV0U3RyZWFtKGxvY2F0aW9uLCAicGx1Z2luLnByb3BlcnRpZXMiKSk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnRzIGxvYWRlZCIsIGNvbnRlbnRzKTsKLQkJYXNzZXJ0VHJ1ZSgibm90IGVub3VnaCBjb250ZW50cyByZWFkIiwgY29udGVudHMubGVuZ3RoKCkgPiA0MCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIG5vdCBhcyBleHBlY3RlZCIgKyBjb250ZW50cy5zdWJzdHJpbmcoMCwgNDApLCBjb250ZW50cy5zdGFydHNXaXRoKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIikpOwotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZEZyb21NaXNzaW5nRmlsZSgpIHsKLQkJSW5wdXRTdHJlYW0gY29udGVudHMgPSBKYXJVdGlsaXRpZXMuZ2V0SW5wdXRTdHJlYW0oVEVTVF9KQVJfVVRJTElUSUVTX1BST0pFQ1QgKyAiL25vbmV4aXN0ZW50LmphciIsICJwbHVnaW4ucHJvcGVydGllcyIpOwotCQlhc3NlcnROdWxsKCJjb250ZW50cyBsb2FkZWQiLCBjb250ZW50cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlYWRGcm9tU3VwcG9ydGVkVVJMKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IGdldEphckZpbGUoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCVN0cmluZyBjb250ZW50cyA9IHJlYWRDb250ZW50cyhKYXJVdGlsaXRpZXMuZ2V0SW5wdXRTdHJlYW0obmV3IFVSTCgiamFyOmZpbGU6IiArIGxvY2F0aW9uICsgIiEvcGx1Z2luLnByb3BlcnRpZXMiKSkpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50cyBsb2FkZWQiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoIm5vdCBlbm91Z2ggY29udGVudHMgcmVhZCIsIGNvbnRlbnRzLmxlbmd0aCgpID4gMCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnRzIG5vdCBhcyBleHBlY3RlZCIsIGNvbnRlbnRzLnN0YXJ0c1dpdGgoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlYWRGcm9tVW5zdXBwb3J0ZWRVUkwoKSB7Ci0JCVVSTCBlbnRyeSA9IFNTRU1vZGVsVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KCJhYm91dC5odG1sIik7Ci0JCWFzc2VydE5vdE51bGwoIm51bGwgVVJMIHRvIGFib3V0Lmh0bWwiLCBlbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gSmFyVXRpbGl0aWVzLmdldElucHV0U3RyZWFtKGVudHJ5KTsKLQkJYXNzZXJ0Tm90TnVsbCgibnVsbCBpbnB1dCBzdHJlYW0gdG8gIitlbnRyeSwgaW5wdXRTdHJlYW0pOwotCQlTdHJpbmcgY29udGVudHMgPSByZWFkQ29udGVudHMoaW5wdXRTdHJlYW0pOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50cyBsb2FkZWQiLCBjb250ZW50cyk7Ci0JCWFzc2VydFRydWUoIm5vdCBlbm91Z2ggY29udGVudHMgcmVhZC4gQ29udGVudHMgTGVuZ3RoIHdhcyAiICsgY29udGVudHMubGVuZ3RoKCkgKyAiIGJ1dCBleHBlY3RlZCBtb3JlIHRoYW4gNzUwLiIsIGNvbnRlbnRzLmxlbmd0aCgpID4gNzUwKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiArIGNvbnRlbnRzLnN1YnN0cmluZygwLCA3NSksIGNvbnRlbnRzLmluZGV4T2YoIkRPQ1RZUEUiKSA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWFkRnJvbVdvcmtzcGFjZSgpIHsKLQkJSVJlc291cmNlIGphciA9IGdldEphckZpbGUoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gcmVhZENvbnRlbnRzKEphclV0aWxpdGllcy5nZXRJbnB1dFN0cmVhbShqYXIsICJwbHVnaW4ucHJvcGVydGllcyIpKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudHMgbG9hZGVkIiwgY29udGVudHMpOwotCQlhc3NlcnRUcnVlKCJub3QgZW5vdWdoIGNvbnRlbnRzIHJlYWQiLCBjb250ZW50cy5sZW5ndGgoKSA+IDQwKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiArIGNvbnRlbnRzLnN1YnN0cmluZygwLCA0MCksIGNvbnRlbnRzLnN0YXJ0c1dpdGgoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTNlNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0KLSAgICA8IS0tIAotICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlLgotICAgICAgICAgKGlmIHRoZXJlIGlzLCBsZXQgdXMga25vdyBpZiB0aGUgc2NyaXB0IGNhbiBiZSBpbXByb3ZlZC4pCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAtLT4KLSAgICAKLSAgICA8IS0tIAotICAgICAgICAgRXZlcnkgc3VpdGUgbmVlZHMgdG8gc3BlY2lmeSB0aHJlZSB0aGluZzogCi0gICAgICAgICAgICAgcGx1Z2luLW5hbWUsIAotICAgICAgICAgICAgIGNsYXNzbmFtZSAtIHRoYXQgcHJvdmlkZXMgdGhlIHN1aXRlIHRvIHRlc3QsIGFuZCAKLSAgICAgICAgICAgICB0ZXN0VHlwZSAtIGVpdGhlciBjb3JlLXRlc3QsIG9yIHVpLXRlc3QuIAotICAgICAgICAgVGhlcmUgaXMgYW4gb3B0aW9uYWwgZXh0cmFWTWFyZ3MgcHJvcGVydHkgdGhhdCBzb21lIHRlc3RzIG5lZWQgdG8gdXNlIGluIG9yZGVyIHRvIHNwZWNpZnkgIAotICAgICAgICAgZXh0cmEsIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIHRvIHRoZSBWTSB3aGVuIGl0IHJ1bnMuIElmIG5vdCBuZWVkLCBubyBuZWVkIHRvIHNwZWNpZnkgaXQuIAotICAgIC0tPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLSAgICAKLSAgICA8IS0tIHNvbWUgdGVzdCBzdWl0ZXMgbmVlZCB0byBhZGQgc3BlY2lhbCB2bSBhcmd1bWVudHMgd2hlbiB0aGV5IHJ1bi4gVGhpcyBpcyBqdXN0IGFuIGV4YW1wbGUuCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImV4dHJhVk1hcmdzIgotICAgICAgICB2YWx1ZT0iLURqc2ZSdW50aW1lSmFyc0RpcmVjdG9yeVYxLjE9JHt0ZXN0RGlyfS8ke2pzZjEuMURpcn0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0iZXh0cmFWTWFyZ3MgJHtleHRyYVZNYXJnc30iIC8+Ci0gICAgLS0+Ci0KLSAgICA8IS0tIAotICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93LgotICAgICAgICAgKGlmIHRoZXJlIGlzLCBsZXQgdXMga25vdyBpZiB0aGUgc2NyaXB0IGNhbiBiZSBpbXByb3ZlZC4pCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAtLT4KLSAgICAKLSAgICA8IS0tIAotICAgICAgICAgVGhlcmUgYXJlIHNvbWUgcHJvcGVydGllcyB0aGF0IG11c3QgYmUgcHJvdmlkZWQgYnkgY2FsbGVyLiAKLSAgICAtLT4KLSAgICA8ZmFpbAotICAgICAgICBtZXNzYWdlPSJFcnJvcjogbWlzc2luZyBwcm9wZXJ0eS4gZWNsaXBzZS1ob21lIG11c3QgYmUgcHJvdmlkZWQiCi0gICAgICAgIHVubGVzcz0iZWNsaXBzZS1ob21lIiAvPgotICAgIDxmYWlsCi0gICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBidWlsZERpcmVjdG9yeSBtdXN0IGJlIHByb3ZpZGVkIgotICAgICAgICB1bmxlc3M9ImJ1aWxkRGlyZWN0b3J5IiAvPgotICAgIDxmYWlsCi0gICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBidWlsZExhYmVsIG11c3QgYmUgcHJvdmlkZWQiCi0gICAgICAgIHVubGVzcz0iYnVpbGRMYWJlbCIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0KLSAgICAgIDwhLS0gCi0gICAgVGhpcyBpbml0IHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yCi0gICAgICBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cwotICAgICAgc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIEhlcmUgaXQncyBhIGdvb2QgaWRlYSAKLSAgICB0byBkZWxldGUgdGhpbmdzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGNyZWF0ZWQgaWYgdGhlIHRlc3QgaGFzIGFscmVhZHkgYmVlbiAKLSAgICByYW4sIGp1c3QgaW4gY2FzZSB0aGUgdGVzdCBpcyBiZWluZyByZS1yYW4uIAotICAgIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICAKLSAgICAgICAgICAgIDwhLS0gCi0gICAgICAgICBtYWtlIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQKLSAgICAgICAgIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLCBpZiBpdCBkb2VzIGV4aXN0Ci0gICAgICAgIC0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotICAgICAgICA8bWtkaXIKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSAKLSAgICAgIFRoaXMgc3VpdGUgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uCi0gICAgLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJzdWl0ZSI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotICAgIDwvdGFyZ2V0PgotCi0gICAgIDwhLS0gCi0gICAgIFRoaXMgY2xlYW4gdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlcgotICAgICBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIAotICAgICBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQsIGlmIHJlcXVpcmVkLiBCdXQsIAotICAgICBpdCdzIHVzdWFsbHkgYmVzdCB0byBsZWF2ZSBpdCBhbGwsIGluIGNhc2UgeW91J2QgbGlrZSB0byBpbnNwZWN0IGl0IAotICAgICBhZnRlciBhIGZhaWxlZCBydW4uIEl0IHdpbGwgYmUgZGVsZXRlZCBldmVudHVhbGx5IGJ5IHRoZSBuZXh0IGNsZWFuIGJ1aWxkLiAKLSAgICAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9ImNsZWFudXAiPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIAotICAgICAgIFRoaXMgcnVuIHRhcmdldCBpcyB0aGUgbWFzdGVyIHRhcmdldCB0aGF0IGdldCdzIGFsbCB0aGUgd29yayBkb25lLiAKLSAgICAgICBNb3N0IGFjdGl2aXR5IGlzIGFjdHVhbGx5IGRvbmUgaW4gdGhlICdkZXBlbmRzJyB0YXNrcywgYnV0IGFueSAKLSAgICAgICBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIAotICAgICAgIHNob3VsZCBnbyBoZXJlLCBzdWNoIGFzIGNvcHlpbmcgdGhlIHJlc3VsdHMgdG8gYSBjb21tb24gJ3NhdmUnIAotICAgICAgIGRpcmVjdG9yeS4gCi0gICAgLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTZlMmFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImpmYWNlLnRleHQudGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXh0LnRlc3RzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkZmM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotc3NlZWRpdG9ydGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuc3NlZWRpdG9ydGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA3MmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTUxMzBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHNzZWVkaXRvcnRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5TU0VUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUsCi0gY29tLmlibS5pY3UKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI5MmZlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc3NlZWRpdG9ydGVzdHMuamFyID0gc3JjLyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamZhY2UudGV4dC50ZXN0cy8sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudGVzdHMvCi1vdXRwdXQuc3NlZWRpdG9ydGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzc2VlZGl0b3J0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFBhaXJNYXRjaGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ2ZTM5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFBhaXJNYXRjaGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBDaHJpc3RpYW4gUGxlc25lciBIYW5zZW4gKHBsZXNuZXJAcXVlbnRhLm9yZykgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5GYXN0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5TaW5nbGVMaW5lUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklDaGFyYWN0ZXJQYWlyTWF0Y2hlcjsKLQotLyoqCi0gKiBHZW5lcmljIHRlc3Qgb2Ygc2ltcGxlIGNoYXJhY3RlciBwYWlyIG1hdGNoZXJzCi0gKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IGNoYXJhY3RlciBwYWlyIG1hdGNoZXIuCi0JICogCi0JICogQHBhcmFtIGNoYXJzIHRoZSBjaGFyYWN0ZXJzIHRvIG1hdGNoCi0JICogQHJldHVybiB0aGUgY2hhcmFjdGVyIHBhaXIgbWF0Y2hlcgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgY3JlYXRlTWF0Y2hlcihmaW5hbCBTdHJpbmcgY2hhcnMpOwotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGFydGl0aW9uaW5nIHRyZWF0ZWQgYnkgdGhlIG1hdGNoZXIuCi0JICogCi0JICogQHJldHVybiB0aGUgcGFydGl0aW9uCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREb2N1bWVudFBhcnRpdGlvbmluZygpOwotCi0JcHVibGljIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBYnN0cmFjdFBhaXJNYXRjaGVyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKiAtLS0gVCBlIHMgdCBzIC0tLSAqLwotCi0JLyoqIFRlc3RzIHRoYXQgdGhlIHRlc3QgY2FzZSByZWFkZXIgd29ya3MgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGVzdENhc2VSZWFkZXIoKSB7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIjKCApJSIsIDMsICAwLCAgIiggKSIpOwotCQlwZXJmb3JtUmVhZGVyVGVzdCgiJSggKSMiLCAwLCAgMywgICIoICkiKTsKLQkJcGVyZm9ybVJlYWRlclRlc3QoIiggKSUiLCAgMywgIC0xLCAiKCApIik7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIjJSIsICAgIDAsICAwLCAgIiIpOwotCX0KLQotCS8qKgotCSAqIFZlcnkgc2ltcGxlIGNoZWNrcy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZU1hdGNoU2FtZU1hdGNoZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIyggICApJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiNbICAgXSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjeyAgIH0lIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgICApIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIlslICAgXSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ7JSAgIH0jIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIFZlcnkgc2ltcGxlIGNoZWNrcy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZU1hdGNoRGlmZmVyZW50TWF0Y2hlcnMoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIjKCAgICklIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIiNbICAgXSUiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiI3sgICB9JSIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIoJSAgICkjIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIlslICAgXSMiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAieyUgICB9IyIpOwotCX0KLQotCS8qKgotCSAqIENsb3NlIG1hdGNoZXMuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDbG9zZU1hdGNoZXMoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIygpJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjKCgpKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSgpKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoKCUpIykiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoIygpJSkiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0KLQkvKioKLQkgKiBDaGVja3Mgb2Ygc2ltcGxlIHNpdHVhdGlvbnMgd2hlcmUgbm8gbWF0Y2hlcyBzaG91bGQgYmUgZm91bmQuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbmNvbXBsZXRlTWF0Y2goKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiJSggICkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoICUgKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiggICUpIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiJSIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgaXQgZG9lc24ndCBtYXRjaCBhY3Jvc3MgZGlmZmVyZW50IHBhcnRpdGlvbnMuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQYXJ0aXRpb25lZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSB8YSBhfCApIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoIHxhIGF8ICklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGIgIyggKSUgYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoIHxiICklIGJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgfGIgKSBifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhICggYXwgKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YSAoJSBhfCApIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMgIyggY3wgKSAoIHxjICklIGN8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMgKCUgY3wgKSAoIHxjICkjIGN8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgfGEgKSBhfCB8YiApIGJ8IHxjICkgY3wgKSMiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0aGF0IGl0IHdvcmtzIHByb3Blcmx5IG5leHQgdG8gcGFydGl0aW9uIGJvdW5kYXJpZXMuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUaWdodFBhcnRpdGlvbmVkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIih8YiklYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJXxiKWJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGEoYXwpJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhKCVhfCkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YyMoY3wpKHxjKSVjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjKCVjfCkofGMpI2N8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCV8YSlhfHxiKWJ8fGMpY3wpIyIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKiogVGVzdCB0aGF0IG5lc3Rpbmcgd29ya3MgcHJvcGVybHkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TmVzdGluZygpIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICMoICggKCApICkgKCApICklICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCUgKCAoICkgKSAoICkgKSMgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAjKCB7ICggKSB9IFsgXSApJSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICglIHsgKCApIH0gWyBdICkjICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCAjeyAoICkgfSUgWyBdICkgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAoIHslICggKSB9IyBbIF0gKSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiMoYyhkKGUpZilnKGgpaSklailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKCVjKGQoZSlmKWcoaClpKSNqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIjKGN7ZChlKWZ9Z1toXWkpJWopayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiglY3tkKGUpZn1nW2hdaSkjailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKGMje2QoZSlmfSVnW2hdaSlqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIoY3slZChlKWZ9I2dbaF1pKWopayIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGEgZmV3IGJvdW5kYXJ5IGNvbmRpdGlvbnMuCi0JICogCi0JICogKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJvdW5kYXJpZXMoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCWZpbmFsIFN0cmluZ0RvY3VtZW50IGRvYz0gbmV3IFN0cmluZ0RvY3VtZW50KCJhYmNkZWZnaGlqa2wiKTsKLQkJYXNzZXJ0TnVsbChtYXRjaGVyLm1hdGNoKG51bGwsIDApKTsKLQkJYXNzZXJ0TnVsbChtYXRjaGVyLm1hdGNoKGRvYywgLTEpKTsKLQkJYXNzZXJ0TnVsbChtYXRjaGVyLm1hdGNoKGRvYywgZG9jLmdldExlbmd0aCgpICsgMSkpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTU2NDI2KCkgewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9PD4iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgIyggYSA8IGIgKSUgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICglIGEgPCBiICkjICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAjKCBhID4gYiApJSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCUgYSA+IGIgKSMgIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qIC0tLSBVIHQgaSBsIGkgdCBpIGUgcyAtLS0gKi8KLQotCS8qKgotCSAqIENoZWNrcyB0aGF0IHRoZSB0ZXN0IGNhc2UgcmVhZGVyIHJlYWRzIHRoZSB0ZXN0IGNhc2UgYXMgc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSB0ZXN0U3RyaW5nIHRoZSBzdHJpbmcgdG8gdGVzdAotCSAqIEBwYXJhbSBleHBlY3RlZFBvcyB0aGUgZXhwZWN0ZWQgcG9zaXRpb24KLQkgKiBAcGFyYW0gZXhwZWN0ZWRNYXRjaCB0aGUgZXhwZWN0ZWQgbWF0Y2gKLQkgKiBAcGFyYW0gZXhwZWN0ZWRTdHJpbmcgdGhlIGV4cGVjdGVkIHN0cmluZwotCSAqLwotCXByaXZhdGUgdm9pZCBwZXJmb3JtUmVhZGVyVGVzdChTdHJpbmcgdGVzdFN0cmluZywgaW50IGV4cGVjdGVkUG9zLCBpbnQgZXhwZWN0ZWRNYXRjaCwgU3RyaW5nIGV4cGVjdGVkU3RyaW5nKSB7Ci0JCVRlc3RDYXNlIHQwPSBjcmVhdGVUZXN0Q2FzZSh0ZXN0U3RyaW5nKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUG9zLCB0MC5mUG9zKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTWF0Y2gsIHQwLmZNYXRjaCk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgdDAuZlN0cmluZyk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2tzIHRoYXQgdGhlIGdpdmVuIG1hdGNoZXIgbWF0Y2hlcyB0aGUgaW5wdXQgYXMgc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSBtYXRjaGVyIHRoZSBtYXRjaGVyCi0JICogQHBhcmFtIHRlc3RDYXNlIHRoZSB0ZXN0IHN0cmluZwotCSAqLwotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1NYXRjaChmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlciwgZmluYWwgU3RyaW5nIHRlc3RDYXNlKSB7Ci0JCWZpbmFsIFRlc3RDYXNlIHRlc3Q9IGNyZWF0ZVRlc3RDYXNlKHRlc3RDYXNlKTsKLQkJbWF0Y2hlci5jbGVhcigpOwotCQlmaW5hbCBJUmVnaW9uIHJlZ2lvbj0gbWF0Y2hlci5tYXRjaCh0ZXN0LmdldERvY3VtZW50KCksIHRlc3QuZlBvcyk7Ci0JCWlmICh0ZXN0LmZNYXRjaCA9PSAtMSkgewotCQkJLy8gaWYgbm8gbWF0Y2ggcG9pbnQgaGFzIGJlZW4gc3BlY2lmaWVkIHRoZXJlIHNob3VsZCBiZQotCQkJLy8gbm8gbWF0Y2gKLQkJCWlmIChyZWdpb24gIT0gbnVsbCkgU3lzdGVtLm91dC5wcmludGxuKHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0JCQlhc3NlcnROdWxsKHJlZ2lvbik7Ci0JCX0gZWxzZSB7Ci0JCQlhc3NlcnROb3ROdWxsKHJlZ2lvbik7Ci0JCQlmaW5hbCBib29sZWFuIGlzRm9yd2FyZD0gdGVzdC5mUG9zID4gdGVzdC5mTWF0Y2g7Ci0JCQlhc3NlcnRFcXVhbHMoaXNGb3J3YXJkLCBtYXRjaGVyLmdldEFuY2hvcigpID09IElDaGFyYWN0ZXJQYWlyTWF0Y2hlci5SSUdIVCk7Ci0JCQkvLyBJZiB0aGUgbWF0Y2ggaXMgZm9yd2FyZCwgdGhlIGN1cnNlciBpcyBvbmUgY2hhcmFjdGVyCi0JCQkvLyBhZnRlciB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoLCBzbyB3ZSBuZWVkIHRvIGNvdW50IG9uZQotCQkJLy8gc3RlcCBiYWNrd2FyZHMKLQkJCWZpbmFsIGludCBvZmZzZXQ9IGlzRm9yd2FyZCA/IHRlc3QuZ2V0T2Zmc2V0KCkgOiB0ZXN0LmdldE9mZnNldCgpIC0gMTsKLQkJCWZpbmFsIGludCBsZW5ndGg9IGlzRm9yd2FyZCA/IHRlc3QuZ2V0TGVuZ3RoKCkgOiB0ZXN0LmdldExlbmd0aCgpICsgMTsKLQkJCWFzc2VydEVxdWFscyhsZW5ndGgsIHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQlhc3NlcnRFcXVhbHMob2Zmc2V0LCByZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1NYXRjaChmaW5hbCBTdHJpbmcgZGVsaW1zLCBmaW5hbCBTdHJpbmcgdGVzdENhc2UpIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoZGVsaW1zKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsIHRlc3RDYXNlKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIHRleHQgY2FzZSBmcm9tIGEgc3RyaW5nLiBJbiB0aGUgZ2l2ZW4gc3RyaW5nIGEgJyUnIHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uIG9mIHRoZQotCSAqIGN1cnNvciBhbmQgYSAnIycgcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgdGhlIGV4cGVjdGVkIG1hdGNoaW5nIGNoYXJhY3Rlci4KLQkgKiAKLQkgKiBAcGFyYW0gc3RyIHRoZSBzdHJpbmcgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGVzdCBjYXNlCi0JICogQHJldHVybiB0aGUgY3JlYXRlZCB0ZXN0IGNhc2UKLQkgKi8KLQlwdWJsaWMgVGVzdENhc2UgY3JlYXRlVGVzdENhc2UoU3RyaW5nIHN0cikgewotCQlpbnQgcG9zPSBzdHIuaW5kZXhPZigiJSIpOwotCQlhc3NlcnRGYWxzZShwb3MgPT0gLTEpOwotCQlpbnQgbWF0Y2g9IHN0ci5pbmRleE9mKCIjIik7Ci0JCS8vIGFjY291bnQgZm9yIHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IHBvc2l0aW9uIG1hcmtlciwKLQkJLy8gaWYgdGhlcmUgaXMgb25lCi0JCWlmIChtYXRjaCAhPSAtMSAmJiBtYXRjaCA8IHBvcykgcG9zIC09IDE7Ci0JCWlmIChwb3MgPCBtYXRjaCkgbWF0Y2ggLT0gMTsKLQkJZmluYWwgU3RyaW5nIHN0cmlwcGVkPSBzdHIucmVwbGFjZUFsbCgiJSIsICIiKS5yZXBsYWNlQWxsKCIjIiwgIiIpOwotCQlyZXR1cm4gbmV3IFRlc3RDYXNlKHN0cmlwcGVkLCBwb3MsIG1hdGNoKTsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFRlc3RDYXNlIHsKLQotCQlwdWJsaWMgZmluYWwgU3RyaW5nIGZTdHJpbmc7Ci0JCXB1YmxpYyBmaW5hbCBpbnQgZlBvcywgZk1hdGNoOwotCi0JCXB1YmxpYyBUZXN0Q2FzZShTdHJpbmcgc3RyaW5nLCBpbnQgcG9zLCBpbnQgbWF0Y2gpIHsKLQkJCWZTdHJpbmc9IHN0cmluZzsKLQkJCWZQb3M9IHBvczsKLQkJCWZNYXRjaD0gbWF0Y2g7Ci0JCX0KLQotCQlwdWJsaWMgSURvY3VtZW50IGdldERvY3VtZW50KCkgewotCQkJcmV0dXJuIG5ldyBTdHJpbmdEb2N1bWVudChmU3RyaW5nKTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQkJcmV0dXJuIE1hdGguYWJzKGZQb3MgLSBmTWF0Y2gpOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRPZmZzZXQoKSB7Ci0JCQlpZiAoZlBvcyA+IGZNYXRjaCkgcmV0dXJuIGZNYXRjaDsKLQkJCXJldHVybiBmUG9zOwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFN0cmluZ0RvY3VtZW50IGV4dGVuZHMgRG9jdW1lbnQgewotCi0JCXB1YmxpYyBTdHJpbmdEb2N1bWVudChTdHJpbmcgc3RyKSB7Ci0JCQl0aGlzLnNldFRleHRTdG9yZShuZXcgU3RyaW5nVGV4dFN0b3JlKHN0cikpOwotCQkJdGhpcy5zZXQoc3RyKTsKLQkJCWZpbmFsIElEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnQ9IGNyZWF0ZVBhcnRpdGlvbmVyKCk7Ci0JCQl0aGlzLnNldERvY3VtZW50UGFydGl0aW9uZXIoZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKSwgcGFydCk7Ci0JCQlwYXJ0LmNvbm5lY3QodGhpcyk7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0cmluZ1RleHRTdG9yZSBpbXBsZW1lbnRzIElUZXh0U3RvcmUgewotCi0JCXByaXZhdGUgU3RyaW5nIGZTdHJpbmc7Ci0KLQkJcHVibGljIFN0cmluZ1RleHRTdG9yZShmaW5hbCBTdHJpbmcgc3RyKSB7Ci0JCQlmU3RyaW5nPSBzdHI7Ci0JCX0KLQotCQlwdWJsaWMgY2hhciBnZXQoaW50IG9mZnNldCkgewotCQkJcmV0dXJuIGZTdHJpbmcuY2hhckF0KG9mZnNldCk7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldChpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0JCQlyZXR1cm4gZlN0cmluZy5zdWJzdHJpbmcob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRMZW5ndGgoKSB7Ci0JCQlyZXR1cm4gZlN0cmluZy5sZW5ndGgoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlcGxhY2UoaW50IG9mZnNldCwgaW50IGxlbmd0aCwgU3RyaW5nIHRleHQpIHsKLQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0KFN0cmluZyB0ZXh0KSB7Ci0JCQlmU3RyaW5nPSB0ZXh0OwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9QQVJUSVRJT049IElEb2N1bWVudC5ERUZBVUxUX0NPTlRFTlRfVFlQRTsKLQotCXByaXZhdGUgc3RhdGljIElEb2N1bWVudFBhcnRpdGlvbmVyIGNyZWF0ZVBhcnRpdGlvbmVyKCkgewotCQlmaW5hbCBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyIHNjYW49IG5ldyBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyKCk7Ci0JCWZpbmFsIExpc3QvKjxJUHJlZGljYXRlUnVsZT4qLyBydWxlcz0gbmV3IEFycmF5TGlzdC8qPElQcmVkaWNhdGVSdWxlPiovKCk7Ci0JCXJ1bGVzLmFkZChuZXcgU2luZ2xlTGluZVJ1bGUoInxhIiwgImF8IiwgbmV3IFRva2VuKCJhIikpKTsKLQkJcnVsZXMuYWRkKG5ldyBTaW5nbGVMaW5lUnVsZSgifGIiLCAiYnwiLCBuZXcgVG9rZW4oImIiKSkpOwotCQlydWxlcy5hZGQobmV3IFNpbmdsZUxpbmVSdWxlKCJ8YyIsICJjfCIsIG5ldyBUb2tlbigiYyIpKSk7Ci0JCXNjYW4uc2V0UHJlZGljYXRlUnVsZXMoKElQcmVkaWNhdGVSdWxlW10pIHJ1bGVzLnRvQXJyYXkobmV3IElQcmVkaWNhdGVSdWxlW3J1bGVzLnNpemUoKV0pKTsKLQkJc2Nhbi5zZXREZWZhdWx0UmV0dXJuVG9rZW4obmV3IFRva2VuKERFRkFVTFRfUEFSVElUSU9OKSk7Ci0JCXJldHVybiBuZXcgRmFzdFBhcnRpdGlvbmVyKHNjYW4sIG5ldyBTdHJpbmdbXSB7IERFRkFVTFRfUEFSVElUSU9OLCAiYSIsICJiIiwgImMiIH0pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0VW5kb01hbmFnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWU3MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb240OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogVGVzdHMgZm9yIERlZmF1bHRVbmRvTWFuYWdlci4gQ2hhbmdlZCBmcm9tIHRoZSBKRmFjZSBvcmlnaW5hbCB0byBjcmVhdGVzCi0gKiBhbmQgdGVzdCBhZ2FpbnN0IGEgc3RydWN0dXJlZCBkb2N1bWVudC4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqIFRoZSBtYXhpbXVtIHVuZG8gbGV2ZWwuICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9VTkRPX0xFVkVMPSAyNTY7Ci0KLQkvKiogVGhlIHNoZWxsLiAqLwotCXByaXZhdGUgU2hlbGwgZlNoZWxsOwotCS8qKiBUaGUgdGV4dCB2aWV3ZXIuICovCi0JcHJpdmF0ZSBJVGV4dFZpZXdlciBmVGV4dFZpZXdlcjsKLQkvKiogVGhlIHVuZG8gbWFuYWdlci4gKi8KLQlwcml2YXRlIElVbmRvTWFuYWdlciBmVW5kb01hbmFnZXI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9PUF9DT1VOVD0gMjA7Ci0KLQkvLy0tLSBTdGF0aWMgZGF0YSBzZXRzIGZvciBjb21wYXJpbmcgc2NlbmFyaW9zIC0gb2J0YWluZWQgZnJvbSBjYXB0dXJpbmcgcmFuZG9tIGRhdGEgLS0tCi0JLyoqIE9yaWdpbmFsIGRvY3VtZW50ICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVD0gIis3Y3lnOi9GIVQ0S25XOzArYXUkdDFHJShgWnx1JzcnXyEtaz88Y1wiMlkuXUN3c08uciI7Ci0JLyoqIFJlcGxhY2VtZW50IHN0cmluZyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBbXSBSRVBMQUNFTUVOVFM9IHsgIj4iLCAiRiIsICJNL3ItKiIsICItIiwgImJsIiwgIiIsICJ9JS8jIiwgIiIsICJrJiIsICJmIiwgIlxcZyIsICJjIXgiLCAiVExHLSIsICJOUE8iLCAiUnA5dSIsICIiLCAiWCIsICJXKCIsICIpeiIsICJvZSIsICIiLCAiaCoiLCAidCIsICJJIiwgIlg9Tj4iLCAiMnl0IiwgIiZaIiwgIjIpVz0iLCAiOksiLCAiUDlTIiwgInM4dDhvIiwgIiIsICIiLCAiNXs3IiwgIiUiLCAiIiwgInYzIiwgIld6IiwgInNIIiwgIjNjIiwgIjgiLCAib2wiLCAiLDYkIiwgIjk0WyMiLCAiLn4iLCAibiIsICI+IiwgIjkiLCAiVyIsICIsKEZXIiwgIlEiLCAiXiIsICJCcSIsICIkIiwgInJlIiwgIiIsICI5IiwgIjhbIiwgIk14IiwgIjRiIiwgIiQ2IiwgIkYiLCAiOHNdIiwgIm8iLCAiLSIsICJFJjYiLCAiU1xcIiwgIi8iLCAiei5hIiwgIjRhaSIsICJiIiwgIikiLCAiIiwgImwiLCAiVlUiLCAiN00rUWwiLCAieFo/eCIsICJ4eCIsICJsYyIsICJiIiwgIkEiLCAiISIsICI0cFNVIiwgIiIsICJ7SiIsICJIIiwgImw+XyIsICJuJjkiLCAiIiwgIiZgIiwgIjtpZ1F4cSIsICIiLCAiPiIsICI7XCIiLCAia1xcYF1HIiwgIm97PyIsICIiLCAiSyIsICJfNiIsICI9In07Ci0JLyoqIFBvc2l0aW9uL29mZnNldCBwYWlycyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBbXSBQT1NJVElPTlM9IHsgMTgsIDIsIDQzLCAxLCAzLCAyLCAyOCwgMywgMzUsIDEsIDIzLCA1LCAzMiwgMiwgMzAsIDEsIDIyLCAxLCAzNywgMCwgMjMsIDMsIDQzLCAyLCA0NiwgMSwgMTcsIDEsIDM2LCA2LCAxNywgNSwgMzAsIDQsIDI1LCAxLCAyLCAyLCAzMCwgMCwgMzcsIDMsIDI4LCAxLCAzMCwgMiwgMjAsIDUsIDMzLCAxLCAyOSwgMSwgMTUsIDIsIDIxLCAyLCAyNCwgNCwgMzgsIDMsIDgsIDAsIDMzLCAyLCAxNSwgMiwgMjUsIDAsIDgsIDIsIDIwLCAzLCA0MywgMiwgNDQsIDEsIDQ0LCAyLCAzMiwgMiwgNDAsIDIsIDMyLCAzLCAxMiwgMiwgMzgsIDMsIDMzLCAyLCA0NiwgMCwgMTMsIDMsIDQ1LCAwLCAxNiwgMiwgMywgMiwgNDQsIDAsIDQ4LCAwLCAxOCwgNSwgNywgNiwgNywgMywgNDAsIDAsIDksIDEsIDE2LCAzLCAyOCwgMywgMzYsIDEsIDM1LCAyLCAwLCAzLCA2LCAxLCAxMCwgNCwgMTQsIDIsIDE1LCAzLCAzMywgMSwgMzYsIDAsIDM3LCAwLCA0LCAzLCAzMSwgMywgMzMsIDMsIDExLCAzLCAyMCwgMiwgMjUsIDMsIDQsIDMsIDcsIDMsIDE3LCAwLCAzLCAxLCAzMSwgMywgMzQsIDEsIDIxLCAwLCAzMywgMSwgMTcsIDQsIDksIDEsIDI2LCAzLCAyLCAzLCAxMiwgMSwgMjYsIDMsIDksIDUsIDUsIDAsIDMxLCAzLCAwLCAzLCAxMiwgMSwgMSwgMSwgMywgMCwgMzksIDAsIDksIDIsIDIsIDAsIDI4LCAyfTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUc9IGZhbHNlOwotCi0KLQkvKgotCSAqIEBzZWUgVGVzdENhc2UjVGVzdENhc2UoU3RyaW5nKQotCSAqLwotCXB1YmxpYyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKgotCSAqICBAc2VlIFRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQkJZlNoZWxsPSBuZXcgU2hlbGwoKTsKLQkJZlVuZG9NYW5hZ2VyPSBjcmVhdGVVbmRvTWFuYWdlcihNQVhfVU5ET19MRVZFTCk7Ci0JCWZUZXh0Vmlld2VyPSBuZXcgVGV4dFZpZXdlcihmU2hlbGwsIFNXVC5OT05FKTsKLQkJZlRleHRWaWV3ZXIuc2V0VW5kb01hbmFnZXIoZlVuZG9NYW5hZ2VyKTsKLQkJZlVuZG9NYW5hZ2VyLmNvbm5lY3QoZlRleHRWaWV3ZXIpOwotCX0KLQotCWFic3RyYWN0IHByb3RlY3RlZCBJVW5kb01hbmFnZXIgY3JlYXRlVW5kb01hbmFnZXIoaW50IG1heFVuZG9MZXZlbCk7Ci0KLQkvKgotCSAqICBAc2VlIFRlc3RDYXNlI3RlYXJEb3duKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLQkJZlVuZG9NYW5hZ2VyLmRpc2Nvbm5lY3QoKTsKLQkJZlVuZG9NYW5hZ2VyPSBudWxsOwotCQlmU2hlbGwuZGlzcG9zZSgpOwotCQlmU2hlbGw9IG51bGw7Ci0JCWZUZXh0Vmlld2VyPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFRlc3QgZm9yIGxpbmUgZGVsaW1pdGVyIGNvbnZlcnNpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbnZlcnRMaW5lRGVsaW1pdGVycygpIHsKLQkJZmluYWwgU3RyaW5nIG9yaWdpbmFsPSAiYVxyXG5iXHJcbiI7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJdHJ5IHsKLQkJCWRvY3VtZW50LnJlcGxhY2UoMSwgMiwgIlxuIik7Ci0JCQlkb2N1bWVudC5yZXBsYWNlKDMsIDIsICJcbiIpOwotCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCS8qKgotCSAqIFJhbmRvbWx5IGFwcGxpZXMgZG9jdW1lbnQgY2hhbmdlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzKCkgewotCQlmaW5hbCBpbnQgUkFORE9NX1NUUklOR19MRU5HVEg9IDUwOwotCQlmaW5hbCBpbnQgUkFORE9NX1JFUExBQ0VfQ09VTlQ9IDEwMDsKLQotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UID49IDEpOwotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlTdHJpbmcgb3JpZ2luYWw9IGNyZWF0ZVJhbmRvbVN0cmluZyhSQU5ET01fU1RSSU5HX0xFTkdUSCk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9DaGFuZ2UoSURvY3VtZW50IGRvY3VtZW50LCBpbnQgY291bnQpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBiZWZvcmU9IGRvY3VtZW50LmdldCgpOwotCi0JCQlpZiAoREVCVUcpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKGJlZm9yZSk7Ci0KLQkJCVBvc2l0aW9uIFtdIHBvc2l0aW9ucz0gbmV3IFBvc2l0aW9uW2NvdW50XTsKLQkJCVN0cmluZyBbXSBzdHJpbmdzPSBuZXcgU3RyaW5nW2NvdW50XTsKLQkJCWZvciAoaW50IGk9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCQkJZmluYWwgUG9zaXRpb24gcG9zaXRpb249IGNyZWF0ZVJhbmRvbVBvc2l0aW9uUG9pc3Nvbihkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQkJZmluYWwgU3RyaW5nIHN0cmluZz0gY3JlYXRlUmFuZG9tU3RyaW5nUG9pc3NvbigpOwotCQkJCWRvY3VtZW50LnJlcGxhY2UocG9zaXRpb24uZ2V0T2Zmc2V0KCksIHBvc2l0aW9uLmdldExlbmd0aCgpLCBzdHJpbmcpOwotCQkJCXBvc2l0aW9uc1tpXT0gcG9zaXRpb247Ci0JCQkJc3RyaW5nc1tpXT0gc3RyaW5nOwotCQkJfQotCi0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJ7ICIpOwotCQkJCWZvciAoaW50IGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQocG9zaXRpb25zW2ldLmdldE9mZnNldCgpKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiLCAiKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludChwb3NpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCIsICIpOwotCQkJCX0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiB9Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgieyAiKTsKLQkJCQlmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCJcIiIpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KHN0cmluZ3NbaV0pOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCJcIiwgIik7Ci0JCQkJfQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIH0iKTsKLQkJCX0KLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvLyByZXBlYXRhYmxlIHRlc3QgY2FzZSBmb3IgY29tcGFyaW5nIHN1Y2Nlc3MvZmFpbHVyZSBhbW9uZyBkaWZmZXJlbnQgdGVzdHMKLQlwcml2YXRlIHZvaWQgZG9SZXBlYXRhYmxlQ2hhbmdlKElEb2N1bWVudCBkb2N1bWVudCkgewotCQlhc3NlcnRUcnVlKFBPU0lUSU9OUy5sZW5ndGggPj0gKDIgKiBSRVBMQUNFTUVOVFMubGVuZ3RoKSk7Ci0JCXRyeSB7Ci0JCQlmb3IgKGludCBpPSAwOyBpIDwgUkVQTEFDRU1FTlRTLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaW50IG9mZnNldD0gUE9TSVRJT05TW2kqMl07Ci0JCQkJaW50IGxlbmd0aD0gUE9TSVRJT05TW2kqMisxXTsKLQkJCQlpZiAoZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgPiBvZmZzZXQgKyBsZW5ndGgpCi0JCQkJCWRvY3VtZW50LnJlcGxhY2Uob2Zmc2V0LCBsZW5ndGgsIFJFUExBQ0VNRU5UU1tpXSk7Ci0JCQkJZWxzZQotCQkJCQlkb2N1bWVudC5yZXBsYWNlKDAsMCwgUkVQTEFDRU1FTlRTW2ldKTsKLQkJCX0KLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2Vzc0FzQ29tcG91bmQoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdFJhbmRvbUFjY2Vzc0FzQ29tcG91bmQoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3MoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wQ29udmVydExpbmVEZWxpbWl0ZXJzKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RDb252ZXJ0TGluZURlbGltaXRlcnMoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzV2l0aE1peGVkQ29tcG91bmQoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdFJhbmRvbUFjY2Vzc1dpdGhNaXhlZENvbXBvdW5kKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzQXNDb21wb3VuZCgpIHsKLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDA7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGNhc2UgZm9yIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04ODE3MgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RSYW5kb21BY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKSB7Ci0KLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDA7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCS8vIGRvIG5vdCBjbG9zZSB0aGUgY29tcG91bmQuCi0JCS8vIGZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzV2l0aE1peGVkQ29tcG91bmQoKSB7Ci0KLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDsKLQkJZmluYWwgaW50IE5VTUJFUl9DT01QT1VORFM9IDU7Ci0JCWZpbmFsIGludCBOVU1CRVJfQVRPTUlDX1BFUl9DT01QT1VORD0gMzsKLQotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UID49IDEpOwotCQlhc3NlcnRUcnVlKE5VTUJFUl9DT01QT1VORFMgKiAoMSArIE5VTUJFUl9BVE9NSUNfUEVSX0NPTVBPVU5EKSAqIFJBTkRPTV9SRVBMQUNFX0NPVU5UIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlTdHJpbmcgb3JpZ2luYWw9IGNyZWF0ZVJhbmRvbVN0cmluZyhSQU5ET01fU1RSSU5HX0xFTkdUSCk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IE5VTUJFUl9DT01QT1VORFM7IGkrKykgewotCQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQkJCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJZm9yIChpbnQgaj0gMDsgaiA8IE5VTUJFUl9BVE9NSUNfUEVSX0NPTVBPVU5EOyBqKyspIHsKLQkJCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQkJCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJfQotCQl9Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydFRydWUoIWZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3NBc0NvbXBvdW5kKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQkvLyB3aXRoIGEgc2luZ2xlIGNvbXBvdW5kLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgdW5kbwotCQlhc3NlcnRGYWxzZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKSB7Ci0JCWFzc2VydFRydWUoUkVQTEFDRU1FTlRTLmxlbmd0aCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0YWJsZUFjY2Vzc1dpdGhNaXhlZEFuZEVtcHR5Q29tcG91bmQoKSB7Ci0JCWFzc2VydFRydWUoUkVQTEFDRU1FTlRTLmxlbmd0aCArIDIgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQkvLyBpbnNlcnQgYW4gZW1wdHkgY29tcG91bmQKLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0KLQkgICAgLy8gaW5zZXJ0IHRoZSBhdG9taWMgY2hhbmdlcwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RhbXAoKSB7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCQlsb25nIHN0YW1wPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWRvQ2hhbmdlKGRvY3VtZW50LCAxKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0RXF1YWxzKHN0YW1wLCAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCi0JfQotCi0JLy8gc2VlOiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MTA0Ci0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RhbXAyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudCgiIik7Ci0JCWZpbmFsIGludCBzdHJpbmdMZW5ndGg9IDEzOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgY3JlYXRlUmFuZG9tU3RyaW5nKHN0cmluZ0xlbmd0aCkpOwotCQlsb25nIHN0YW1wPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgY3JlYXRlUmFuZG9tU3RyaW5nKHN0cmluZ0xlbmd0aCkpOwotCQlhc3NlcnRGYWxzZShzdGFtcCA9PSAoKElEb2N1bWVudEV4dGVuc2lvbjQpZG9jdW1lbnQpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVJhbmRvbVN0cmluZyhpbnQgbGVuZ3RoKSB7Ci0JCWZpbmFsIFN0cmluZ0J1ZmZlciBidWZmZXI9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCQlmb3IgKGludCBpPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCQlidWZmZXIuYXBwZW5kKGdldFJhbmRvbUNoYXJhY3RlcigpKTsKLQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhciBnZXRSYW5kb21DaGFyYWN0ZXIoKSB7Ci0JCS8vIFhYWCBzaG91bGQgaW5jbHVkZSBcdAotCQlyZXR1cm4gKGNoYXIpICgzMiArIDk1ICogTWF0aC5yYW5kb20oKSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVJhbmRvbVN0cmluZ1BvaXNzb24oKSB7Ci0JCWZpbmFsIGludCBsZW5ndGg9IGdldFJhbmRvbVBvaXNzb25WYWx1ZSgyKTsKLQkJcmV0dXJuIGNyZWF0ZVJhbmRvbVN0cmluZyhsZW5ndGgpOwotCX0KLQkKLQlwcml2YXRlIElEb2N1bWVudCBjcmVhdGVEb2N1bWVudChTdHJpbmcgY29udGVudHMpIHsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZCgib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIpOwotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgaGFuZGxlci5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoY29udGVudHMpOwotLy8JCXJldHVybiBuZXcgRG9jdW1lbnQoY29udGVudHMpOwotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFBvc2l0aW9uIGNyZWF0ZVJhbmRvbVBvc2l0aW9uUG9pc3NvbihpbnQgZG9jdW1lbnRMZW5ndGgpIHsKLQotCQlmbG9hdCByYW5kb209IChmbG9hdCkgTWF0aC5yYW5kb20oKTsKLQkJaW50IG9mZnNldD0gKGludCkgKHJhbmRvbSAqIChkb2N1bWVudExlbmd0aCArIDEpKTsKLQotCQkvLyBDYXRjaCBwb3RlbnRpYWwgcm91bmRpbmcgaXNzdWUKLQkJaWYgKG9mZnNldCA9PSBkb2N1bWVudExlbmd0aCArIDEpCi0JCQlvZmZzZXQ9IGRvY3VtZW50TGVuZ3RoOwotCi0JCWludCBsZW5ndGg9IGdldFJhbmRvbVBvaXNzb25WYWx1ZSgyKTsKLQkJaWYgKG9mZnNldCArIGxlbmd0aCA+IGRvY3VtZW50TGVuZ3RoKQotCQkJbGVuZ3RoPSBkb2N1bWVudExlbmd0aCAtIG9mZnNldDsKLQotCQlyZXR1cm4gbmV3IFBvc2l0aW9uKG9mZnNldCwgbGVuZ3RoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBpbnQgZ2V0UmFuZG9tUG9pc3NvblZhbHVlKGludCBtZWFuKSB7Ci0JCWZpbmFsIGludCBNQVhfVkFMVUU9IDEwOwotCi0JCWZpbmFsIGZsb2F0IHJhbmRvbT0gKGZsb2F0KSBNYXRoLnJhbmRvbSgpOwotCQlmbG9hdCBwcm9iYWJpbGl0eT0gMDsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChwcm9iYWJpbGl0eSA8IDEgJiYgaSA8IE1BWF9WQUxVRSkgewotCQkJcHJvYmFiaWxpdHkgKz0gZ2V0UG9pc3NvbkRpc3RyaWJ1dGlvbihtZWFuLCBpKTsKLQkJCWlmIChyYW5kb20gPD0gcHJvYmFiaWxpdHkpCi0JCQkJYnJlYWs7Ci0JCQlpKys7Ci0JCX0KLQkJcmV0dXJuIGk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmxvYXQgZ2V0UG9pc3NvbkRpc3RyaWJ1dGlvbihmbG9hdCBsYW1iZGEsIGludCBrKSB7Ci0JCXJldHVybiAoZmxvYXQpIChNYXRoLmV4cCgtbGFtYmRhKSAqIE1hdGgucG93KGxhbWJkYSwgaykgLyBmYWN1bHR5KGspKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmYWN1bHR5IG9mIGsuCi0JICoKLQkgKiBAcGFyYW0gayB0aGUgPGNvZGU+aW50PC9jb2RlPiBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBmYWN1bHR5Ci0JICogQHJldHVybiB0aGUgZmFjdWx0eQotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBmYWN1bHR5KGludCBrKSB7Ci0JCXJldHVybiBrID09IDAKLQkJCT8gMQotCQkJOiBrICogZmFjdWx0eShrIC0gMSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0UGFpck1hdGNoZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0UGFpck1hdGNoZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYWZjNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIENocmlzdGlhbiBQbGVzbmVyIEhhbnNlbiAocGxlc25lckBxdWVudGEub3JnKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkRlZmF1bHRDaGFyYWN0ZXJQYWlyTWF0Y2hlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQ2hhcmFjdGVyUGFpck1hdGNoZXI7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBkZWZhdWx0IHBhaXIgbWF0Y2hlci4KLSAqCi0gKiBAc2luY2UgMy4zCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0UGFpck1hdGNoZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShEZWZhdWx0UGFpck1hdGNoZXJUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNoYXJhY3RlclBhaXJNYXRjaGVyIGNyZWF0ZU1hdGNoZXIoU3RyaW5nIGNoYXJzKSB7Ci0JCXJldHVybiBuZXcgRGVmYXVsdENoYXJhY3RlclBhaXJNYXRjaGVyKGNoYXJzLnRvQ2hhckFycmF5KCksCi0JCQkJZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMuQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QjZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKQotCSAqIEBzaW5jZSAzLjMKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERvY3VtZW50UGFydGl0aW9uaW5nKCkgewotCQlyZXR1cm4gSURvY3VtZW50RXh0ZW5zaW9uMy5ERUZBVUxUX1BBUlRJVElPTklORzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRVbmRvTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRVbmRvTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhNmI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0VW5kb01hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRlZmF1bHRVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLQotLyoqCi0gKiBUZXN0cyBmb3IgRGVmYXVsdFVuZG9NYW5hZ2VyLgotICoKLSAqIEBzaW5jZSAzLjIKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRVbmRvTWFuYWdlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKERlZmF1bHRVbmRvTWFuYWdlclRlc3QuY2xhc3MpOwotCX0KLQotCS8qCi0JICogQHNlZSBUZXN0Q2FzZSNUZXN0Q2FzZShTdHJpbmcpCi0JICovCi0JcHVibGljIERlZmF1bHRVbmRvTWFuYWdlclRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMuQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QjY3JlYXRlVW5kb01hbmFnZXIoaW50KQotCSAqIEBzaW5jZSAzLjIKLQkgKi8KLQlwcm90ZWN0ZWQgSVVuZG9NYW5hZ2VyIGNyZWF0ZVVuZG9NYW5hZ2VyKGludCBtYXhVbmRvTGV2ZWwpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0VW5kb01hbmFnZXIobWF4VW5kb0xldmVsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0hUTUwyVGV4dFJlYWRlclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSFRNTDJUZXh0UmVhZGVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYTRjNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSFRNTDJUZXh0UmVhZGVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmludGVybmFsLnRleHQuaHRtbC5IVE1MMlRleHRSZWFkZXI7Ci0KLQotcHVibGljIGNsYXNzIEhUTUwyVGV4dFJlYWRlclRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUc9IGZhbHNlOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExEPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiwgIlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0JcHVibGljIEhUTUwyVGV4dFJlYWRlclRlc3RlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEhUTUwyVGV4dFJlYWRlclRlc3Rlci5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeShTdHJpbmcgaW5wdXQsIFN0cmluZyBleHBlY3RlZE91dHB1dCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlSZWFkZXIgcmVhZGVyPSBuZXcgU3RyaW5nUmVhZGVyKGlucHV0KTsKLQkJSFRNTDJUZXh0UmVhZGVyIGh0bWxSZWFkZXI9IG5ldyBIVE1MMlRleHRSZWFkZXIocmVhZGVyLCBudWxsKTsKLQkJU3RyaW5nIHJlc3VsdD0gaHRtbFJlYWRlci5nZXRTdHJpbmcoKTsKLQkJaWYgKERFQlVHKQotCQkJU3lzdGVtLm91dC5wcmludGxuKCI8IisgcmVzdWx0ICsiLz4iKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkT3V0cHV0LCByZXN1bHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QwKCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGNvZGU+Mzw1PGNvZGU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAiMzw1IjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxKCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGRsPjxkdD5AYXV0aG9yPC9kdD48ZGQ+Rm9vIEJhcjwvZGQ+PC9kbD4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9IExEKyAiQGF1dGhvciIrTEQrIlx0Rm9vIEJhciIrTEQ7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MigpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxjb2RlPjM+NTxjb2RlPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIjM+NSI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MygpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxhIGhyZWY9IFwiPHA+dGhpcyBpcyBvbmx5IGEgc3RyaW5nIC0gbm90IGEgdGFnPHA+XCI+dGV4dDwvYT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICJ0ZXh0IjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Q0KCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAJIjxodG1sPjxib2R5IHRleHQ9XCIjMDAwMDAwXCIgYmdjb2xvcj1cIiNGRkZGODhcIj48Zm9udCBzaXplPS0xPjxoNT52b2lkIHAuQmIuZmVzKCk8L2g1PjxwPjxkbD48ZHQ+UGFyYW1ldGVyczo8L2R0PjxkZD48Yj5pPC9iPiBmcmVkIG9yIDxjb2RlPm51bGw8L2NvZGU+PC9kZD48L2RsPjwvZm9udD48L2JvZHk+PC9odG1sPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gInZvaWQgcC5CYi5mZXMoKSIrIExEICsgTEQgKyBMRCsgIlBhcmFtZXRlcnM6IisgTEQgKyAiXHRpIGZyZWQgb3IgbnVsbCIrTEQ7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NSgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxjb2RlPjE8MjwzPDQ8L2NvZGU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAiMTwyPDM8NCI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NigpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJLy90ZXN0IGZvciBidWcgMTkwNzAKLQkJU3RyaW5nIHN0cmluZz0gIjxwPlNvbWV0aGluZy48cD5Tb21ldGhpbmcgbW9yZS4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9IExEICsgIlNvbWV0aGluZy4iICsgTEQgKyAiU29tZXRoaW5nIG1vcmUuIjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgc3RyaW5nPSAiPCEtLSBiZWdpbi11c2VyLWRvYyAtLT5ubyBjb21tZW50PCEtLSBlbmQtdXNlci1kb2MgLS0+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAibm8gY29tbWVudCI7Ci0JCXZlcmlmeShzdHJpbmcsZXhwZWN0ZWQpOwotCX0KLQotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9KRmFjZVRleHRUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0pGYWNlVGV4dFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWJmZWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0pGYWNlVGV4dFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogVGVzdCBTdWl0ZSBmb3Igb3JnLmVjbGlwc2UuamZhY2UudGV4dC4KLSAqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBKRmFjZVRleHRUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIm9yZy5lY2xpcHNlLmpmYWNlLnRleHQgVGVzdCBTdWl0ZSB1c2luZyBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0vLwkJc3VpdGUuYWRkVGVzdChIVE1MMlRleHRSZWFkZXJUZXN0ZXIuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZXh0SG92ZXJQb3B1cFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZXh0UHJlc2VudGF0aW9uVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChEZWZhdWx0VW5kb01hbmFnZXJUZXN0LnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChSdWxlc1Rlc3RTdWl0ZS5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFJlY29uY2lsZXJUZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChEZWZhdWx0UGFpck1hdGNoZXJUZXN0LnN1aXRlKCkpOwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODRkNWJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1Rlc3RUZXh0RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dEV2ZW50OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0VGV4dEV2ZW50IGV4dGVuZHMgVGV4dEV2ZW50IHsKLQotCVRlc3RUZXh0RXZlbnQoRG9jdW1lbnRFdmVudCBldmVudCwgU3RyaW5nIHJlcGxhY2VkVGV4dCkgewotCQlzdXBlcihldmVudC5nZXRPZmZzZXQoKSwgZXZlbnQuZ2V0TGVuZ3RoKCksIGV2ZW50LmdldFRleHQoKSwgcmVwbGFjZWRUZXh0LCBldmVudCwgdHJ1ZSk7Ci0JfQotCi0JVGVzdFRleHRFdmVudChTdHJpbmcgdGV4dCkgewotCQlzdXBlcigwLCAwLCB0ZXh0LCAoU3RyaW5nKSBudWxsLCAoRG9jdW1lbnRFdmVudCkgbnVsbCwgdHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1Rlc3RUZXh0Vmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODU5YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9JbmRlbnRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUV2ZW50Q29uc3VtZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRmluZFJlcGxhY2VUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRIb3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SW5wdXRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dE9wZXJhdGlvblRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVZpZXdwb3J0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0UHJlc2VudGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Ib3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLQotCi0KLQotcHVibGljIGNsYXNzIFRlc3RUZXh0Vmlld2VyIGltcGxlbWVudHMgSVNvdXJjZVZpZXdlciwgSURvY3VtZW50TGlzdGVuZXIgewotCi0KLQlwcm90ZWN0ZWQgSURvY3VtZW50IGZEb2N1bWVudDsKLQlwcm90ZWN0ZWQgTGlzdCBmSW5wdXRMaXN0ZW5lcnM9IG5ldyBBcnJheUxpc3QoKTsKLQlwcm90ZWN0ZWQgTGlzdCBmVGV4dExpc3RlbmVycz0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBUZXh0UHJlc2VudGF0aW9uIGZUZXh0UHJlc2VudGF0aW9uOwotCXByb3RlY3RlZCBQb2ludCBmU2VsZWN0aW9uPSBuZXcgUG9pbnQoLTEsIC0xKTsKLQlwcm90ZWN0ZWQgU3RyaW5nIGZEZWxldGlvbjsKLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudChJRG9jdW1lbnQgZG9jdW1lbnQsIGludCBwMSwgaW50IHAyKSB7Ci0JCXNldERvY3VtZW50KGRvY3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldERvY3VtZW50KCkKLQkgKi8KLQlwdWJsaWMgSURvY3VtZW50IGdldERvY3VtZW50KCkgewotCQlyZXR1cm4gZkRvY3VtZW50OwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBkb2N1bWVudCkgewotCQlJRG9jdW1lbnQgb2xkRG9jPSBmRG9jdW1lbnQ7Ci0JCWZpcmVUZXh0SW5wdXRDaGFuZ2VkKG9sZERvYywgZG9jdW1lbnQsIHRydWUpOwotCi0JCWlmIChvbGREb2MgIT0gbnVsbCkKLQkJCW9sZERvYy5yZW1vdmVEb2N1bWVudExpc3RlbmVyKHRoaXMpOwotCi0JCWZEb2N1bWVudD0gZG9jdW1lbnQ7Ci0KLQkJaWYgKGZEb2N1bWVudCAhPSBudWxsKSB7Ci0JCQlmaXJlVGV4dENoYW5nZWQobmV3IFRlc3RUZXh0RXZlbnQoZkRvY3VtZW50LmdldCgpKSk7Ci0JCQlmRG9jdW1lbnQuYWRkRG9jdW1lbnRMaXN0ZW5lcih0aGlzKTsKLQkJfQotCi0JCWZpcmVUZXh0SW5wdXRDaGFuZ2VkKG9sZERvYywgZG9jdW1lbnQsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJZklucHV0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNhZGRUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgYWRkVGV4dElucHV0TGlzdGVuZXIoSVRleHRJbnB1dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWlmICghZklucHV0TGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkKLQkJCWZJbnB1dExpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZpcmVUZXh0SW5wdXRDaGFuZ2VkKElEb2N1bWVudCBvbGREb2MsIElEb2N1bWVudCBuZXdEb2MsIGJvb2xlYW4gYWJvdXQpIHsKLQkJSXRlcmF0b3IgZT0gbmV3IEFycmF5TGlzdChmSW5wdXRMaXN0ZW5lcnMpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJSVRleHRJbnB1dExpc3RlbmVyIGw9IChJVGV4dElucHV0TGlzdGVuZXIpIGUubmV4dCgpOwotCQkJaWYgKGFib3V0KQotCQkJCWwuaW5wdXREb2N1bWVudEFib3V0VG9CZUNoYW5nZWQob2xkRG9jLCBuZXdEb2MpOwotCQkJZWxzZQotCQkJCWwuaW5wdXREb2N1bWVudENoYW5nZWQob2xkRG9jLCBuZXdEb2MpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNjaGFuZ2VUZXh0UHJlc2VudGF0aW9uKFRleHRQcmVzZW50YXRpb24sIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgY2hhbmdlVGV4dFByZXNlbnRhdGlvbihUZXh0UHJlc2VudGF0aW9uIHByZXNlbnRhdGlvbiwgYm9vbGVhbiBwMSkgewotCQlmVGV4dFByZXNlbnRhdGlvbj0gcHJlc2VudGF0aW9uOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjaW52YWxpZGF0ZVRleHRQcmVzZW50YXRpb24oKQotCSAqLwotCXB1YmxpYyB2b2lkIGludmFsaWRhdGVUZXh0UHJlc2VudGF0aW9uKCkgewotCX0KLQotCXB1YmxpYyBUZXh0UHJlc2VudGF0aW9uIGdldFRleHRQcmVzZW50YXRpb24oKSB7Ci0JCXJldHVybiBmVGV4dFByZXNlbnRhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb2N1bWVudEFib3V0VG9CZUNoYW5nZWQoRG9jdW1lbnRFdmVudCBldmVudCkgewotCQl0cnkgewotCQkJZkRlbGV0aW9uPSBmRG9jdW1lbnQuZ2V0KGV2ZW50LmdldE9mZnNldCgpLCBldmVudC5nZXRMZW5ndGgoKSk7Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIHgpIHsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGRvY3VtZW50Q2hhbmdlZChEb2N1bWVudEV2ZW50IGV2ZW50KSB7Ci0JCWZpcmVUZXh0Q2hhbmdlZChuZXcgVGVzdFRleHRFdmVudChldmVudCwgZkRlbGV0aW9uKSk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRGaW5kUmVwbGFjZVRhcmdldCgpCi0JICovCi0JcHVibGljIElGaW5kUmVwbGFjZVRhcmdldCBnZXRGaW5kUmVwbGFjZVRhcmdldCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUZXh0T3BlcmF0aW9uVGFyZ2V0KCkKLQkgKi8KLQlwdWJsaWMgSVRleHRPcGVyYXRpb25UYXJnZXQgZ2V0VGV4dE9wZXJhdGlvblRhcmdldCgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRUZXh0Q29sb3IoQ29sb3IsIGludCwgaW50LCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHRDb2xvcihDb2xvciBwMCwgaW50IHAxLCBpbnQgcDIsIGJvb2xlYW4gcDMpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHRDb2xvcihDb2xvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUZXh0Q29sb3IoQ29sb3IgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI292ZXJsYXBzV2l0aFZpc2libGVSZWdpb24oaW50LCBpbnQpCi0JICovCi0JcHVibGljIGJvb2xlYW4gb3ZlcmxhcHNXaXRoVmlzaWJsZVJlZ2lvbihpbnQgcDAsIGludCBwMSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRWaXNpYmxlUmVnaW9uKCkKLQkgKi8KLQlwdWJsaWMgSVJlZ2lvbiBnZXRWaXNpYmxlUmVnaW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3Jlc2V0VmlzaWJsZVJlZ2lvbigpCi0JICovCi0JcHVibGljIHZvaWQgcmVzZXRWaXNpYmxlUmVnaW9uKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VmlzaWJsZVJlZ2lvbihpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlUmVnaW9uKGludCBwMCwgaW50IHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRJbmRlbnRQcmVmaXhlcyhTdHJpbmdbXSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEluZGVudFByZWZpeGVzKFN0cmluZ1tdIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldERlZmF1bHRQcmVmaXhlcyhTdHJpbmdbXSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRQcmVmaXhlcyhTdHJpbmdbXSBwMCwgU3RyaW5nIHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRBdXRvSW5kZW50U3RyYXRlZ3koSUF1dG9JbmRlbnRTdHJhdGVneSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEF1dG9JbmRlbnRTdHJhdGVneShJQXV0b0luZGVudFN0cmF0ZWd5IHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHREb3VibGVDbGlja1N0cmF0ZWd5KElUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSwgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHREb3VibGVDbGlja1N0cmF0ZWd5KElUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBwMCwgU3RyaW5nIHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRVbmRvTWFuYWdlcihJVW5kb01hbmFnZXIpCi0JICovCi0JcHVibGljIHZvaWQgc2V0VW5kb01hbmFnZXIoSVVuZG9NYW5hZ2VyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUZXh0V2lkZ2V0KCkKLQkgKi8KLQlwdWJsaWMgU3R5bGVkVGV4dCBnZXRUZXh0V2lkZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUZXh0SG92ZXIoSVRleHRIb3ZlciBwMCwgU3RyaW5nIHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNhY3RpdmF0ZVBsdWdpbnMoKQotCSAqLwotCXB1YmxpYyB2b2lkIGFjdGl2YXRlUGx1Z2lucygpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3Jlc2V0UGx1Z2lucygpCi0JICovCi0JcHVibGljIHZvaWQgcmVzZXRQbHVnaW5zKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5zZXQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0VG9wSW5zZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0Qm90dG9tSW5kZXhFbmRPZmZzZXQoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0Qm90dG9tSW5kZXhFbmRPZmZzZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0Qm90dG9tSW5kZXgoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0Qm90dG9tSW5kZXgoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5kZXhTdGFydE9mZnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRUb3BJbmRleFN0YXJ0T2Zmc2V0KCkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRvcEluZGV4KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFRvcEluZGV4KCkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRvcEluZGV4KGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUb3BJbmRleChpbnQgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JldmVhbFJhbmdlKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHJldmVhbFJhbmdlKGludCBwMCwgaW50IHAxKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRTZWxlY3RlZFJhbmdlKCkKLQkgKi8KLQlwdWJsaWMgUG9pbnQgZ2V0U2VsZWN0ZWRSYW5nZSgpIHsKLQkJcmV0dXJuIGZTZWxlY3Rpb247Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRTZWxlY3RlZFJhbmdlKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkUmFuZ2UoaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotCQlmU2VsZWN0aW9uLng9IG9mZnNldDsKLQkJZlNlbGVjdGlvbi55PSBsZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNpc0VkaXRhYmxlKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0VkaXRhYmxlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEVkaXRhYmxlKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0RWRpdGFibGUoYm9vbGVhbiBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RXZlbnRDb25zdW1lcihJRXZlbnRDb25zdW1lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFdmVudENvbnN1bWVyKElFdmVudENvbnN1bWVyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNyZW1vdmVUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmVGV4dExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZpcmVUZXh0Q2hhbmdlZChUZXh0RXZlbnQgZXZlbnQpIHsKLQkJSXRlcmF0b3IgZT0gbmV3IEFycmF5TGlzdChmVGV4dExpc3RlbmVycykuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dExpc3RlbmVyIGw9IChJVGV4dExpc3RlbmVyKSBlLm5leHQoKTsKLQkJCWwudGV4dENoYW5nZWQoZXZlbnQpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNhZGRUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXh0TGlzdGVuZXIoSVRleHRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlpZiAoIWZUZXh0TGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkKLQkJCWZUZXh0TGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNyZW1vdmVWaWV3cG9ydExpc3RlbmVyKElWaWV3cG9ydExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgYWRkVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNnZXRTZWxlY3Rpb25Qcm92aWRlcigpCi0JICovCi0JcHVibGljIElTZWxlY3Rpb25Qcm92aWRlciBnZXRTZWxlY3Rpb25Qcm92aWRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3Nob3dBbm5vdGF0aW9ucyhib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNob3dBbm5vdGF0aW9ucyhib29sZWFuIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3JlbW92ZVJhbmdlSW5kaWNhdGlvbigpCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlUmFuZ2VJbmRpY2F0aW9uKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNnZXRSYW5nZUluZGljYXRpb24oKQotCSAqLwotCXB1YmxpYyBJUmVnaW9uIGdldFJhbmdlSW5kaWNhdGlvbigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3NldFJhbmdlSW5kaWNhdGlvbihpbnQsIGludCwgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSYW5nZUluZGljYXRpb24oaW50IHAwLCBpbnQgcDEsIGJvb2xlYW4gcDIpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0UmFuZ2VJbmRpY2F0b3IoQW5ub3RhdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSYW5nZUluZGljYXRvcihBbm5vdGF0aW9uIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldEFubm90YXRpb25Nb2RlbCgpCi0JICovCi0JcHVibGljIElBbm5vdGF0aW9uTW9kZWwgZ2V0QW5ub3RhdGlvbk1vZGVsKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsLCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudChJRG9jdW1lbnQgcDAsIElBbm5vdGF0aW9uTW9kZWwgcDEsIGludCBwMiwgaW50IHAzKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI3NldERvY3VtZW50KElEb2N1bWVudCwgSUFubm90YXRpb25Nb2RlbCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXREb2N1bWVudChJRG9jdW1lbnQgcDAsIElBbm5vdGF0aW9uTW9kZWwgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0QW5ub3RhdGlvbkhvdmVyKElBbm5vdGF0aW9uSG92ZXIpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QW5ub3RhdGlvbkhvdmVyKElBbm5vdGF0aW9uSG92ZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjY29uZmlndXJlKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24pCi0JICovCi0JcHVibGljIHZvaWQgY29uZmlndXJlKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gcDApIHsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0SG92ZXJQb3B1cFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmZhNjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi1wdWJsaWMgY2xhc3MgVGV4dEhvdmVyUG9wdXBUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0KLQlwdWJsaWMgVGV4dEhvdmVyUG9wdXBUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dEhvdmVyUG9wdXBUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLQl9Ci0KLQotCXByb3RlY3RlZCBpbnQgc2VhcmNoKGludFtdIGFycmF5LCBpbnQgeCkgewotCQlpbnQgbG93PSAwOwotCQlpbnQgaGlnaD0gYXJyYXkubGVuZ3RoIC0xOwotCi0JCXdoaWxlIChoaWdoID4gbG93KSB7Ci0JCQlpbnQgb2Zmc2V0PSAobG93ICsgaGlnaCkgLyAyOwotCQkJaW50IGxvb2t1cD0gYXJyYXlbb2Zmc2V0XTsKLQkJCWlmIChsb29rdXAgPiB4KQotCQkJCWhpZ2g9IG9mZnNldCAtIDE7Ci0JCQllbHNlIGlmIChsb29rdXAgPCB4KQotCQkJCWxvdz0gb2Zmc2V0ICsgMTsKLQkJCWVsc2UKLQkJCQlsb3c9IGhpZ2g9IG9mZnNldDsKLQkJfQotCi0JCXJldHVybiBoaWdoOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2goKSB7Ci0JCWludFtdIHZhbHVlcz0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQlpbnQgcmVzdWx0PSBzZWFyY2godmFsdWVzLCBpKTsKLQkJCWFzc2VydFRydWUoaSA9PSByZXN1bHQpOwotCQl9Ci0KLQkJaW50W10gdmFsdWVzMj0geyAwLCAzLCA2LCA5LCAxMiwgMTUsIDE4LCAyMSwgMjQsIDI3IH07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQlpbnQgcmVzdWx0PSBzZWFyY2godmFsdWVzMiwgaSAqIDMpOwotCQkJYXNzZXJ0VHJ1ZShpID09IHJlc3VsdCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFByZXNlbnRhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg5ZThkYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFByZXNlbnRhdGlvbjsKLQotcHVibGljIGNsYXNzIFRleHRQcmVzZW50YXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PUk1BTD0gU1dULk5PUk1BTDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQk9MRD0gU1dULkJPTEQ7Ci0vLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSVRBTElDPSBTV1QuSVRBTElDOwotCi0JcHJpdmF0ZSBUZXh0UHJlc2VudGF0aW9uIGZUZXh0UHJlc2VudGF0aW9uOwotCXByaXZhdGUgU3R5bGVSYW5nZVtdIGZBbGxSYW5nZXM7Ci0JcHJpdmF0ZSBTdHlsZVJhbmdlW10gZk5vbkRlZmF1bHRSYW5nZXM7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRleHRQcmVzZW50YXRpb25UZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQkJc2V0VXBTdHlsZVJhbmdlcygpOwotCQlzZXRVcFRleHRQcmVzZW50YXRpb24oKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBTdHlsZVJhbmdlcygpIHsKLQkJZkFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpCi0JCX07Ci0KLQkJZk5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpCi0JCX07Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVGV4dFByZXNlbnRhdGlvbigpIHsKLQkJZlRleHRQcmVzZW50YXRpb249IG5ldyBUZXh0UHJlc2VudGF0aW9uKCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLnNldERlZmF1bHRTdHlsZVJhbmdlKGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMTQwLCBOT1JNQUwpKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGZBbGxSYW5nZXMubGVuZ3RoOyBpKyspCi0JCQlmVGV4dFByZXNlbnRhdGlvbi5hZGRTdHlsZVJhbmdlKGZBbGxSYW5nZXNbaV0pOwotCX0KLQotCXByaXZhdGUgU3R5bGVSYW5nZSBjcmVhdGVTdHlsZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBjcmVhdGVTdHlsZVJhbmdlKHN0YXJ0LCBlbmQsIG51bGwsIG51bGwsIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlUmFuZ2UgY3JlYXRlU3R5bGVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIENvbG9yIGZvcmVncm91bmQsIENvbG9yIGJhY2tncm91bmQsIGludCBzdHlsZSkgewotCQlyZXR1cm4gbmV3IFN0eWxlUmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0LCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBzdHlsZSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGNyZWF0ZVN0eWxlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZm9yZWdyb3VuZCwgaW50IGJhY2tncm91bmQsIGludCBzdHlsZSkgewotCQlyZXR1cm4gY3JlYXRlU3R5bGVSYW5nZShzdGFydCwgZW5kLCBjcmVhdGVDb2xvcihmb3JlZ3JvdW5kLCBmb3JlZ3JvdW5kLCBmb3JlZ3JvdW5kKSwgY3JlYXRlQ29sb3IoYmFja2dyb3VuZCwgYmFja2dyb3VuZCwgYmFja2dyb3VuZCksIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIERpc3BsYXkgZkRpc3BsYXk9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhIG5ldyBjb2xvci4KLQkgKiAKLQkgKiBAcGFyYW0gcmVkIHRoZSBhbW91bnQgb2YgcmVkIGluIHRoZSBjb2xvcgotCSAqIEBwYXJhbSBncmVlbiB0aGUgYW1vdW50IG9mIGdyZWVuIGluIHRoZSBjb2xvcgotCSAqIEBwYXJhbSBibHVlIHRoZSBhbW91bnQgb2YgYmx1ZSBpbiB0aGUgY29sb3IKLQkgKiBAcmV0dXJuIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBpcyBzbWFsbGVyIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gMjU1Ci0JICovCi0JcHJpdmF0ZSBDb2xvciBjcmVhdGVDb2xvcihpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlKSB7Ci0JCWlmIChyZWQgPCAwIHx8IHJlZCA+IDI1NSB8fCBncmVlbiA8IDAgfHwgZ3JlZW4gPiAyNTUgfHwgYmx1ZSA8IDAgfHwgYmx1ZSA+IDI1NSkKLQkJCXJldHVybiBudWxsOwotCQlyZXR1cm4gbmV3IENvbG9yKGZEaXNwbGF5LCByZWQsIGdyZWVuLCBibHVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZWdpb25zKFN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcywgU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcykgewotCQlJdGVyYXRvciBlPSBmVGV4dFByZXNlbnRhdGlvbi5nZXRBbGxTdHlsZVJhbmdlSXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkQWxsUmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRUcnVlKGUuaGFzTmV4dCgpKTsKLQkJCWFzc2VydEVxdWFscyhleHBlY3RlZEFsbFJhbmdlc1tpXSwgZS5uZXh0KCkpOwotCQl9Ci0JCWFzc2VydFRydWUoIWUuaGFzTmV4dCgpKTsKLQotCQllPSBmVGV4dFByZXNlbnRhdGlvbi5nZXROb25EZWZhdWx0U3R5bGVSYW5nZUl0ZXJhdG9yKCk7Ci0JCWZvciAoaW50IGk9IDA7IGkgPCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoZS5oYXNOZXh0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlc1tpXSwgZS5uZXh0KCkpOwotCQl9Ci0JCWFzc2VydFRydWUoIWUuaGFzTmV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VW5jbGlwcGVkUmVnaW9ucygpIHsKLQkJY2hlY2tSZWdpb25zKGZBbGxSYW5nZXMsIGZOb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpcHBlZFJlZ2lvbnMxKCkgewotCQlmVGV4dFByZXNlbnRhdGlvbi5zZXRSZXN1bHRXaW5kb3cobmV3IFJlZ2lvbigwLCAxNDApKTsKLQkJY2hlY2tSZWdpb25zKGZBbGxSYW5nZXMsIGZOb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xpcHBlZFJlZ2lvbnMyKCkgewotCi0JCWZUZXh0UHJlc2VudGF0aW9uLnNldFJlc3VsdFdpbmRvdyhuZXcgUmVnaW9uKDMwLCA3MCkpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgMTcsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAxNywgMjQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggMjQsIDY2LCBOT1JNQUwpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNjYsIDcwLCBCT0xEKQotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJY3JlYXRlU3R5bGVSYW5nZSggMTcsIDI0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDY2LCA3MCwgQk9MRCkKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZmlyc3QgZXhpc3RpbmcgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAyLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGxhc3QgZXhpc3RpbmcgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTIoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDEzOCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEzOCwgMTQwLCAxLCAtMSwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEzOCwgMTQwLCAxLCAtMSwgTk9STUFMKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZXhpc3RpbmcgZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMygpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjIsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSB3aXRoaW4gZXhpc3RpbmcgZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlNCgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgyMiwgMjQsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDIyLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjIsIDI0LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyNCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIyLCAyNCwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGF0IGVuZCBvZiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U1KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U2KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2Ugd2l0aGluIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U3KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA0OSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0OSwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA0OSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0OSwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U4KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgZnJvbSBleGlzdGluZyBkZWZhdWx0IHRvIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U5KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA0OSwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHRvIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEwKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDUyLCA1NiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTYsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIGRlZmF1bHQgb3ZlciBub24tZGVmYXVsdCB0byBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMSgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg0NSwgNTYsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ1LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDU2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NiwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIG5vbi1kZWZhdWx0IG92ZXIgZGVmYXVsdCB0byBub24tZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTIoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDk4LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDk2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDk2LCA5OCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk4LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA5NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg5NiwgOTgsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5OCwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2Ugb3ZlciBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMygpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgyMCwgNDcsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2Ugb3ZlciBleGlzdGluZyBub24tZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTQoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlczEoKSB7Ci0JCVN0eWxlUmFuZ2VbXSByYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGZpcnN0IGV4aXN0aW5nCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBzdGFydCBvZiBleGlzdGluZyBkZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyNCwgMjYsIDEsIC0xLCBOT1JNQUwpLCAvLyB3aXRoaW4gZXhpc3RpbmcgZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgZW5kIG9mIGV4aXN0aW5nIGRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MCwgNTEsIDEsIC0xLCBOT1JNQUwpLCAvLyB3aXRoaW4gZXhpc3Rpbmcgbm9uLWRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IGVuZCBvZiBleGlzdGluZyBub24tZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBlbmQgb2YgbGFzdCBleGlzdGluZwotCQl9OwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2VzKHJhbmdlcyk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAyLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIyLCAgMjQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyNCwgMjYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDI2LCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1MCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MCwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDEzOCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEzOCwgMTQwLCAxLCAtMSwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDIyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1MCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MCwgNTEsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1MSwgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLS8vIFRlbXBsYXRlCi0vLwotLy8JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTAoKSB7Ci0vLy8vCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpOwotLy8vLwkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLS8vCi0vLy8vCQlTdHlsZVJhbmdlW10gcmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLS8vLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwKLS8vLy8JCX07Ci0vLy8vCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2VzKHJhbmdlcyk7Ci0vLwotLy8JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotLy8JCX07Ci0vLwotLy8JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotLy8JCX07Ci0vLwotLy8JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLS8vCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZmZDI4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0Vmlld2VyVW5kb01hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLkFic3RyYWN0T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMub3BlcmF0aW9ucy5JVW5kb2FibGVPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLk9wZXJhdGlvbkhpc3RvcnlGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5Eb2N1bWVudFVuZG9FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LnVuZG8uRG9jdW1lbnRVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LnVuZG8uSURvY3VtZW50VW5kb0xpc3RlbmVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRWaWV3ZXJVbmRvTWFuYWdlcjsKLQotLyoqCi0gKiBUZXN0cyBmb3IgVGV4dFZpZXdlclVuZG9NYW5hZ2VyLgotICoKLSAqIEBzaW5jZSAzLjIKLSAqLwotcHVibGljIGNsYXNzIFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuY2xhc3MpOwotCX0KLQotCS8qCi0JICogQHNlZSBUZXN0Q2FzZSNUZXN0Q2FzZShTdHJpbmcpCi0JICovCi0JcHVibGljIFRleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMuQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QjY3JlYXRlVW5kb01hbmFnZXIoaW50KQotCSAqIEBzaW5jZSAzLjIKLQkgKi8KLQlwcm90ZWN0ZWQgSVVuZG9NYW5hZ2VyIGNyZWF0ZVVuZG9NYW5hZ2VyKGludCBtYXhVbmRvTGV2ZWwpIHsKLQkJcmV0dXJuIG5ldyBUZXh0Vmlld2VyVW5kb01hbmFnZXIobWF4VW5kb0xldmVsKTsKLQl9Ci0KLQkvLy0tLSBEb2N1bWVudFVuZG9NYW5hZ2VyIG9ubHkgLS0tCi0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcChmaW5hbCBib29sZWFuIGlzVW5kb2FibGUpIHRocm93cyBFeGNlcHRpb24gewotCQlPYmplY3QgY29udGV4dD0gbmV3IE9iamVjdCgpOwotCQlEb2N1bWVudFVuZG9NYW5hZ2VyIHRlbXBVbmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIobmV3IERvY3VtZW50KCkpOwotCQl0ZW1wVW5kb01hbmFnZXIuY29ubmVjdChjb250ZXh0KTsKLQotCQlJVW5kb2FibGVPcGVyYXRpb24gb3BlcmF0aW9uPSBuZXcgQWJzdHJhY3RPcGVyYXRpb24oIiIpIHsKLQkJCXB1YmxpYyBib29sZWFuIGNhblVuZG8oKSB7Ci0JCQkJcmV0dXJuIGlzVW5kb2FibGU7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQkJCXB1YmxpYyBJU3RhdHVzIHJlZG8oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgdW5kbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0JCX07Ci0JCW9wZXJhdGlvbi5hZGRDb250ZXh0KHRlbXBVbmRvTWFuYWdlci5nZXRVbmRvQ29udGV4dCgpKTsKLQkJT3BlcmF0aW9uSGlzdG9yeUZhY3RvcnkuZ2V0T3BlcmF0aW9uSGlzdG9yeSgpLmFkZChvcGVyYXRpb24pOwotCi0JCWFzc2VydEVxdWFscyhpc1VuZG9hYmxlLCB0ZW1wVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgRG9jdW1lbnRVbmRvTWFuYWdlciB1bmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIobmV3IERvY3VtZW50KCkpOwotCQlPYmplY3QgbmV3Q29udGV4dD0gbmV3IE9iamVjdCgpOwotCQl1bmRvTWFuYWdlci5jb25uZWN0KG5ld0NvbnRleHQpOwotCi0JCXVuZG9NYW5hZ2VyLmFkZERvY3VtZW50VW5kb0xpc3RlbmVyKG5ldyBJRG9jdW1lbnRVbmRvTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBkb2N1bWVudFVuZG9Ob3RpZmljYXRpb24oRG9jdW1lbnRVbmRvRXZlbnQgZXZlbnQpIHsKLQkJCQlmYWlsKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXVuZG9NYW5hZ2VyLnRyYW5zZmVyVW5kb0hpc3RvcnkodGVtcFVuZG9NYW5hZ2VyKTsKLQkJdGVtcFVuZG9NYW5hZ2VyLmRpc2Nvbm5lY3QoY29udGV4dCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGlzVW5kb2FibGUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl1bmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJdW5kb01hbmFnZXIuZGlzY29ubmVjdChuZXdDb250ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNmZXJOb25VbmRvYWJsZU5vblRleHRPcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcChmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zZmVyVW5kb2FibGVOb25UZXh0T3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW50ZXJuYWxUZXN0VHJhbnNmZXJOb25UZXh0T3AodHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhblVuZG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURvY3VtZW50IGRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCWZpbmFsIERvY3VtZW50VW5kb01hbmFnZXIgdW5kb01hbmFnZXI9IG5ldyBEb2N1bWVudFVuZG9NYW5hZ2VyKGRvYyk7Ci0JCU9iamVjdCBjb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCXVuZG9NYW5hZ2VyLmNvbm5lY3QoY29udGV4dCk7Ci0KLQkJdW5kb01hbmFnZXIuYWRkRG9jdW1lbnRVbmRvTGlzdGVuZXIobmV3IElEb2N1bWVudFVuZG9MaXN0ZW5lcigpIHsKLQotCQkJcHVibGljIHZvaWQgZG9jdW1lbnRVbmRvTm90aWZpY2F0aW9uKERvY3VtZW50VW5kb0V2ZW50IGV2ZW50KSB7Ci0JCQkJaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IERvY3VtZW50VW5kb0V2ZW50LkFCT1VUX1RPX1VORE8pCi0JCQkJCWFzc2VydEVxdWFscyh0cnVlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCQllbHNlIGlmIChldmVudC5nZXRFdmVudFR5cGUoKSA9PSBEb2N1bWVudFVuZG9FdmVudC5VTkRPTkUpCi0JCQkJCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCQl9Ci0JCX0pOwotCi0JCWRvYy5zZXQoImZvbyIpOwotCi0JCWFzc2VydEVxdWFscyh0cnVlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJdW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRFcXVhbHMoZmFsc2UsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCXVuZG9NYW5hZ2VyLmRpc2Nvbm5lY3QoY29udGV4dCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9yZWNvbmNpbGVyL0Fic3RyYWN0UmVjb25jaWxlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBmYmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJlY29uY2lsZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudGVzdHMuQWNjZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuQWJzdHJhY3RSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5EaXJ0eVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsaW5nU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5UZXN0VGV4dFZpZXdlcjsKLQotCi0vKioKLSAqIFJlY29uY2lsZXIgdGVzdHMuIFVzZXMgYmFycmllciBzeW5jaHJvbml6YXRpb24gYW5kIGEgY2FsbCBsb2cgdG8gYXNzZXJ0Ci0gKiBjb3JyZWN0IG9yZGVyIG9mIHJlY29uY2lsaW5nIGV2ZW50cy4KLSAqCi0gKiBUT0RPIHRlc3QgcmVjb25jaWxlciBhcmd1bWVudHMgKGRlbGF5ID4gMCBldGMuKQotICogVE9ETyBpbmNyZW1lbnRhbCByZWNvbmNpbGVyIHRlc3RzCi0gKgotICogQHNpbmNlIDMuMQotICovCi1wdWJsaWMgY2xhc3MgQWJzdHJhY3RSZWNvbmNpbGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIE1vZGlmaWVkIGJhcnJpZXI6IHRoZXJlIGFyZSB0d28gdGhyZWFkczogdGhlIG1haW4gKHRlc3RpbmcpIHRocmVhZAotCSAqIGNyZWF0aW5nIHRoZSBiYXJyaWVyLCBhbmQgdGhlIHJlY29uY2lsZXIgdGhyZWFkLiBXaGVuIGJvdGggdGhyZWFkcyBoYXZlCi0JICogbWV0IGF0IHRoZSBiYXJyaWVyLCB0aGUgbWFpbiB0aHJlYWQgaXMgcmVsZWFzZWQgYW5kIGNhbiBwZXJmb3JtCi0JICogYXNzZXJ0aW9ucyB3aGlsZSBiZWluZyBzdXJlIHRoYXQgdGhlIHJlY29uY2lsZXIgaXMgZG9ybWFudC4gQWZ0ZXIgdGhlCi0JICogdGVzdHMgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgdGhlIG1haW4gdGhyZWFkIG11c3QgY2FsbCA8Y29kZT53YWtlQWxsPC9jb2RlPgotCSAqIHRvIHJlbGVhc2UgdGhlIHJlY29uY2lsZXIgdGhyZWFkLgotCSAqLwotCXN0YXRpYyBjbGFzcyBCYXJyaWVyIHsKLQkJcHJpdmF0ZSBmaW5hbCBPYmplY3QgZk11dGV4PSBuZXcgT2JqZWN0KCk7Ci0JCXByaXZhdGUgZmluYWwgaW50IGZQYXJ0aWNpcGFudHM7Ci0JCXByaXZhdGUgZmluYWwgVGhyZWFkIGZNYWluVGhyZWFkOwotCi0JCXByaXZhdGUgaW50IGZXYWl0aW5nPSAwOwotCQlwcml2YXRlIGJvb2xlYW4gZk1haW5UaHJlYWRBcnJpdmVkPSBmYWxzZTsKLQkJcHJpdmF0ZSBib29sZWFuIGZJc0luYWN0aXZlPSBmYWxzZTsKLQotCQlCYXJyaWVyKCkgewotCQkJZlBhcnRpY2lwYW50cz0gMjsKLQkJCWZNYWluVGhyZWFkPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYXdhaXQoKSB7Ci0JCQlzeW5jaHJvbml6ZWQgKGZNdXRleCkgewotCQkJCWlmIChmSXNJbmFjdGl2ZSkKLQkJCQkJcmV0dXJuOwotCi0JCQkJZldhaXRpbmcrKzsKLQotCQkJCWJvb2xlYW4gaXNNYWluVGhyZWFkPSBUaHJlYWQuY3VycmVudFRocmVhZCgpID09IGZNYWluVGhyZWFkOwotCQkJCWlmIChpc01haW5UaHJlYWQpCi0JCQkJCWZNYWluVGhyZWFkQXJyaXZlZD0gdHJ1ZTsKLQotCQkJCWlmIChhbGxBcnJpdmVkKCkpIHsKLQkJCQkJaWYgKCFmTWFpblRocmVhZEFycml2ZWQpIHsKLQkJCQkJCWZXYWl0aW5nLS07Ci0JCQkJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihnZXRDbGFzcygpICsgIiBjYW4ndCBqb2luIGJhcnJpZXIgaWYgb25seSB0aGUgbWFpbiB0aHJlYWQgaXMgbWlzc2luZyEiKTsKLQkJCQkJfQotCi0JCQkJCWlmICghaXNNYWluVGhyZWFkKQotCQkJCQkJbm90aWZ5TWFpblRocmVhZCgpOwotCQkJCX0KLQkJCQlpZiAoIWFsbEFycml2ZWQoKSB8fCAhaXNNYWluVGhyZWFkKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlpZiAoIWlzTWFpblRocmVhZCkKLQkJCQkJCQlmTXV0ZXgud2FpdCgpOwotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJZk11dGV4LndhaXQoNTAwMCk7IC8vIGRvbid0IHdhaXQgZm9yZXZlciBmb3IgYmFkIHJlY29uY2lsZXJzCi0JCQkJCQkJaWYgKCFhbGxBcnJpdmVkKCkpCi0JCQkJCQkJCWZhaWwoInJlY29uY2lsZXIgbmV2ZXIgcmFuIGluIDUgc2Vjb25kcyIpOwotCQkJCQkJfQotCQkJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyB0aHJlYWRzIG11c3Qgbm90IGJlIGludGVycnVwdGVkCi0JCQkJCQl0aHJvdyBuZXcgRXJyb3IoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXByaXZhdGUgYm9vbGVhbiBhbGxBcnJpdmVkKCkgewotCQkJcmV0dXJuIGZXYWl0aW5nID09IGZQYXJ0aWNpcGFudHM7Ci0JCX0KLQotCQlwcml2YXRlIHZvaWQgbm90aWZ5TWFpblRocmVhZCgpIHsKLQkJCWZNdXRleC5ub3RpZnkoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHdha2VBbGwoKSB7Ci0JCQlzeW5jaHJvbml6ZWQgKGZNdXRleCkgewotCQkJCWZXYWl0aW5nPSAwOwotCQkJCWZNYWluVGhyZWFkQXJyaXZlZD0gZmFsc2U7Ci0JCQkJZk11dGV4Lm5vdGlmeUFsbCgpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2h1dGRvd24oKSB7Ci0JCQlzeW5jaHJvbml6ZWQgKGZNdXRleCkgewotCQkJCWZJc0luYWN0aXZlPSB0cnVlOwotCQkJCWZNdXRleC5ub3RpZnlBbGwoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgQWNjZXNzb3IgZkFjY2Vzc29yOwotCXByaXZhdGUgQmFycmllciBmQmFycmllcjsKLQlwcml2YXRlIExpc3QgZkNhbGxMb2c7Ci0JcHJpdmF0ZSBJVGV4dFZpZXdlciBmVmlld2VyOwotCXByb3RlY3RlZCBBYnN0cmFjdFJlY29uY2lsZXIgZlJlY29uY2lsZXI7Ci0JcHJpdmF0ZSBEb2N1bWVudCBmRG9jdW1lbnQ7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLQkJZkJhcnJpZXI9IG5ldyBCYXJyaWVyKCk7Ci0JCWZDYWxsTG9nPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KG5ldyBBcnJheUxpc3QoKSk7Ci0JCWZSZWNvbmNpbGVyPSBuZXcgQWJzdHJhY3RSZWNvbmNpbGVyKCkgewotCQkJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsUHJvY2VzcygpIHsKLQkJCQkJCWZDYWxsTG9nLmFkZCgiaW5pdGlhbFByb2Nlc3MiKTsKLQkJCQkJCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcyhEaXJ0eVJlZ2lvbiBkaXJ0eVJlZ2lvbikgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJwcm9jZXNzIik7Ci0JCQkJCQlmQmFycmllci5hd2FpdCgpOwotCQkJCQl9Ci0JCQkJCXByb3RlY3RlZCB2b2lkIHJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQoSURvY3VtZW50IG5ld0RvY3VtZW50KSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJhYm91dFRvQmVSZWNvbmNpbGVkIik7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlclJlc2V0KCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJyZWNvbmNpbGVyUmVzZXQiKTsKLQkJCQkJfQotCQkJCQlwdWJsaWMgSVJlY29uY2lsaW5nU3RyYXRlZ3kgZ2V0UmVjb25jaWxpbmdTdHJhdGVneShTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJCQkJCXJldHVybiBudWxsOwotCQkJCQl9Ci0JCQkJfTsKLQkJZlJlY29uY2lsZXIuc2V0SXNJbmNyZW1lbnRhbFJlY29uY2lsZXIoZmFsc2UpOwotCQlmUmVjb25jaWxlci5zZXREZWxheSg1MCk7IC8vIG1ha2UgdGVzdHMgcnVuIGZhc3RlcgotCi0JCWZWaWV3ZXI9IG5ldyBUZXN0VGV4dFZpZXdlcigpOwotCQlmUmVjb25jaWxlci5pbnN0YWxsKGZWaWV3ZXIpOwotCi0JCWZBY2Nlc3Nvcj0gbmV3IEFjY2Vzc29yKGZSZWNvbmNpbGVyLCBBYnN0cmFjdFJlY29uY2lsZXIuY2xhc3MpOwotCQlPYmplY3Qgb2JqZWN0PSBmQWNjZXNzb3IuZ2V0KCJmVGhyZWFkIik7Ci0JCWZBY2Nlc3Nvcj0gbmV3IEFjY2Vzc29yKG9iamVjdCwgb2JqZWN0LmdldENsYXNzKCkpOwotCX0KLQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkJhcnJpZXIuc2h1dGRvd24oKTsKLQkJZlJlY29uY2lsZXIudW5pbnN0YWxsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluaXRpYWxSZWNvbmNpbGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQkvLyBpbml0aWFsbHkgdGhlIHJlY29uY2lsZXIgaXMgbmVpdGhlciBhY3RpdmUgbm9yIGRpcnR5Ci0JCS8vIFhYWCBzaG91bGRuJ3QgaXQgYmUgZGlydHk/Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCi0JCS8vIHNldCB1cCBpbml0aWFsIGRvY3VtZW50Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJmb28iKTsKLQkJZlZpZXdlci5zZXREb2N1bWVudChmRG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoImFib3V0VG9CZVJlY29uY2lsZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygiaW5pdGlhbFByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQkvLyBYWFggc2hvdWxkbid0IGl0IGJlIGRpcnR5IGFuZCBhY3RpdmUgZHVyaW5nIGluaXRpYWxQcm9jZXNzPwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIHdhaXQgdW50aWwgY2xlYW4KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5aW5nV2hlbkNsZWFuKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCWRpcnR5KCk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQotCQlmQmFycmllci5hd2FpdCgpOwotCQlhc3NlcnRFcXVhbHMoInByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRUcnVlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRUcnVlKGlzRGlydHkoKSk7Ci0JCWZCYXJyaWVyLndha2VBbGwoKTsKLQotCQkvLyB3YWl0IHVudGlsIGNsZWFuCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGRpcnR5KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvY3VtZW50LnJlcGxhY2UoMCwwLCJiYXIiKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3REaXJ0eWluZ1doZW5SdW5uaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydFRydWUoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUoaXNEaXJ0eSgpKTsKLQkJZkNhbGxMb2cuY2xlYXIoKTsKLQkJZGlydHkoKTsKLQkJLy8gbm8gYWJvdXRUb0JlUmVjb25jaWxlZCBzaW5jZSB0aGUgcmVjb25jaWxlciBpcyBzdGlsbCBydW5uaW5nCi0JCS8vIHdoZW4gdGhlIHNlY29uZCBlZGl0aW9uIGNvbWVzIGluCi0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWZCYXJyaWVyLndha2VBbGwoKTsKLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhbmNlbGxpbmdXaGVuQ2xlYW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJLy8gZGlydHkgYWdhaW4KLQkJZGlydHkoKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIGNhbmNlbAotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQkJcG9sbFVudGlsSW5hY3RpdmUoKTsKLQkJYXNzZXJ0VHJ1ZShmQ2FsbExvZy5pc0VtcHR5KCkpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJLy8gWFhYIGZhaWxzIHNpbmNlIEFic3RyYWN0UmVjb25jaWxlciBkb2VzIG5vdCB1cGRhdGUgc3RhdGUgYmVmb3JlIGxlYXZpbmcKLS8vCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOyAvLyBmYWlscwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYW5jZWxsaW5nV2hlblJ1bm5pbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJLy8gZGlydHkgYW5kIGNhbmNlbAotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCQlwb2xsVW50aWxJbmFjdGl2ZSgpOwotCQlhc3NlcnRUcnVlKGZDYWxsTG9nLmlzRW1wdHkoKSk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQkvLyBYWFggZmFpbHMgc2luY2UgQWJzdHJhY3RSZWNvbmNpbGVyIGRvZXMgbm90IHVwZGF0ZSBzdGF0ZSBiZWZvcmUgbGVhdmluZwotLy8JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2luZ0RvY3VtZW50V2hlbkNsZWFuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJLy8gcmVwbGFjZQotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmVmlld2VyLnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgiYmFyIikpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoImFib3V0VG9CZVJlY29uY2lsZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJSZXNldCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWZCYXJyaWVyLndha2VBbGwoKTsKLQotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjaW5nRG9jdW1lbnRXaGVuUnVubmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhbmQgcmVwbGFjZQotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlmVmlld2VyLnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgiYmFyIikpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJEb2N1bWVudENoYW5nZWQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29uY2lsZXJSZXNldCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydFRydWUoZkNhbGxMb2cuaXNFbXB0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIFhYWCB0aGlzIGZhaWxzLCB3aGljaCBpcyBhIGJ1ZyAtIHJlcGxhY2luZyB0aGUgZG9jdW1lbnQgc2hvdWxkCi0JCS8vIGNhbmNlbCB0aGUgcHJvZ3Jlc3MgbW9uaXRvcgotLy8JCWZCYXJyaWVyLmF3YWl0KCk7Ci0vLwkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLS8vCQlmQmFycmllci53YWtlQWxsKCk7Ci0JfQotCi0Jdm9pZCBpbnN0YWxsRG9jdW1lbnQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgiZm9vIik7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQoZkRvY3VtZW50KTsKLQotCQkvLyBpbml0aWFsIHByb2Nlc3MKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JfQotCi0Jdm9pZCBwb2xsVW50aWxDbGVhbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIHdhaXQgZm9yIHJlY29uY2lsZXIgdG8gYmVjb21lIGNsZWFuCi0JCWxvbmcgc3RhcnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl3aGlsZSAoaXNEaXJ0eSgpKSB7Ci0JCQlsb25nIGN1cnJlbnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJaWYgKGN1cnJlbnQgPiBzdGFydCArIDUwMDApCi0JCQkJZmFpbCgid2FpdGVkID4gNXMgZm9yIHJlY29uY2lsZXIgdG8gY29tcGxldGUiKTsKLQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCXdhaXQoNTApOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCBwb2xsVW50aWxJbmFjdGl2ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIHdhaXQgZm9yIHJlY29uY2lsZXIgdG8gYmVjb21lIGNsZWFuCi0JCWxvbmcgc3RhcnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl3aGlsZSAoaXNBY3RpdmUoKSkgewotCQkJbG9uZyBjdXJyZW50PSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCWlmIChjdXJyZW50ID4gc3RhcnQgKyA1MDAwKQotCQkJCWZhaWwoIndhaXRlZCA+IDVzIGZvciByZWNvbmNpbGVyIHRvIGNvbXBsZXRlIik7Ci0JCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCQl3YWl0KDUwKTsKLQkJCX0KLQkJfQotCX0KLQotCWJvb2xlYW4gaXNBY3RpdmUoKSB7Ci0JCU9iamVjdCBib29sPSBmQWNjZXNzb3IuaW52b2tlKCJpc0FjdGl2ZSIsIG51bGwpOwotCQlyZXR1cm4gKChCb29sZWFuKSBib29sKS5ib29sZWFuVmFsdWUoKTsKLQl9Ci0KLQlib29sZWFuIGlzRGlydHkoKSB7Ci0JCU9iamVjdCBib29sPSBmQWNjZXNzb3IuaW52b2tlKCJpc0RpcnR5IiwgbnVsbCk7Ci0JCXJldHVybiAoKEJvb2xlYW4pIGJvb2wpLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9yZWNvbmNpbGVyL1JlY29uY2lsZXJUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmRmZTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5yZWNvbmNpbGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWNvbmNpbGVyVGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlPSBuZXcgVGVzdFN1aXRlKCJUZXN0IFN1aXRlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucmVjb25jaWxlciIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEFic3RyYWN0UmVjb25jaWxlclRlc3QuY2xhc3MpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzExNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRGVmYXVsdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVBhcnRpdGlvblRva2VuU2Nhbm5lcjsKLQotcHVibGljIGNsYXNzIERlZmF1bHRQYXJ0aXRpb25lclRlc3QgZXh0ZW5kcyBGYXN0UGFydGl0aW9uZXJUZXN0IHsKLQlwcm90ZWN0ZWQgSURvY3VtZW50UGFydGl0aW9uZXIgY3JlYXRlUGFydGl0aW9uZXIoSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXJldHVybiBuZXcgRGVmYXVsdFBhcnRpdGlvbmVyKHNjYW5uZXIsIG5ldyBTdHJpbmdbXSB7IERFRkFVTFQsIENPTU1FTlQgfSk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXMuRmFzdFBhcnRpdGlvbmVyVGVzdCN0ZXN0UFIxMzA5MDAoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQUjEzMDkwMCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1ZzEzMDkwMCBub3QgZml4ZWQgaW4gRGVmYXVsdFBhcnRpdGlvbmVyIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclplcm9MZW5ndGhUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMTc5MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkZhc3RQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQYXJ0aXRpb25Ub2tlblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLk11bHRpTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UPSAiY29tbWVudCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFQ9IElEb2N1bWVudC5ERUZBVUxUX0NPTlRFTlRfVFlQRTsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2M7Ci0JcHJpdmF0ZSBGYXN0UGFydGl0aW9uZXIgZlBhcnRpdGlvbmVyOwotCi0JcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0JCWZEb2M9IG5ldyBEb2N1bWVudCgpOwotCQlJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyKCkgewotCQkJewotCQkJCUlUb2tlbiBjb21tZW50PSBuZXcgVG9rZW4oQ09NTUVOVCk7Ci0JCQkJSVByZWRpY2F0ZVJ1bGVbXSBydWxlcz0gbmV3IElQcmVkaWNhdGVSdWxlW10geyBuZXcgTXVsdGlMaW5lUnVsZSgiLyoiLCAiKi8iLCBjb21tZW50KSB9OwotCQkJCXNldFByZWRpY2F0ZVJ1bGVzKHJ1bGVzKTsKLQotCQkJfQotCQl9OwotCQlmUGFydGl0aW9uZXI9IG5ldyBGYXN0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQkJZkRvYy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGZQYXJ0aXRpb25lcik7Ci0JCWZQYXJ0aXRpb25lci5jb25uZWN0KGZEb2MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbkVtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbkVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbkVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZUVtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmcoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdFbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ0VtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VCZWZvcmVCb3VuZGFyaWVzKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMiwgMzgsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMzksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMTMsIDI2LCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlQWZ0ZXJCb3VuZGFyaWVzKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxNCwgNDAsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMxKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMSwgMTIsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMSwgMTIsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygwLCBmRG9jLmdldExlbmd0aCgpLCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludFtdIG9mZnNldHMsIFN0cmluZyBzdGFydFR5cGUpIHsKLQkJSVR5cGVkUmVnaW9uW10gcmVnaW9ucz0gZlBhcnRpdGlvbmVyLmNvbXB1dGVQYXJ0aXRpb25pbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCB0cnVlKTsKLQotCQlTdHJpbmcgdHlwZT0gc3RhcnRUeXBlOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IHN0YXJ0T2Zmc2V0OwotCi0JCWFzc2VydEVxdWFscyhvZmZzZXRzLmxlbmd0aCArIDEsIHJlZ2lvbnMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgY3VycmVudE9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZW5kT2Zmc2V0IDogb2Zmc2V0c1tpXTsKLQkJCUlUeXBlZFJlZ2lvbiByZWdpb249IHJlZ2lvbnNbaV07Ci0KLQkJCWFzc2VydFR5cGVkUmVnaW9uKHJlZ2lvbiwgcHJldmlvdXNPZmZzZXQsIGN1cnJlbnRPZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBjdXJyZW50T2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFplcm9MZW5ndGhQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnRbXSBvZmZzZXRzKSB7Ci0JCVN0cmluZyB0eXBlPSBERUZBVUxUOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IDA7Ci0JCWZvciAoaW50IGk9IDA7IGkgPD0gb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJaW50IG9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZkRvYy5nZXRMZW5ndGgoKSA6IG9mZnNldHNbaV07Ci0JCQlhc3NlcnRFcXVhbFBhcnRpdGlvbihwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzT3BlblR5cGUoU3RyaW5nIHR5cGUpIHsKLQkJcmV0dXJuIHR5cGUuZXF1YWxzKERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvbihpbnQgb2Zmc2V0LCBpbnQgaW5jbHVzaXZlRW5kLCBTdHJpbmcgdHlwZSkgewotCQlpbnQgZnJvbT0gaXNPcGVuVHlwZSh0eXBlKSA/IG9mZnNldCA6IG9mZnNldCArIDE7Ci0JCWludCB0bz0gaXNPcGVuVHlwZSh0eXBlKSA/IGluY2x1c2l2ZUVuZCA6IGluY2x1c2l2ZUVuZCAtIDE7Ci0JCWZvciAoaW50IGk9IGZyb207IGkgPD0gdG87IGkrKykgewotCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gZlBhcnRpdGlvbmVyLmdldFBhcnRpdGlvbihpLCB0cnVlKTsKLQkJCWFzc2VydFR5cGVkUmVnaW9uKHJlZ2lvbiwgb2Zmc2V0LCBpbmNsdXNpdmVFbmQsIHR5cGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydFR5cGVkUmVnaW9uKElUeXBlZFJlZ2lvbiByZWdpb24sIGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWFzc2VydEVxdWFscyhvZmZzZXQsIHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0JCWFzc2VydEVxdWFscyhpbmNsdXNpdmVFbmQgLSBvZmZzZXQsIHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyh0eXBlLCByZWdpb24uZ2V0VHlwZSgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0RXF1YWxQYXJ0aXRpb25UeXBlKGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBpc09wZW5UeXBlKHR5cGUpID8gb2Zmc2V0IDogb2Zmc2V0ICsgMTsKLQkJaW50IHRvPSBpc09wZW5UeXBlKHR5cGUpID8gaW5jbHVzaXZlRW5kIDogaW5jbHVzaXZlRW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHModHlwZSwgZlBhcnRpdGlvbmVyLmdldENvbnRlbnRUeXBlKGksIHRydWUpKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjcwMTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0Zhc3RQYXJ0aXRpb25lclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5GYXN0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUGFydGl0aW9uVG9rZW5TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVByZWRpY2F0ZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5NdWx0aUxpbmVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlNpbmdsZUxpbmVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBGYXN0UGFydGl0aW9uZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NTUVOVD0gImNvbW1lbnQiOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFQ9IElEb2N1bWVudC5ERUZBVUxUX0NPTlRFTlRfVFlQRTsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2M7Ci0JcHJpdmF0ZSBJRG9jdW1lbnRQYXJ0aXRpb25lciBmUGFydGl0aW9uZXI7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJZkRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBNdWx0aUxpbmVSdWxlKCIvKiIsICIqLyIsIGNvbW1lbnQpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCi0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gY3JlYXRlUGFydGl0aW9uZXIoc2Nhbm5lcik7Ci0JCWZEb2Muc2V0RG9jdW1lbnRQYXJ0aXRpb25lcihmUGFydGl0aW9uZXIpOwotCQlmUGFydGl0aW9uZXIuY29ubmVjdChmRG9jKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSURvY3VtZW50UGFydGl0aW9uZXIgY3JlYXRlUGFydGl0aW9uZXIoSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXJldHVybiBuZXcgRmFzdFBhcnRpdGlvbmVyKHNjYW5uZXIsIG5ldyBTdHJpbmdbXSB7IERFRkFVTFQsIENPTU1FTlQgfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbigpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbkVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25FbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZUVtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudFR5cGVFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmcoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUJlZm9yZUJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMTIsIDM4LCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlT25Cb3VuZGFyaWVzKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMzksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMjYsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VBZnRlckJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMTQsIDQwLCBvZmZzZXRzLCBDT01NRU5UKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlSW5Cb3VuZGFyaWVzMSgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMSwgMTIsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMyKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBSMTAxMDE0KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5zZXQoCi0JCQkJInBhY2thZ2UgcHIxMDEwMTQ7XG4iICsKLQkJCQkiXG4iICsKLQkJCQkiY2xhc3MgWCB7XG4iICsKLQkJCQkiU3RyaW5nIHM9IFxuIiArCi0JCQkJIgkvKmZvbyovO1xuIiArCi0JCQkJIn1cbiIpOwotCi0JCWludFtdIG9mZnNldHM9IHs0MSwgNDh9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0KLQkJZkRvYy5yZXBsYWNlKDQwLCA4LCAiCS8qZm9vKi8iKTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQUjEzMDkwMCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmUGFydGl0aW9uZXIuZGlzY29ubmVjdCgpOwotCQlJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyKCkgewotCQkJewotCQkJCUlUb2tlbiBjb21tZW50PSBuZXcgVG9rZW4oQ09NTUVOVCk7Ci0JCQkJSVByZWRpY2F0ZVJ1bGVbXSBydWxlcz0gbmV3IElQcmVkaWNhdGVSdWxlW10geyBuZXcgU2luZ2xlTGluZVJ1bGUoIiMiLCBudWxsLCBjb21tZW50LCAoY2hhcikgMCwgdHJ1ZSwgZmFsc2UpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCQkJfQotCQl9OwotCQlmUGFydGl0aW9uZXI9IGNyZWF0ZVBhcnRpdGlvbmVyKHNjYW5uZXIpOwotCQlmRG9jLnNldERvY3VtZW50UGFydGl0aW9uZXIoZlBhcnRpdGlvbmVyKTsKLQkJZlBhcnRpdGlvbmVyLmNvbm5lY3QoZkRvYyk7Ci0KLQkJZkRvYy5zZXQoIiMiKTsKLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0KLSAgICB9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDAsIGZEb2MuZ2V0TGVuZ3RoKCksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnRbXSBvZmZzZXRzLCBTdHJpbmcgc3RhcnRUeXBlKSB7Ci0JCUlUeXBlZFJlZ2lvbltdIHJlZ2lvbnM9IGZQYXJ0aXRpb25lci5jb21wdXRlUGFydGl0aW9uaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7Ci0KLQkJU3RyaW5nIHR5cGU9IHN0YXJ0VHlwZTsKLQkJaW50IHByZXZpb3VzT2Zmc2V0PSBzdGFydE9mZnNldDsKLQotCQlpbnQgaj0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgY3VycmVudE9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZW5kT2Zmc2V0IDogb2Zmc2V0c1tpXTsKLQkJCWlmIChjdXJyZW50T2Zmc2V0IC0gcHJldmlvdXNPZmZzZXQgIT0gMCkgeyAvLyBkb24ndCBkbyBlbXB0eSBwYXJ0aXRpb25zCi0JCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gcmVnaW9uc1tqKytdOwotCi0JCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBwcmV2aW91c09mZnNldCwgY3VycmVudE9mZnNldCwgdHlwZSk7Ci0JCQl9Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IGN1cnJlbnRPZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnRbXSBvZmZzZXRzKSB7Ci0JCVN0cmluZyB0eXBlPSBERUZBVUxUOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IDA7Ci0JCWZvciAoaW50IGk9IDA7IGkgPD0gb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJaW50IG9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZkRvYy5nZXRMZW5ndGgoKSA6IG9mZnNldHNbaV07Ci0JCQlhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUocHJldmlvdXNPZmZzZXQsIG9mZnNldCwgdHlwZSk7Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IG9mZnNldDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnRbXSBvZmZzZXRzKSB7Ci0JCVN0cmluZyB0eXBlPSBERUZBVUxUOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IDA7Ci0JCWZvciAoaW50IGk9IDA7IGkgPD0gb2Zmc2V0cy5sZW5ndGg7IGkrKykgewotCQkJaW50IG9mZnNldD0gKGkgPT0gb2Zmc2V0cy5sZW5ndGgpID8gZkRvYy5nZXRMZW5ndGgoKSA6IG9mZnNldHNbaV07Ci0JCQlhc3NlcnRFcXVhbFBhcnRpdGlvbihwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uKGludCBvZmZzZXQsIGludCBlbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBvZmZzZXQ7Ci0JCWludCB0bz0gZW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlJVHlwZWRSZWdpb24gcmVnaW9uPSBmUGFydGl0aW9uZXIuZ2V0UGFydGl0aW9uKGkpOwotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBvZmZzZXQsIGVuZCwgdHlwZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0VHlwZWRSZWdpb24oSVR5cGVkUmVnaW9uIHJlZ2lvbiwgaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGVuZCAtIG9mZnNldCwgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHR5cGUsIHJlZ2lvbi5nZXRUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUoaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IG9mZnNldDsKLQkJaW50IHRvPSBlbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyh0eXBlLCBmUGFydGl0aW9uZXIuZ2V0Q29udGVudFR5cGUoaSkpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvUnVsZXNUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkZWI2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgY2xhc3MgUnVsZXNUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoCi0JCQkJIlRlc3QgU3VpdGUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlcyIpOwotCQkvLyAkSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShGYXN0UGFydGl0aW9uZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKERlZmF1bHRQYXJ0aXRpb25lclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoV29yZFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFNjYW5uZXJDb2x1bW5UZXN0LmNsYXNzKTsKLQkJLy8gJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9TY2FubmVyQ29sdW1uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjBjOGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5CdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRTY2FubmVyOwotCi0KLS8qKgotICogQHNpbmNlIDMuNAotICovCi1wdWJsaWMgY2xhc3MgU2Nhbm5lckNvbHVtblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIElEb2N1bWVudCBmRG9jdW1lbnQ7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgic2Nhbm5lciB0ZXN0Iik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkRvY3VtZW50PSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdWxlQmFzZWRTY2FubmVyQ29sdW1uUmVhZCgpIHsKLQkJX3Rlc3RTY2FubmVyQ29sdW1uUmVhZChuZXcgUnVsZUJhc2VkU2Nhbm5lcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UnVsZUJhc2VkU2Nhbm5lckNvbHVtblVucmVhZCgpIHsKLQkJX3Rlc3RTY2FubmVyQ29sdW1uVW5yZWFkKG5ldyBSdWxlQmFzZWRTY2FubmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXJDb2x1bW5SZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5SZWFkKG5ldyBCdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXIoMTAwKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lckNvbHVtblVucmVhZCgpIHsKLQkJX3Rlc3RTY2FubmVyQ29sdW1uVW5yZWFkKG5ldyBCdWZmZXJlZFJ1bGVCYXNlZFNjYW5uZXIoMTAwKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIF90ZXN0U2Nhbm5lckNvbHVtblJlYWQoUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZkRvY3VtZW50LCAwLCAxMCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCdzJywgc2Nhbm5lci5yZWFkKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCXNjYW5uZXIudW5yZWFkKCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgX3Rlc3RTY2FubmVyQ29sdW1uVW5yZWFkKFJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcikgewotCQlzY2FubmVyLnNldFJhbmdlKGZEb2N1bWVudCwgMCwgMTApOwotCQlhc3NlcnRFcXVhbHMoMCwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCWFzc2VydEVxdWFscygncycsIHNjYW5uZXIucmVhZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCQlzY2FubmVyLnVucmVhZCgpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9Xb3JkUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjVlY2ZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0QXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JV29yZERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuUGF0dGVyblJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRTY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Xb3JkUnVsZTsKLQotLyoqCi0gKiBAc2luY2UgMy4zCi0gKi8KLXB1YmxpYyBjbGFzcyBXb3JkUnVsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFNpbXBsZVdvcmREZXRlY3RvciBpbXBsZW1lbnRzIElXb3JkRGV0ZWN0b3IgewotCQlwdWJsaWMgYm9vbGVhbiBpc1dvcmRTdGFydChjaGFyIGMpIHsKLQkJCXJldHVybiAhQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzV29yZFBhcnQoY2hhciBjKSB7Ci0JCQlyZXR1cm4gIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYyk7Ci0JCX0KLQl9Ci0KLQotCS8qCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE2MzExNgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNjMxMTYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSVdvcmREZXRlY3RvciBkZXRlY3Rvcj0gbmV3IElXb3JkRGV0ZWN0b3IoKSB7Ci0KLQkJCXB1YmxpYyBib29sZWFuIGlzV29yZFBhcnQoY2hhciBjKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBib29sZWFuIGlzV29yZFN0YXJ0KGNoYXIgYykgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCi0JCX07Ci0KLQkJV29yZFJ1bGUgcnVsZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBuZXcgVG9rZW4odGhpcykpOwotCi0JCVJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7IHJ1bGUgfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KCksIDAsIDApOwotCi0JCUlUb2tlbiB0b2tlbj0gbnVsbDsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlICh0b2tlbiAhPSBUb2tlbi5FT0YgJiYgaSsrIDwgMTAwMCkKLQkJCXRva2VuPSBzY2FubmVyLm5leHRUb2tlbigpOwotCi0JCWFzc2VydFRydWUoaSA8IDEwMDApOwotCi0JfQotCi0JLyoKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzU1Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE0NDM1NSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJV29yZERldGVjdG9yIGRldGVjdG9yPSBuZXcgU2ltcGxlV29yZERldGVjdG9yKCk7Ci0KLQkJU3RyaW5nIGRlZmF1bHRUb2tlblN0cmluZz0gImRlZmF1bHRUb2tlbiI7Ci0JCVRva2VuIGRlZmF1bHRUb2tlbj0gbmV3IFRva2VuKGRlZmF1bHRUb2tlblN0cmluZyk7Ci0KLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ05vcm1hbD0gIlRlc3RUb2tlblN0cmluZyI7Ci0JCVN0cmluZyB0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbj0gIlRlc3RUT0tFTlN0cmluZyI7Ci0JCVN0cmluZyB0ZXN0VG9rZW5TdHJpbmdDb21wbGV0ZWx5RGlmZmVyZW50PSAiWFhYIjsKLQkJVG9rZW4gbm9ybWFsVG9rZW49IG5ldyBUb2tlbih0ZXN0VG9rZW5TdHJpbmdOb3JtYWwpOwotCi0JCVdvcmRSdWxlIHJ1bGU9IG5ldyBXb3JkUnVsZShkZXRlY3RvciwgZGVmYXVsdFRva2VuLCB0cnVlKTsKLQkJcnVsZS5hZGRXb3JkKHRlc3RUb2tlblN0cmluZ05vcm1hbCwgbm9ybWFsVG9rZW4pOwotCi0JCS8vIHNjZW5hcmlvIDEKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyAoIlRlc3RUb2tlblN0cmluZyIpCi0JCS8vIHBvc3Q6IGV4cGVjdCB0aGUgbm9ybWFsIHRva2VuIHRvIGJlIHJldHVybmVkCi0JCVJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwpLCAwLCB0ZXN0VG9rZW5TdHJpbmdOb3JtYWwubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwpKTsKLQotCQkvLyBzY2VuYXJpbyAyCi0JCS8vIHByZTogcGFzcyBpbiBhIG5vcm1hbCBzdHJpbmcgYnV0IGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbiAoIlRlc3RUT0tFTlN0cmluZyIpCi0JCS8vIHBvc3Q6IGV4cGVjdCB0aGUgbm9ybWFsIHRva2VuIHRvIGJlIHJldHVybmVkCi0JCXNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMobmV3IElSdWxlW10ge3J1bGV9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nRGlmZmVyZW50Q2FwaXRhbGl6YXRpb24pLCAwLCB0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbi5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDMKLQkJLy8gcHJlOiBwYXNzIGluIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RyaW5nICgiWFhYIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBkZWZhdWx0IHRva2VuIHRvIGJlIHJldHVybmVkIGJlY2F1c2UgdGhlIHN0cmluZyBjYW4ndCBiZSBtYXRjaGVkCi0JCXNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMobmV3IElSdWxlW10ge3J1bGV9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nQ29tcGxldGVseURpZmZlcmVudCksIDAsIHRlc3RUb2tlblN0cmluZ0NvbXBsZXRlbHlEaWZmZXJlbnQubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyhkZWZhdWx0VG9rZW5TdHJpbmcpKTsKLQotCQlXb3JkUnVsZSBydWxlV2l0aG91dElnbm9yZUNhc2U9IG5ldyBXb3JkUnVsZShkZXRlY3RvciwgZGVmYXVsdFRva2VuKTsKLQkJcnVsZVdpdGhvdXRJZ25vcmVDYXNlLmFkZFdvcmQodGVzdFRva2VuU3RyaW5nTm9ybWFsLCBub3JtYWxUb2tlbik7Ci0KLQkJLy8gc2NlbmFyaW8gNAotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nICgiVGVzdFRva2VuU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZVdpdGhvdXRJZ25vcmVDYXNlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ05vcm1hbCksIDAsIHRlc3RUb2tlblN0cmluZ05vcm1hbC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDUKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyBidXQgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uICgiVGVzdFRPS0VOU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBkZWZhdWx0IHRva2VuIHRvIGJlIHJldHVybmVkCi0JCXNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMobmV3IElSdWxlW10ge3J1bGVXaXRob3V0SWdub3JlQ2FzZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbiksIDAsIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHMoZGVmYXVsdFRva2VuU3RyaW5nKSk7Ci0JfQotCi0JLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3NTcxMgotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNzU3MTJfMSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVsZVtdIHJ1bGVzPSBuZXcgSVJ1bGVbMl07Ci0KLQkJSVRva2VuIHN0ZXBUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVBhdHRlcm5SdWxlIHN0ZXBSdWxlPSBuZXcgUGF0dGVyblJ1bGUoIigoKCIsICIpIiwgc3RlcFRva2VuLCAoY2hhcikgMCxmYWxzZSk7Ci0JCXN0ZXBSdWxlLnNldENvbHVtbkNvbnN0cmFpbnQoLTEpOwotCQlydWxlc1sxXT0gc3RlcFJ1bGU7Ci0KLQkJSVRva2VuIHRpdGxlVG9rZW49IG5ldyBUb2tlbihuZXcgVGV4dEF0dHJpYnV0ZShudWxsLCBudWxsLCBTV1QuQk9MRCkpOwotCQlXb3JkUnVsZSB3b3JkUnVsZT0gbmV3IFdvcmRSdWxlKG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKSk7Ci0JCXdvcmRSdWxlLmFkZFdvcmQoIigoIiwgdGl0bGVUb2tlbik7Ci0JCXJ1bGVzWzBdPSB3b3JkUnVsZTsKLQotCQlJRG9jdW1lbnQgZG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgiKCgoIFxuKChcbi0gQ2hlZXNlXG4tIFdpbmUiKTsKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKHJ1bGVzKTsKLQkJc2Nhbm5lci5zZXRSYW5nZShkb2N1bWVudCwgMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCi0JCUlUb2tlbiBkZWZhdWx0VG9rZW49IG5ldyBUb2tlbih0aGlzKTsKLQkJc2Nhbm5lci5zZXREZWZhdWx0UmV0dXJuVG9rZW4oZGVmYXVsdFRva2VuKTsKLQotCQlJVG9rZW4gdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUoZGVmYXVsdFRva2VuLCB0b2tlbik7Ci0KLQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUoZGVmYXVsdFRva2VuLCB0b2tlbik7Ci0KLQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUoZGVmYXVsdFRva2VuLCB0b2tlbik7Ci0KLQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUodGl0bGVUb2tlbiwgdG9rZW4pOwotCi0JfQotCi0JLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE3NTcxMgotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNzU3MTJfMigpIHRocm93cyBFeGNlcHRpb24gewotCQlJUnVsZVtdIHJ1bGVzPSBuZXcgSVJ1bGVbMl07Ci0KLQkJSVRva2VuIHN0ZXBUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVBhdHRlcm5SdWxlIHN0ZXBSdWxlPSBuZXcgUGF0dGVyblJ1bGUoIigoKCIsICIpIiwgc3RlcFRva2VuLCAoY2hhcikgMCxmYWxzZSk7Ci0JCXN0ZXBSdWxlLnNldENvbHVtbkNvbnN0cmFpbnQoLTEpOwotCQlydWxlc1sxXT0gc3RlcFJ1bGU7Ci0KLQkJSVRva2VuIHRpdGxlVG9rZW49IG5ldyBUb2tlbihuZXcgVGV4dEF0dHJpYnV0ZShudWxsLCBudWxsLCBTV1QuQk9MRCkpOwotCQlXb3JkUnVsZSB3b3JkUnVsZT0gbmV3IFdvcmRSdWxlKG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKSk7Ci0JCXdvcmRSdWxlLmFkZFdvcmQoIigoIiwgdGl0bGVUb2tlbik7Ci0JCXJ1bGVzWzBdPSB3b3JkUnVsZTsKLQotCQlJRG9jdW1lbnQgZG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgiKChcbigoXG4tIENoZWVzZVxuLSBXaW5lIik7Ci0JCVJ1bGVCYXNlZFNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhydWxlcyk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZG9jdW1lbnQsIDAsIGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQotCQlJVG9rZW4gZGVmYXVsdFRva2VuPSBuZXcgVG9rZW4odGhpcyk7Ci0JCXNjYW5uZXIuc2V0RGVmYXVsdFJldHVyblRva2VuKGRlZmF1bHRUb2tlbik7Ci0KLQkJSVRva2VuIHRva2VuPSBzY2FubmVyLm5leHRUb2tlbigpOwotCQlhc3NlcnRTYW1lKHRpdGxlVG9rZW4sIHRva2VuKTsKLQotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA4NjU4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIFRlc3RzCi1lZGl0b3IubmFtZS4wID0gR2VuZXJpYyBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9yCi1jYXRlZ29yeS5uYW1lLjAgPSBTU0UgVGVzdGluZwotdmlldy5uYW1lLjAgPSBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dCBNYW5hZ2VtZW50IFRlc3Rlcgotdmlldy5uYW1lLjEgPSBBY3Rpb24gVGVzdGVyCi1hY3Rpb24ubGFiZWwuMCA9IG9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMgVGVzdCBBY3Rpb24KLWFjdGlvbi5sYWJlbC4xID0gTWFrZSBSZWFkLU9ubHkKLWFjdGlvbi5sYWJlbC4yID0gQ2xlYXIgYWxsIFJlYWQtT25seQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTY1N2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KLQkJPGVkaXRvcgotCQkJbmFtZT0iJWVkaXRvci5uYW1lLjAiCi0JCQlleHRlbnNpb25zPSJwcm9qZWN0LCBjbGFzc3BhdGgsIHdlYnNldHRpbmdzLCBzZXJ2ZXJQcmVmZXJlbmNlIgotCQkJaWNvbj0iJG5sJC9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiCi0JCQljb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3IiCi0JCQlzeW1ib2xpY0ZvbnROYW1lPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gRWRpdG9yIGFjdGlvbnNldHMgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0UGFydEFzc29jaWF0aW9ucyI+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIj4KLQkJCTxwYXJ0Ci0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCQk8L3BhcnQ+Ci0JCTwvYWN0aW9uU2V0UGFydEFzc29jaWF0aW9uPgotCQk8YWN0aW9uU2V0UGFydEFzc29jaWF0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQiPgotCQkJPHBhcnQKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KLQkJCTwvcGFydD4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTxjYXRlZ29yeQotCQkJbmFtZT0iJWNhdGVnb3J5Lm5hbWUuMCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIj4KLQkJPC9jYXRlZ29yeT4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3Ij4KLQkJPC92aWV3PgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4xIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5BY3Rpb25UZXN0VmlldyIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkFjdGlvblRlc3RWaWV3Ij4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0JCTx2aWV3ZXJDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLkVkaXRvckNvbnRleHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0Ij4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4wIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RBY3Rpb25EZWxlZ2F0ZSIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QuMSIgLz4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4xIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0LjIiIC8+Ci0JCQk8YWN0aW9uCi0JCQkJbGFiZWw9IiVhY3Rpb24ubGFiZWwuMiIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5DbGVhclJlYWRPbmx5RGVsZWdhdGUiCi0JCQkJbWVudWJhclBhdGg9ImFkZGl0aW9ucyIKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0LjIiIC8+Ci0JCTwvdmlld2VyQ29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5lZGl0b3JDb25maWd1cmF0aW9uIj4KLQkJPHByb3Zpc2lvbmFsQ29uZmlndXJhdGlvbgotCQkJdHlwZT0ibGluZXN0eWxlcHJvdmlkZXIiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5UZXN0TGluZVN0eWxlUHJvdmlkZXIiCi0JCQl0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLlNDUklQVC5sYW5ndWFnZS5CTFVFIiAvPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULnR5cGUuVEVYVC9CTFVFIiAvPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2UuanN0LmpzcC5TQ1JJUFQuQkxVRSIgLz4KLQk8L2V4dGVuc2lvbj4KLQkKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmYyOWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQWN0aW9uVGVzdFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsUmVzb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqIEEgdmlldyB0byBoYW5nIGFjdGlvbnMgb2ZmIG9mIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYXQgYXJiaXRyYXJ5IHRpbWVzLgotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uVGVzdFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0KLQlwcml2YXRlIGNsYXNzIENvbXBvbmVudFZpZXdlciBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCAmJiAhZlNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgZlNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmU2VsZWN0aW9uOwotCQkJCWlmIChzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKLQkJCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCQlJVmlydHVhbFJlc291cmNlW10gdmlydHVhbFJlc291cmNlcyA9IENvbXBvbmVudENvcmUuY3JlYXRlUmVzb3VyY2VzKHJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQkJCS8vIE9ubHkgcmV0dXJuIHJlc3VsdHMgZm9yIEZsZXhpYmxlIHByb2plY3RzCi0JCQkJCWlmICh2aXJ0dWFsUmVzb3VyY2VzICE9IG51bGwpIHsKLQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmlydHVhbFJlc291cmNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbih2aXJ0dWFsUmVzb3VyY2VzW2ldLmdldENvbXBvbmVudCgpLmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBFbXB0eVRleHRTZXR0ZXIgZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgRW1wdHlUZXh0U2V0dGVyKCkgewotCQkJc3VwZXIoIlNldCBUZXh0IEVkaXRvciB0ZXh0IHRvIGVtcHR5Iik7Ci0JCQlzZXRUb29sVGlwVGV4dCgiU2V0IFRleHQgRWRpdG9yIHRleHQgdG8gZW1wdHkgdXNpbmcgc2V0KCkgQVBJIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGdldFZpZXdTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IG51bGw7Ci0JCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQkJdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yOwotCQkJZWxzZQotCQkJCXRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXByaW50KCJFcnJvciBnZXR0aW5nIElEb2N1bWVudC5cbiIpOwotCQkJfQotCQl9Ci0JfQotCi0JQ29udHJvbCBmQ29udHJvbCA9IG51bGw7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb247Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uTGlzdGVuZXIgZlNlbGVjdGlvbkxpc3RlbmVyOwotCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUFjdGlvbnMoKSB7Ci0JCUxpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlhY3Rpb25zLmFkZChuZXcgRW1wdHlUZXh0U2V0dGVyKCkpOwotCQlhY3Rpb25zLmFkZChuZXcgQ29tcG9uZW50Vmlld2VyKCkpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlUZXh0Vmlld2VyIHRleHQgPSBuZXcgVGV4dFZpZXdlcihwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCQl0ZXh0LnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgpKTsKLQkJZkNvbnRyb2wgPSB0ZXh0LmdldFRleHRXaWRnZXQoKTsKLQkJdGV4dC5nZXREb2N1bWVudCgpLnNldCgiVXNlIGVpdGhlciB0aGUgdG9vbGJhciBvciB0aGUgbWVudSB0byBydW4geW91ciBhY3Rpb25zXG5cbiIpOwotCX0KLQotCXByaXZhdGUgSVNlbGVjdGlvbkxpc3RlbmVyIGdldFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQlpZiAoZlNlbGVjdGlvbkxpc3RlbmVyID09IG51bGwpIHsKLQkJCWZTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBJU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJCQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCQkJCX0KLQkJCX07Ci0JCX0KLQkJcmV0dXJuIGZTZWxlY3Rpb25MaXN0ZW5lcjsKLQl9Ci0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQkJTGlzdCBhY3Rpb25zID0gY3JlYXRlQWN0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQWN0aW9uKSBhY3Rpb25zLmdldChpKSk7Ci0JCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZCgoSUFjdGlvbikgYWN0aW9ucy5nZXQoaSkpOwotCQl9Ci0JCUxpc3QgY29udHJpYnV0aW9ucyA9IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQ29udHJpYnV0aW9uSXRlbSkgY29udHJpYnV0aW9ucy5nZXQoaSkpOwotCQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQoKElDb250cmlidXRpb25JdGVtKSBjb250cmlidXRpb25zLmdldChpKSk7Ci0JCX0KLQkJc2l0ZS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKGdldFNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCX0KLQotCXZvaWQgcHJpbnQoU3RyaW5nIHMpIHsKLQkJKChTdHlsZWRUZXh0KSBmQ29udHJvbCkuYXBwZW5kKHMpOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmQ29udHJvbCAhPSBudWxsICYmICFmQ29udHJvbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCWZDb250cm9sLnNldEZvY3VzKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NsZWFyUmVhZE9ubHlEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9DbGVhclJlYWRPbmx5RGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1YjQzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NsZWFyUmVhZE9ubHlEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDbGVhclJlYWRPbmx5RGVsZWdhdGUgZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJRWRpdG9yQWN0aW9uRGVsZWdhdGUgewotCi0JSVNlbGVjdGlvbiBmU2VsZWN0aW9uID0gbnVsbDsKLQlJRWRpdG9yUGFydCBmRWRpdG9yID0gbnVsbDsKLQotCXB1YmxpYyBDbGVhclJlYWRPbmx5RGVsZWdhdGUoKSB7Ci0JfQotCi0JcHVibGljIENsZWFyUmVhZE9ubHlEZWxlZ2F0ZShTdHJpbmcgdGV4dCkgewotCQlzdXBlcih0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgQ2xlYXJSZWFkT25seURlbGVnYXRlKFN0cmluZyB0ZXh0LCBJbWFnZURlc2NyaXB0b3IgaW1hZ2UpIHsKLQkJc3VwZXIodGV4dCwgaW1hZ2UpOwotCX0KLQotCXB1YmxpYyBDbGVhclJlYWRPbmx5RGVsZWdhdGUoU3RyaW5nIHRleHQsIGludCBzdHlsZSkgewotCQlzdXBlcih0ZXh0LCBzdHlsZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJZkVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSVN0cnVjdHVyZWREb2N1bWVudCkgewotCQkJKChJU3RydWN0dXJlZERvY3VtZW50KSBkb2N1bWVudCkuY2xlYXJSZWFkT25seSgwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDJjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlCi0gKiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcidzIGNvbW1vbiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUKLSAqIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwkvLyByYW5kb20gc3RyaW5nCi0JCQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiK3ByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwkJCi0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQkKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9FeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5YmUwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5FcnJvckRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQXJyYXlDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc2lzdGFibGVFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklSZXVzYWJsZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5PcGVuV2l0aE1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5SZXNvdXJjZVNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRleHQuRWRpdG9yc1VJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklFbGVtZW50U3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklVcGRhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0OwotCi0KLS8qKgotICogQGF1dGhvciBuaXRpbgotICogCi0gKiBBIHZpZXcgdG8gYXNzaXN0IGluIHRlc3Rpbmcgb3V0IFN0cnVjdHVyZWRUZXh0RWRpdG9yJ3MgSUVkaXRvcklucHV0Ci0gKiBoYW5kbGluZy4KLSAqIAotICogUGVybWFuZW50bHkgaW4tcHJvZ3Jlc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogQWRkcyBhbiBJRmlsZUVkaXRvcklucHV0IHRvIHRoZSBsaXN0IG9mIGlucHV0cyB3aXRoIHdoaWNoIHRvIHRlc3QKLQkgKi8KLQljbGFzcyBBZGRGaWxlSW5wdXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgQWRkRmlsZUlucHV0QWN0aW9uKCkgewotCQkJc3VwZXIoIkFkZCBGaWxlRWRpdG9ySW5wdXQiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2cgZGxnID0gbmV3IFJlc291cmNlU2VsZWN0aW9uRGlhbG9nKGZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCksIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCksICJDaG9vc2UiKTsKLQkJCWludCByZXR2YWwgPSBkbGcub3BlbigpOwotCQkJaWYgKHJldHZhbCA9PSBXaW5kb3cuT0spIHsKLQkJCQlPYmplY3RbXSBmaWxlcyA9IGRsZy5nZXRSZXN1bHQoKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCWZJbnB1dHMuYWRkKG5ldyBGaWxlRWRpdG9ySW5wdXQoKElGaWxlKSBmaWxlc1tpXSkpOwotCQkJCX0KLQkJCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBZGRzIGFuIElTdG9yYWdlRWRpdG9ySW5wdXQgdG8gdGhlIGxpc3Qgb2YgaW5wdXRzIHdpdGggd2hpY2ggdG8gdGVzdAotCSAqLwotCWNsYXNzIEFkZFN0b3JhZ2VJbnB1dEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyBBZGRTdG9yYWdlSW5wdXRBY3Rpb24oKSB7Ci0JCQlzdXBlcigiQWRkIFN0b3JhZ2VFZGl0b3JJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlGaWxlRGlhbG9nIGRsZyA9IG5ldyBGaWxlRGlhbG9nKGZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJU3RyaW5nIGZpbGVOYW1lID0gZGxnLm9wZW4oKTsKLQkJCWlmIChmaWxlTmFtZSAhPSBudWxsKSB7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dChuZXcgRmlsZShmaWxlTmFtZSkpKTsKLQkJCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBIYW5kbGVyIGZvciBkb3VibGUtY2xpY2sgCi0JICovCi0JY2xhc3MgRG91YmxlQ2xpY2tMaXN0ZW5lciBpbXBsZW1lbnRzIElEb3VibGVDbGlja0xpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBldmVudCkgewotCQkJbmV3IElucHV0T3BlbkFjdGlvbigpLnJ1bigpOwotCQl9Ci0JfQotCi0JY2xhc3MgRWRpdG9ySW5wdXRMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciB7Ci0JCUlMYWJlbFByb3ZpZGVyIGJhc2VQcm92aWRlciA9IG5ldyBXb3JrYmVuY2hMYWJlbFByb3ZpZGVyKCk7Ci0KLQkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJLy8gbm90IGltcGxlbWVudGVkCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQkJLy8gbm8gbmVlZAotCQl9Ci0KLQkJcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKLQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCAmJiBjb2x1bW5JbmRleCA9PSAwKSB7Ci0JCQkJcmV0dXJuIGJhc2VQcm92aWRlci5nZXRJbWFnZSgoKElGaWxlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldEZpbGUoKSk7Ci0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSAoSUVkaXRvcklucHV0KSBlbGVtZW50OwotCQkJU3RyaW5nIHRleHQgPSBudWxsOwotCQkJc3dpdGNoIChjb2x1bW5JbmRleCkgewotCQkJCWNhc2UgMCA6Ci0JCQkJCXRyeSB7Ci0JCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkJCUlQYXRoIGZ1bGxwYXRoID0gKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldFN0b3JhZ2UoKS5nZXRGdWxsUGF0aCgpOwotCQkJCQkJCXRleHQgPSBmdWxscGF0aCAhPSBudWxsID8gZnVsbHBhdGgudG9TdHJpbmcoKSA6ICgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXROYW1lKCk7Ci0JCQkJCQkJaWYgKCgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5pc0RpcnR5KCkpIHsKLQkJCQkJCQkJdGV4dCA9ICIqIiArIHRleHQ7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCQl0ZXh0ID0gKChJRmlsZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJCX0KLQotCQkJCQlicmVhazsKLQkJCQljYXNlIDEgOgotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkJdGV4dCA9ICJGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQiOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJCQl0ZXh0ID0gIkZpbGVFZGl0b3JJbnB1dCI7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQl0ZXh0ID0gaW5wdXQuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAodGV4dCA9PSBudWxsKQotCQkJCXRleHQgPSAiIjsKLQkJCXJldHVybiB0ZXh0OwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCS8vIG5vdCBpbXBsZW1lbnRlZAotCQl9Ci0JfQotCi0KLQljbGFzcyBGaWxlQmFja2VkU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHsKLQkJRmlsZSBmRmlsZSA9IG51bGw7Ci0KLQkJRmlsZUJhY2tlZFN0b3JhZ2UoRmlsZSBmaWxlKSB7Ci0JCQlzdXBlcigpOwotCQkJZkZpbGUgPSBmaWxlOwotCQl9Ci0KLQkJYm9vbGVhbiBleGlzdHMoKSB7Ci0JCQlyZXR1cm4gZkZpbGUuZXhpc3RzKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQotCQkgKi8KLQkJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXRDb250ZW50cygpCi0JCSAqLwotCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0Q29udGVudHMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQlJbnB1dFN0cmVhbSBjb250ZW50cyA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmRmlsZSk7Ci0JCQkJQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKChpbnQpIGZGaWxlLmxlbmd0aCgpKTsKLQkJCQlieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQl3aGlsZSAoY29udGVudHMuYXZhaWxhYmxlKCkgPiAwKSB7Ci0JCQkJCWludCBjb3VudCA9IGNvbnRlbnRzLnJlYWQoYnl0ZXMpOwotCQkJCQlidWZmZXIucHV0KGJ5dGVzLCAwLCBjb3VudCk7Ci0JCQkJfQotCQkJCWNvbnRlbnRzLmNsb3NlKCk7Ci0KLQkJCQljb250ZW50cyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWZmZXIuYXJyYXkoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKTsKLQkJCX0KLQkJCXJldHVybiBjb250ZW50czsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0RnVsbFBhdGgoKQotCQkgKi8KLQkJcHVibGljIElQYXRoIGdldEZ1bGxQYXRoKCkgewotCQkJaWYgKHByb3ZpZGVJU3RvcmFnZUZ1bGxQYXRoKSB7Ci0JCQkJcmV0dXJuIG5ldyBQYXRoKGZGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCX0KLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXROYW1lKCkKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCXJldHVybiBmRmlsZS5nZXROYW1lKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2lzUmVhZE9ubHkoKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JY2xhc3MgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0IGltcGxlbWVudHMgSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0IHsKLQkJTGlzdCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzID0gbmV3IFZlY3RvcigwKTsKLQkJYm9vbGVhbiBmSXNEaXJ0eSA9IGZhbHNlOwotCQlGaWxlQmFja2VkU3RvcmFnZSBmU3RvcmFnZSA9IG51bGw7Ci0KLQkJRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KEZpbGUgZmlsZSkgewotCQkJZlN0b3JhZ2UgPSBuZXcgRmlsZUJhY2tlZFN0b3JhZ2UoZmlsZSk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9ucy5icmVha3BvaW50LklFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dCNhZGRFbGVtZW50U3RhdGVMaXN0ZW5lcihvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklFbGVtZW50U3RhdGVMaXN0ZW5lcikKLQkJICovCi0JCXB1YmxpYyB2b2lkIGFkZEVsZW1lbnRTdGF0ZUxpc3RlbmVyKElFbGVtZW50U3RhdGVMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCQl9Ci0KLQkJdm9pZCBlbGVtZW50Q29udGVudEFib3V0VG9CZVJlcGxhY2VkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50Q29udGVudEFib3V0VG9CZVJlcGxhY2VkKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgZWxlbWVudENvbnRlbnRSZXBsYWNlZCgpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudENvbnRlbnRSZXBsYWNlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnREZWxldGVkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50RGVsZXRlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnREaXJ0eVN0YXRlQ2hhbmdlZChib29sZWFuIGRpcnR5KSB7Ci0JCQlzZXREaXJ0eShkaXJ0eSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnREaXJ0eVN0YXRlQ2hhbmdlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcywgZGlydHkpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50TW92ZWQoT2JqZWN0IG9sZEVsZW1lbnQsIE9iamVjdCBuZXdFbGVtZW50KSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnRNb3ZlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcywgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZXhpc3RzKCkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGV4aXN0cygpIHsKLQkJCXJldHVybiBmU3RvcmFnZS5leGlzdHMoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpCi0JCSAqLwotCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlGaWxlIGdldEZpbGUoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZkZpbGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRJbWFnZURlc2NyaXB0b3IoKQotCQkgKi8KLQkJcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldE5hbWUoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmdldE5hbWUoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldFBlcnNpc3RhYmxlKCkKLQkJICovCi0JCXB1YmxpYyBJUGVyc2lzdGFibGVFbGVtZW50IGdldFBlcnNpc3RhYmxlKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQjZ2V0U3RvcmFnZSgpCi0JCSAqLwotCQlwdWJsaWMgSVN0b3JhZ2UgZ2V0U3RvcmFnZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCXJldHVybiBmU3RvcmFnZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldFRvb2xUaXBUZXh0KCkKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZ2V0RnVsbFBhdGgoKSAhPSBudWxsID8gZlN0b3JhZ2UuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpIDogZlN0b3JhZ2UuZ2V0TmFtZSgpOwotCQl9Ci0KLQkJYm9vbGVhbiBpc0RpcnR5KCkgewotCQkJcmV0dXJuIGZJc0RpcnR5OwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQjcmVtb3ZlRWxlbWVudFN0YXRlTGlzdGVuZXIob3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JRWxlbWVudFN0YXRlTGlzdGVuZXIpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCByZW1vdmVFbGVtZW50U3RhdGVMaXN0ZW5lcihJRWxlbWVudFN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCWZFbGVtZW50U3RhdGVMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQkJfQotCi0JCXZvaWQgc2V0RGlydHkoYm9vbGVhbiBkaXJ0eSkgewotCQkJZklzRGlydHkgPSBkaXJ0eTsKLQkJfQotCX0KLQotCWNsYXNzIElucHV0Q2hhbmdlRGlydHlTdGF0ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkgewotCQkJc3VwZXIoIlRvZ2dsZSBkaXJ0eSBmbGFnIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChpbnB1dHNbaV0gaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudERpcnR5U3RhdGVDaGFuZ2VkKCEoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5pc0RpcnR5KCkpOwotCQkJCX0KLQkJCX0KLQkJCWZJbnB1dExpc3QucmVmcmVzaCh0cnVlKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXNldEVuYWJsZWQoZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGZTZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXREZWxldGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIElucHV0RGVsZXRlQWN0aW9uKCkgewotCQkJc3VwZXIoIkRlbGV0ZSBJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoaW5wdXRzW2ldIGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnREZWxldGVkKCk7Ci0JCQkJfQotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlmSW5wdXRzLnJlbW92ZShpbnB1dHNbaV0pOwotCQkJfQotCQkJZklucHV0TGlzdC5yZWZyZXNoKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KTsKLQkJfQotCX0KLQotCWNsYXNzIElucHV0TW92ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXRNb3ZlQWN0aW9uKCkgewotCQkJc3VwZXIoIk1vdmUgSW5wdXQiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKGlucHV0c1tpXSBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50TW92ZWQoaW5wdXRzW2ldLCBpbnB1dHNbaV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXNldEVuYWJsZWQoZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGZTZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXRPcGVuQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIElucHV0T3BlbkFjdGlvbigpIHsKLQkJCXN1cGVyKCJPcGVuIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkub3BlbkVkaXRvcihpbnB1dHNbaV0sIGdldEVkaXRvcklkKGlucHV0c1tpXSkpOwotCQkJCX0KLQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQlvcGVuRXJyb3IoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpLCAiT3BlblN5c3RlbUVkaXRvckFjdGlvbi5kaWFsb2dUaXRsZSIsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dFJlcGxhY2VDb250ZW50c0FjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24oKSB7Ci0JCQlzdXBlcigiUmVwbGFjZSBJbnB1dCdzIENvbnRlbnRzIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnRDb250ZW50QWJvdXRUb0JlUmVwbGFjZWQoKTsKLQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50Q29udGVudFJlcGxhY2VkKCk7Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KTsKLQkJfQotCX0KLQotCWNsYXNzIFJlbW92ZUlucHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIFJlbW92ZUlucHV0QWN0aW9uKCkgewotCQkJc3VwZXIoIlJlbW92ZSIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlmSW5wdXRzLnJlbW92ZShpbnB1dHNbaV0pOwotCQkJfQotCQkJZklucHV0TGlzdC5yZWZyZXNoKCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBSZXVzZUVkaXRvckFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgUmV1c2VFZGl0b3JBY3Rpb24oKSB7Ci0JCQlzdXBlcigiUmV1c2UgRWRpdG9yIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIElSZXVzYWJsZUVkaXRvcikgewotCQkJCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLnJldXNlRWRpdG9yKCgoSVJldXNhYmxlRWRpdG9yKSBlZGl0b3IpLCBpbnB1dHNbaV0pOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5iZWVwKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJYm9vbGVhbiBlbmFibGUgPSB0cnVlOwotCQkJdHJ5IHsKLQkJCQllbmFibGUgPSBmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSBpbnN0YW5jZW9mIElSZXVzYWJsZUVkaXRvcjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWVuYWJsZSA9IHRydWU7Ci0JCQl9Ci0JCQlzZXRFbmFibGVkKGVuYWJsZSk7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBwcm92aWRlSVN0b3JhZ2VGdWxsUGF0aCA9IHRydWU7Ci0KLQkvKioKLQkgKiBPcGVuIGFuIGVycm9yIHN0eWxlIGRpYWxvZyBmb3IgUGFydEluaXRFeGNlcHRpb24gYnkgaW5jbHVkaW5nIGFueSBleHRyYQotCSAqIGluZm9ybWF0aW9uIGZyb20gdGhlIG5lc3RlZCBDb3JlRXhjZXB0aW9uIGlmIHByZXNlbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG9wZW5FcnJvcihTaGVsbCBwYXJlbnQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UsIFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkvLyBDaGVjayBmb3IgYSBuZXN0ZWQgQ29yZUV4Y2VwdGlvbgotCQlDb3JlRXhjZXB0aW9uIG5lc3RlZEV4Y2VwdGlvbiA9IG51bGw7Ci0JCUlTdGF0dXMgc3RhdHVzID0gZXhjZXB0aW9uLmdldFN0YXR1cygpOwotCQlpZiAoc3RhdHVzICE9IG51bGwgJiYgc3RhdHVzLmdldEV4Y2VwdGlvbigpIGluc3RhbmNlb2YgQ29yZUV4Y2VwdGlvbikKLQkJCW5lc3RlZEV4Y2VwdGlvbiA9IChDb3JlRXhjZXB0aW9uKSBzdGF0dXMuZ2V0RXhjZXB0aW9uKCk7Ci0KLQkJaWYgKG5lc3RlZEV4Y2VwdGlvbiAhPSBudWxsKSB7Ci0JCQkvLyBPcGVuIGFuIGVycm9yIGRpYWxvZyBhbmQgaW5jbHVkZSB0aGUgZXh0cmEKLQkJCS8vIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBuZXN0ZWQgQ29yZUV4Y2VwdGlvbgotCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHBhcmVudCwgdGl0bGUsIG1lc3NhZ2UsIG5lc3RlZEV4Y2VwdGlvbi5nZXRTdGF0dXMoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBPcGVuIGEgcmVndWxhciBlcnJvciBkaWFsb2cgc2luY2UgdGhlcmUgaXMgbm8KLQkJCS8vIGV4dHJhIGluZm9ybWF0aW9uIHRvIGRpc3BsYXkKLQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHBhcmVudCwgdGl0bGUsIG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBMaXN0IGFjdGlvbnMgPSBudWxsOwotCi0JVGFibGVWaWV3ZXIgZklucHV0TGlzdCA9IG51bGw7Ci0KLQlMaXN0IGZJbnB1dHMgPSBuZXcgQXJyYXlMaXN0KDApOwotCi0JT2JqZWN0IGZTZWxlY3RlZEVsZW1lbnQgPSBudWxsOwotCi0KLQlwdWJsaWMgRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3KCkgewotCQlzdXBlcigpOwotCQlhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJZklucHV0TGlzdCA9IG5ldyBUYWJsZVZpZXdlcihwYXJlbnQsIFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5NVUxUSSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7Ci0JCWZJbnB1dExpc3Quc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsKLQkJZklucHV0TGlzdC5zZXRMYWJlbFByb3ZpZGVyKG5ldyBFZGl0b3JJbnB1dExhYmVsUHJvdmlkZXIoKSk7Ci0JCWZJbnB1dExpc3QuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgRG91YmxlQ2xpY2tMaXN0ZW5lcigpKTsKLQkJZklucHV0TGlzdC5nZXRUYWJsZSgpLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JCWZJbnB1dExpc3QuZ2V0VGFibGUoKS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0JCVN0cmluZ1tdIGNvbHVtbnMgPSBuZXcgU3RyaW5nW117IlBhdGgiLCAiVHlwZSJ9OwotCQlmSW5wdXRMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEVkaXRvcklucHV0TGFiZWxQcm92aWRlcigpKTsKLQotCi0JCVRhYmxlTGF5b3V0IHRsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLQkJQ2VsbEVkaXRvcltdIGNlbGxFZGl0b3JzID0gbmV3IENlbGxFZGl0b3JbNV07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykgewotCQkJdGxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDEpKTsKLQkJCVRhYmxlQ29sdW1uIHRjID0gbmV3IFRhYmxlQ29sdW1uKGZJbnB1dExpc3QuZ2V0VGFibGUoKSwgU1dULk5PTkUpOwotCQkJdGMuc2V0VGV4dChjb2x1bW5zW2ldKTsKLQkJCXRjLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJCXRjLnNldFdpZHRoKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEJvdW5kcygpLndpZHRoIC8gMTQpOwotCQl9Ci0JCWZJbnB1dExpc3Quc2V0Q2VsbEVkaXRvcnMoY2VsbEVkaXRvcnMpOwotCQlmSW5wdXRMaXN0LnNldENvbHVtblByb3BlcnRpZXMoY29sdW1ucyk7Ci0KLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlKTsKLQkJZklucHV0TGlzdC5nZXRUYWJsZSgpLnNldExheW91dERhdGEoZ2QpOwotCi0JCU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCIjcG9wdXAiKTsgLy8kTk9OLU5MUy0xJAotCQltZW51TWFuYWdlci5zZXRSZW1vdmVBbGxXaGVuU2hvd24oZmFsc2UpOwotCi0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRPcGVuQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dE1vdmVBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0RGVsZXRlQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBSZW1vdmVJbnB1dEFjdGlvbigpKTsKLQkJTWVudSBtZW51ID0gbWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUoZklucHV0TGlzdC5nZXRDb250cm9sKCkpOwotCQlmSW5wdXRMaXN0LmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOwotCi0KLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0RGVmYXVsdChnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpLCAiIik7Ci0JCVN0cmluZyBwYXRoc1tdID0gU3RyaW5nVXRpbHMudW5wYWNrKFNTRVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpKSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChwYXRoc1tpXS5zdGFydHNXaXRoKCJTISIpKSB7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dChuZXcgRmlsZShwYXRoc1tpXS5zdWJzdHJpbmcoMikpKSk7Ci0JCQkJbWVudU1hbmFnZXIuYWRkKG5ldyBPcGVuV2l0aE1lbnUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgbnVsbCkpOwotCQkJfQotCQkJZWxzZSBpZiAocGF0aHNbaV0uc3RhcnRzV2l0aCgiRiEiKSkgewotCQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocGF0aHNbaV0uc3Vic3RyaW5nKDIpKSk7Ci0JCQkJZklucHV0cy5hZGQobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7Ci0JCQkJbWVudU1hbmFnZXIuYWRkKG5ldyBPcGVuV2l0aE1lbnUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgZmlsZSkpOwotCQkJfQotCQl9Ci0KLQkJZklucHV0TGlzdC5zZXRJbnB1dChmSW5wdXRzKTsKLQkJZklucHV0TGlzdC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKTsKLQkJCQlmU2VsZWN0ZWRFbGVtZW50ID0gc2VsLmdldEZpcnN0RWxlbWVudCgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJTGlzdCBwYXRocyA9IG5ldyBBcnJheUxpc3QoMCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZklucHV0cy5zaXplKCk7IGkrKykgewotCQkJdHJ5IHsKLQkJCQlPYmplY3QgaW5wdXQgPSBmSW5wdXRzLmdldChpKTsKLQkJCQlTdHJpbmcgcGF0aCA9IG51bGw7Ci0JCQkJaWYgKGlucHV0IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCXBhdGggPSAiUyEiICsgKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkuZ2V0Q2Fub25pY2FsUGF0aCgpOwotCQkJCX0KLQkJCQllbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJcGF0aCA9ICJGISIgKyAoKElGaWxlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRGaWxlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQkJCXBhdGhzLmFkZChwYXRoKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoZ2V0SW5wdXRzUHJlZmVyZW5jZU5hbWUoKSwgU3RyaW5nVXRpbHMucGFjaygoU3RyaW5nW10pIHBhdGhzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpKTsKLQkJU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCVN0cmluZyBnZXRFZGl0b3JJZChJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVdvcmtiZW5jaCB3b3JrYmVuY2ggPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpOwotCQlJRWRpdG9yUmVnaXN0cnkgZWRpdG9yUmVnaXN0cnkgPSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlW10gdHlwZXMgPSBudWxsOwotCQlTdHJpbmcgZWRpdG9ySUQgPSBudWxsOwotCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBJU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWlucHV0U3RyZWFtID0gKChJU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0U3RvcmFnZSgpLmdldENvbnRlbnRzKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJdHlwZXMgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVzRm9yKGlucHV0U3RyZWFtLCBpbnB1dC5nZXROYW1lKCkpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCi0JCUlFZGl0b3JEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBlZGl0b3JSZWdpc3RyeS5nZXREZWZhdWx0RWRpdG9yKGlucHV0LmdldE5hbWUoKSwgdHlwZXNbMF0pOwotCQlpZiAoZGVzY3JpcHRvciAhPSBudWxsKSB7Ci0JCQllZGl0b3JJRCA9IGRlc2NyaXB0b3IuZ2V0SWQoKTsKLQkJfQotCQlpZiAoZWRpdG9ySUQgPT0gbnVsbCkgewotCQkJZWRpdG9ySUQgPSBFZGl0b3JzVUkuREVGQVVMVF9URVhUX0VESVRPUl9JRDsKLQkJfQotCQlyZXR1cm4gZWRpdG9ySUQ7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCVN0cmluZyBnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpIHsKLQkJcmV0dXJuICJFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXc6aW5wdXRzIjsKLQl9Ci0KLQlJRWRpdG9ySW5wdXRbXSBnZXRTZWxlY3RlZElucHV0cygpIHsKLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmSW5wdXRMaXN0LmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJaWYgKHNlbC5pc0VtcHR5KCkpIHsKLQkJCQlyZXR1cm4gbmV3IElFZGl0b3JJbnB1dFswXTsKLQkJCX0KLQkJCU9iamVjdFtdIGFyciA9IHNlbC50b0FycmF5KCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBuZXcgSUVkaXRvcklucHV0W2Fyci5sZW5ndGhdOwotCQkJU3lzdGVtLmFycmF5Y29weShhcnIsIDAsIGlucHV0cywgMCwgaW5wdXRzLmxlbmd0aCk7Ci0JCQlyZXR1cm4gaW5wdXRzOwotCQl9Ci0JCXJldHVybiBuZXcgSUVkaXRvcklucHV0WzBdOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRUb29sQmFyTWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgQWRkU3RvcmFnZUlucHV0QWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IEFkZEZpbGVJbnB1dEFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZXVzZUVkaXRvckFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZW1vdmVJbnB1dEFjdGlvbigpKSk7Ci0KLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0T3BlbkFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBSZXVzZUVkaXRvckFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBJbnB1dE1vdmVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0RGVsZXRlQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uKCkpKTsKLQl9Ci0KLQlJQWN0aW9uIHJlbWVtYmVyQWN0aW9uKElBY3Rpb24gYWN0aW9uKSB7Ci0JCWFjdGlvbnMuYWRkKGFjdGlvbik7Ci0JCXJldHVybiBhY3Rpb247Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFbmFibGVtZW50KCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCU9iamVjdCBhY3Rpb24gPSBhY3Rpb25zLmdldChpKTsKLQkJCWlmIChhY3Rpb24gaW5zdGFuY2VvZiBJVXBkYXRlKSB7Ci0JCQkJKChJVXBkYXRlKSBhY3Rpb24pLnVwZGF0ZSgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzY2MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmCi0gKiBkZXNpcmVkLCB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcwotICogcGx1Z2luLiBPdGhlciBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiAKLQkgKiBAcGFyYW0gbGV2ZWwKLQkgKiAgICAgICAgICAgIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsCi0JICogICAgICAgICAgICBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uCi0JICogICAgICAgICAgICBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiAgICAgICAgICAgIGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoCi0JICogICAgICAgICAgICAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogCi0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9SZWFkT25seVRvZ2dsZURlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzk0ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9SZWFkT25seVRvZ2dsZURlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZSBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElFZGl0b3JBY3Rpb25EZWxlZ2F0ZSB7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb24gPSBudWxsOwotCUlFZGl0b3JQYXJ0IGZFZGl0b3IgPSBudWxsOwotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoKSB7Ci0JfQotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoU3RyaW5nIHRleHQpIHsKLQkJc3VwZXIodGV4dCk7Ci0JfQotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlzdXBlcih0ZXh0LCBpbWFnZSk7Ci0JfQotCi0JcHVibGljIFJlYWRPbmx5VG9nZ2xlRGVsZWdhdGUoU3RyaW5nIHRleHQsIGludCBzdHlsZSkgewotCQlzdXBlcih0ZXh0LCBzdHlsZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElBY3Rpb24gYWN0aW9uLCBJRWRpdG9yUGFydCB0YXJnZXRFZGl0b3IpIHsKLQkJZkVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJaWYgKGRvY3VtZW50IGluc3RhbmNlb2YgSVN0cnVjdHVyZWREb2N1bWVudCkgewotCQkJSVRleHRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElUZXh0U2VsZWN0aW9uKSBmU2VsZWN0aW9uOwotCQkJKChJU3RydWN0dXJlZERvY3VtZW50KSBkb2N1bWVudCkubWFrZVJlYWRPbmx5KHNlbGVjdGlvbi5nZXRPZmZzZXQoKSwgc2VsZWN0aW9uLmdldExlbmd0aCgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JCXNldEVuYWJsZWQoIXNlbGVjdGlvbi5pc0VtcHR5KCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzRkOTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgU1NFVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFNTRVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzY5NWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5KRmFjZVRleHRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC50ZXN0cy5FY2xpcHNlVGV4dFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFNTRVVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgU1NFVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgU1NFVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0UgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MpKTsKLQkJYWRkVGVzdChKRmFjZVRleHRUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoRWNsaXBzZVRleHRUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWUzNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci0KLS8qKgotICogQGF1dGhvciBuc2QKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlIHsKLQlJRWRpdG9yUGFydCBlZGl0b3IgPSBudWxsOwotCUlBY3Rpb24gZmFjdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICovCi0JcHVibGljIFRlc3RBY3Rpb25EZWxlZ2F0ZShTdHJpbmcgdGV4dCkgewotCQlzdXBlcih0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBpbWFnZQotCSAqLwotCXB1YmxpYyBUZXN0QWN0aW9uRGVsZWdhdGUoU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlzdXBlcih0ZXh0LCBpbWFnZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gc3R5bGUKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKFN0cmluZyB0ZXh0LCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIodGV4dCwgc3R5bGUpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlI3NldEFjdGl2ZUVkaXRvcihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJQWN0aW9uIHRhcmdldEFjdGlvbiwgSUVkaXRvclBhcnQgdGFyZ2V0RWRpdG9yKSB7Ci0JCWVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQkJZmFjdGlvbiA9IHRhcmdldEFjdGlvbjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gcnVuQWN0aW9uKSB7Ci0JCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKGVkaXRvci5nZXRFZGl0b3JTaXRlKCkuZ2V0U2hlbGwoKSwgIlRlc3QiLCAiQ29tcGxldGVkIik7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkvLyBkbyBub3RoaW5nCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YzNlZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0RW1haWxOb3RpY2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIHNlbmROb3RpZmljYXRpb25zID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdEVtYWlsTm90aWNlKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYWlsKCkgewotCQlhc3NlcnRGYWxzZSgiU2ltcGxlIHRlc3QgdG8gYmUgc3VyZSBlbWFpbCBnZXRzIHNlbnQgb24gZmFpbHVyZSIsIHNlbmROb3RpZmljYXRpb25zKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdExpbmVTdHlsZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODNmMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuSGlnaGxpZ2h0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnV0aWwuRWRpdG9yVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RMaW5lU3R5bGVQcm92aWRlciBpbXBsZW1lbnRzIExpbmVTdHlsZVByb3ZpZGVyIHsKLQotCUNvbG9yIGZvcmVncm91bmQgPSBudWxsOwotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RMaW5lU3R5bGVQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXIjaW5pdChvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZERvY3VtZW50LAotCSAqICAgICAgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5IaWdobGlnaHRlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKSB7Ci0JCS8vIG5vdGhpbmcgdG8gaW5pdAotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5MaW5lU3R5bGVQcm92aWRlciNwcmVwYXJlUmVnaW9ucyhvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbiwKLQkgKiAgICAgIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcmVwYXJlUmVnaW9ucyhJVHlwZWRSZWdpb24gY3VycmVudFJlZ2lvbiwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoLCBDb2xsZWN0aW9uIHN0eWxlUmFuZ2VzKSB7Ci0JCS8vIG1ha2UgZXZlcnl0aGluZyBib2xkIGdyZXkKLQkJaWYgKGZvcmVncm91bmQgPT0gbnVsbCkKLQkJCWZvcmVncm91bmQgPSBFZGl0b3JVdGlsaXR5LmdldENvbG9yKG5ldyBSR0IoMTI3LCAxMjcsIDEyNykpOwotCQlzdHlsZVJhbmdlcy5hZGQobmV3IFN0eWxlUmFuZ2Uoc3RhcnQsIGxlbmd0aCwgZm9yZWdyb3VuZCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyI3JlbGVhc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCS8vIG5vdGhpbmcgdG8gcmVsZWFzZQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4N2RmNzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkxvY2F0aW9uS2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNob3dJblRhcmdldExpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5BYnN0cmFjdFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUuRG9jdW1lbnRSZWdpb25Qcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5yZWNvbmNpbGUuSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gInRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfV0FJVCA9IDEwMDAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FX0RFTFRBID0gNTA7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJSUVkaXRvcklucHV0IGlucHV0ID0gbmV3IEZpbGVFZGl0b3JJbnB1dChmRmlsZSk7Ci0JCQkvKgotCQkJICogVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRlc3RpbmcgaW5pdCwgY3JlYXRlUGFydENvbnRyb2wsCi0JCQkgKiBiZWdpbkJhY2tncm91bmRPcGVyYXRpb24sIGVuZEJhY2tncm91bmRPcGVyYXRpb24gbWV0aG9kcwotCQkJICovCi0JCQlJRWRpdG9yUGFydCBwYXJ0ID0gcGFnZS5vcGVuRWRpdG9yKGlucHV0LCAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0IiwgdHJ1ZSk7Ci0JCQlpZiAocGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKQotCQkJCWZFZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQ7Ci0JCQllbHNlCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmIChmRWRpdG9yICE9IG51bGwpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHNob3VsZCB0YWtlIGNhcmUgb2YgdGVzdGluZyBjbG9zZSBhbmQgZGlzcG9zZSBtZXRob2RzCi0JCQkgKi8KLQkJCWZFZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0pzcEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rSnNwRmlsZSAhPSBudWxsICYmICFibGFua0pzcEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtKc3BGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0pzcEZpbGU7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvU2F2aW5nKCkgewotCQlmRWRpdG9yLmRvUmV2ZXJ0VG9TYXZlZCgpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcmV2ZXJ0IHRvIHNhdmVkIiwgdHJ1ZSk7Ci0JCWZFZGl0b3IuZG9TYXZlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2F2ZSIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFZGl0b3JDb250ZXh0TWVudUFib3V0VG9TaG93KCkgewotCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcigpOwotCQlmRWRpdG9yLmVkaXRvckNvbnRleHRNZW51QWJvdXRUb1Nob3cobWVudSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBwcmVwYXJlIGZvciBjb250ZXh0IG1lbnUgYWJvdXQgdG8gc2hvdyIsIHRydWUpOwotCQltZW51LmRpc3Bvc2UoKTsKLQkJbWVudSA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFkYXB0ZXIoKSB7Ci0JCU9iamVjdCBhZGFwdGVyID0gZkVkaXRvci5nZXRBZGFwdGVyKElTaG93SW5UYXJnZXRMaXN0LmNsYXNzKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IGFkYXB0ZXIgZm9yIHNob3cgaW4gdGFyZ2V0IGZhaWxlZCIsIGFkYXB0ZXIgaW5zdGFuY2VvZiBJU2hvd0luVGFyZ2V0TGlzdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFNldEVkaXRvclBhcnQoKSB7Ci0JCWZFZGl0b3Iuc2V0RWRpdG9yUGFydChudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNldCBlZGl0b3IgcGFydCIsIHRydWUpOwotCQlJRWRpdG9yUGFydCBwYXJ0ID0gZkVkaXRvci5nZXRFZGl0b3JQYXJ0KCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZ2V0IGV4cGVjdGVkIGVkaXRvciBwYXJ0IiwgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZURvY3VtZW50UHJvdmlkZXIoKSB7Ci0JCWZFZGl0b3IuaW5pdGlhbGl6ZURvY3VtZW50UHJvdmlkZXIobnVsbCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBpbml0aWFsaXplIGRvY3VtZW50IHByb3ZpZGVyIiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9yaWVudGF0aW9uKCkgewotCQlpbnQgb3IgPSBmRWRpdG9yLmdldE9yaWVudGF0aW9uKCk7Ci0JCWFzc2VydEVxdWFscyhTV1QuTEVGVF9UT19SSUdIVCwgb3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTZWxlY3Rpb25Qcm92aWRlcigpIHsKLQkJSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gZkVkaXRvci5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOwotCQlhc3NlcnROb3ROdWxsKCJFZGl0b3IncyBzZWxlY3Rpb24gcHJvdmlkZXIgd2FzIG51bGwiLCBwcm92aWRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRWaWV3ZXIoKSB7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGZFZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlhc3NlcnROb3ROdWxsKCJFZGl0b3IncyB0ZXh0IHZpZXdlciB3YXMgbnVsbCIsIHZpZXdlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbWVtYmVyUmVzdG9yZVNlbGVjdGlvbigpIHsKLQkJZkVkaXRvci5yZW1lbWJlclNlbGVjdGlvbigpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcmVtZW1iZXIgZWRpdG9yIHNlbGVjdGlvbiIsIHRydWUpOwotCQlmRWRpdG9yLnJlc3RvcmVTZWxlY3Rpb24oKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHJlc3RvcmUgZWRpdG9yIHNlbGVjdGlvbiIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYWZlbHlTYW5pdHlDaGVjaygpIHsKLQkJZkVkaXRvci5zYWZlbHlTYW5pdHlDaGVja1N0YXRlKGZFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzYWZlbHkgc2FuaXR5IGNoZWNrIGVkaXRvciBzdGF0ZSIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaG93QnVzeSgpIHsKLQkJZkVkaXRvci5zaG93QnVzeShmYWxzZSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzaG93IGVkaXRvciBpcyBidXN5IiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVwZGF0ZSgpIHsKLQkJZkVkaXRvci51cGRhdGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHVwZGF0ZSBlZGl0b3IiLCB0cnVlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNpbmdsZU5vblVJVGhyZWFkVXBkYXRlc1RvRWRpdG9yRG9jdW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAidGVzdEJhY2tncm91bmRDaGFuZ2VzLnhtbCIpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIHRleHRGaWxlQnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQl0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuY29ubmVjdChmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJSVRleHRGaWxlQnVmZmVyIHRleHRGaWxlQnVmZmVyID0gdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZpbGUuZ2V0RnVsbFBhdGgoKSwgTG9jYXRpb25LaW5kLklGSUxFKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50ID0gdGV4dEZpbGVCdWZmZXIuZ2V0RG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiPD94bWwgZW5jb2Rpbmc9XCJVVEYtOFwiIHZlcnNpb249XCIxLjBcIj8+XG4iKTsKLQkJdGV4dEZpbGVCdWZmZXIuY29tbWl0KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIHRydWUpOwotCi0JCVN0cmluZyB0ZXN0VGV4dCA9IGRvY3VtZW50LmdldCgpICsgIjxjLz48Yi8+PGEvPiI7Ci0JCWZpbmFsIGludCBlbmQgPSBkb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJSVdvcmtiZW5jaFBhZ2UgYWN0aXZlUGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCQlJRWRpdG9yUGFydCBvcGVuZWRFZGl0b3IgPSBJREUub3BlbkVkaXRvcihhY3RpdmVQYWdlLCBmaWxlKTsKLQotCQlmaW5hbCBib29sZWFuIHN0YXRlW10gPSBuZXcgYm9vbGVhbltde2ZhbHNlfTsKLQkJSm9iIGNoYW5nZXIgPSBuZXcgSm9iKCJ0ZXh0IGNoYW5nZXIiKSB7Ci0JCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJZG9jdW1lbnQucmVwbGFjZShlbmQsIDAsICI8YS8+Iik7Ci0JCQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kLCAwLCAiPGIvPiIpOwotCQkJCQlkb2N1bWVudC5yZXBsYWNlKGVuZCwgMCwgIjxjLz4iKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFNTRVVJUGx1Z2luLklELCBlLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQotCQkJCWZpbmFsbHkgewotCQkJCQlzdGF0ZVswXSA9IHRydWU7Ci0JCQkJfQotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQl9OwotCQljaGFuZ2VyLnNldFVzZXIodHJ1ZSk7Ci0JCWNoYW5nZXIuc2V0U3lzdGVtKGZhbHNlKTsKLQkJY2hhbmdlci5zY2hlZHVsZSgpOwotCi0JCXdoaWxlICghc3RhdGVbMF0pIHsKLQkJCW9wZW5lZEVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkucmVhZEFuZERpc3BhdGNoKCk7Ci0JCX0KLQotCQlTdHJpbmcgZmluYWxUZXh0ID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhY3RpdmVQYWdlLmNsb3NlRWRpdG9yKG9wZW5lZEVkaXRvciwgZmFsc2UpOwotCQlhc3NlcnRFcXVhbHMoIk5vbi1VSSBjaGFuZ2VzIGRpZCBub3QgYXBwbHkiLCB0ZXN0VGV4dCwgZmluYWxUZXh0KTsKLQl9Ci0KLQkKLQkvKioKLQkgKiBOb3RlOiBUaGlzIHRlc3QgdGFrZXMgYSB3aGlsZSB0byBydW4sIGJ1dCBpdCdzIHRlc3Rpbmcgc2NhbGFiaWxpdHkgYWZ0ZXIgYWxsLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbnlOb25VSVRocmVhZHNVcGRhdGluZ0VkaXRvckRvY3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIGludCBudW1iZXJPZkpvYnMgPSA1MDsKLQkJLyoqCi0JCSAqIDE1IG1pbnV0ZSB0aW1lb3V0IGJlZm9yZSB3ZSBzdG9wIHdhaXRpbmcgZm9yIHRoZSBjaGFuZ2Ugam9icyB0bwotCQkgKiBjb21wbGV0ZQotCQkgKi8KLQkJbG9uZyB0aW1lb3V0ID0gMTUqNjAqMTAwMDsKLQotCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlJRmlsZSBmaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArICJ0ZXN0TWFueUJhY2tncm91bmRDaGFuZ2VzLnhtbCIpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIHRleHRGaWxlQnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQl0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuY29ubmVjdChmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJSVRleHRGaWxlQnVmZmVyIHRleHRGaWxlQnVmZmVyID0gdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZpbGUuZ2V0RnVsbFBhdGgoKSwgTG9jYXRpb25LaW5kLklGSUxFKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50ID0gdGV4dEZpbGVCdWZmZXIuZ2V0RG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiPD94bWwgZW5jb2Rpbmc9XCJVVEYtOFwiIHZlcnNpb249XCIxLjBcIj8+XG4iKTsKLQkJdGV4dEZpbGVCdWZmZXIuY29tbWl0KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIHRydWUpOwotCi0JCWZpbmFsIGludCBpbnNlcnRpb25Qb2ludCA9IGRvY3VtZW50LmdldExlbmd0aCgpOwotCQkvLyBudW1iZXJPZkpvYnMgSm9icywgaW5zZXJ0aW5nIDI2IHRhZ3MsIGVhY2ggNCBjaGFyYWN0ZXJzIGxvbmcKLQkJaW50IHRlc3RMZW5ndGggPSBpbnNlcnRpb25Qb2ludCArIG51bWJlck9mSm9icyAqIDQgKiAyNjsKLQkJSVdvcmtiZW5jaFBhZ2UgYWN0aXZlUGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCQlhY3RpdmVQYWdlLnNob3dWaWV3KElQYWdlTGF5b3V0LklEX1BST0dSRVNTX1ZJRVcpOwotCQlJRWRpdG9yUGFydCBvcGVuZWRFZGl0b3IgPSBJREUub3BlbkVkaXRvcihhY3RpdmVQYWdlLCBmaWxlKTsKLQotCQlmaW5hbCBpbnQgZmluaXNoZWRbXSA9IG5ldyBpbnRbXXtudW1iZXJPZkpvYnN9OwotCQlKb2IgY2hhbmdlcnNbXSA9IG5ldyBKb2JbbnVtYmVyT2ZKb2JzXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFuZ2Vycy5sZW5ndGg7IGkrKykgewotCQkJY2hhbmdlcnNbaV0gPSBuZXcgSm9iKCJUZXh0IENoYW5nZXIgIiArIEludGVnZXIudG9TdHJpbmcoaSkpIHsKLQkJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQljaGFyIG5hbWVzW10gPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLnRvQ2hhckFycmF5KCk7Ci0JCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IG5hbWVzLmxlbmd0aDsgaisrKSB7Ci0JCQkJCQkJZG9jdW1lbnQucmVwbGFjZShpbnNlcnRpb25Qb2ludCArIDQgKiBqLCAwLCAiPCIgKyBuYW1lc1tqXSArICIvPiIpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgU1NFVUlQbHVnaW4uSUQsIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCQkJfQotCQkJCQlmaW5hbGx5IHsKLQkJCQkJCWZpbmlzaGVkWzBdLS07Ci0JCQkJCX0KLQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQkJfQotCQkJfTsKLQkJCWNoYW5nZXJzW2ldLnNldFVzZXIodHJ1ZSk7Ci0JCQljaGFuZ2Vyc1tpXS5zZXRTeXN0ZW0oZmFsc2UpOwotCQl9Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhbmdlcnMubGVuZ3RoOyBpKyspIHsKLQkJCWNoYW5nZXJzW2ldLnNjaGVkdWxlKCk7Ci0JCX0KLQotCQlsb25nIHJ1bnRpbWUgPSAwOwotCQl3aGlsZSAoZmluaXNoZWRbMF0gPiAwICYmIChydW50aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpIC0gc3RhcnRUaW1lIDwgdGltZW91dCkgewotCQkJb3BlbmVkRWRpdG9yLmdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5yZWFkQW5kRGlzcGF0Y2goKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJUZXN0IHRpbWVkIG91dCIsIHJ1bnRpbWUgLSBzdGFydFRpbWUgPCB0aW1lb3V0KTsKLQotCQlpbnQgZmluYWxMZW5ndGggPSBkb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJdGV4dEZpbGVCdWZmZXIuY29tbWl0KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIHRydWUpOwotCQl0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCWFjdGl2ZVBhZ2UuY2xvc2VFZGl0b3Iob3BlbmVkRWRpdG9yLCBmYWxzZSk7Ci0JCWFzc2VydEVxdWFscygiU29tZSBub24tVUkgY2hhbmdlcyBkaWQgbm90IGFwcGx5IiwgdGVzdExlbmd0aCwgZmluYWxMZW5ndGgpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgcmVjZWl2aW5nIHRoZSBpbml0aWFsIHJlY29uY2lsZSBub3RpZmljYXRpb24gd2hlbiB0aGUgZWRpdG9yIG9wZW5zCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEluaXRpYWxSZWNvbmNpbGluZygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArICJyZWNvbmNpbGluZ3Rlc3QueG1sIik7Ci0JCUlXb3JrYmVuY2hQYWdlIGFjdGl2ZVBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJZmluYWwgaW50W10gc3RhdGUgPSBuZXcgaW50WzJdOwotCQlBcnJheXMuZmlsbChzdGF0ZSwgLTEpOwotCQlJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lcigpIHsKLQkJCWludCBtb2QgPSAwOwotCQkJcHVibGljIHZvaWQgcmVjb25jaWxlZChJRG9jdW1lbnQgZG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwgbW9kZWwsIGJvb2xlYW4gZm9yY2VkLCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgewotCQkJCXN0YXRlWzFdID0gbW9kKys7Ci0JCQl9Ci0JCQkKLQkJCXB1YmxpYyB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCQkJc3RhdGVbMF0gPSBtb2QrKzsKLQkJCX0KLQkJfTsKLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IoYWN0aXZlUGFnZSwgZmlsZSwgIm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCIpOwotCQl0cnkgewotCQkJYXNzZXJ0VHJ1ZSgiTm90IGEgU3RydWN0dXJlZFRleHRFZGl0b3IiLCBlZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcik7Ci0JCQlhZGRSZWNvbmNpbGluZ0xpc3RlbmVyKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgZWRpdG9yLCBsaXN0ZW5lcik7Ci0JCQl3YWl0Rm9yUmVjb25jaWxlKHN0YXRlKTsKLQkJCWFzc2VydFRydWUoIkluaXRpYWw6IFJlY29uY2lsaW5nIGRpZCBub3QgY29tcGxldGUgaW4gYSB0aW1lbHkgZmFzaGlvbiIsIHN0YXRlWzBdICE9IC0xICYmIHN0YXRlWzFdICE9IC0xKTsKLQkJCWFzc2VydFRydWUoIkluaXRpYWw6IGFib3V0VG9CZVJlY29uY2lsZWQgbm90IGludm9rZWQgZmlyc3QgKCIgKyBzdGF0ZVswXSArIikiLCBzdGF0ZVswXSA9PSAwKTsKLQkJCWFzc2VydFRydWUoIkluaXRpYWw6IHJlY29uY2lsZWQgbm90IGludm9rZWQgYWZ0ZXIgYWJvdXRUb0JlUmVjb25jaWxlZCAoIiArIHN0YXRlWzFdICsiKSIsIHN0YXRlWzFdID09IDEpOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKGVkaXRvciAhPSBudWxsICYmIGFjdGl2ZVBhZ2UgIT0gbnVsbCkgewotCQkJCWFjdGl2ZVBhZ2UuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgbW9kaWZpY2F0aW9ucyB0byB0aGUgZWRpdG9yJ3MgY29udGVudCB3aWxsIG5vdGlmeSByZWNvbmNpbGluZyBsaXN0ZW5lcnMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpY2F0aW9uUmVjb25jaWxpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAicmVjb25jaWxpbmdtb2RpZmljYXRpb250ZXN0LnhtbCIpOwotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCWZpbmFsIGludFtdIHN0YXRlID0gbmV3IGludFsyXTsKLQkJQXJyYXlzLmZpbGwoc3RhdGUsIC0xKTsKLQkJSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIoKSB7Ci0JCQlpbnQgbW9kID0gMDsKLQkJCXB1YmxpYyB2b2lkIHJlY29uY2lsZWQoSURvY3VtZW50IGRvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsIG1vZGVsLCBib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJCQlzdGF0ZVsxXSA9IG1vZCsrOwotCQkJfQotCQkJCi0JCQlwdWJsaWMgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkJCXN0YXRlWzBdID0gbW9kKys7Ci0JCQl9Ci0JCX07Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGUsICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLnRlc3QiKTsKLQkJdHJ5IHsKLQkJCWFzc2VydFRydWUoIk5vdCBhIFN0cnVjdHVyZWRUZXh0RWRpdG9yIiwgZWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpOwotCQkJYWRkUmVjb25jaWxpbmdMaXN0ZW5lcigoU3RydWN0dXJlZFRleHRFZGl0b3IpIGVkaXRvciwgbGlzdGVuZXIpOwotCQkJd2FpdEZvclJlY29uY2lsZShzdGF0ZSk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiBSZWNvbmNpbGluZyBkaWQgbm90IGNvbXBsZXRlIGluIGEgdGltZWx5IGZhc2hpb24iLCBzdGF0ZVswXSAhPSAtMSAmJiBzdGF0ZVsxXSAhPSAtMSk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiBhYm91dFRvQmVSZWNvbmNpbGVkIG5vdCBpbnZva2VkIGZpcnN0ICgiICsgc3RhdGVbMF0gKyIpIiwgc3RhdGVbMF0gPT0gMCk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiByZWNvbmNpbGVkIG5vdCBpbnZva2VkIGFmdGVyIGFib3V0VG9CZVJlY29uY2lsZWQgKCIgKyBzdGF0ZVsxXSArIikiLCBzdGF0ZVsxXSA9PSAxKTsKLQkJCUlEb2N1bWVudCBkb2N1bWVudCA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIGVkaXRvcikuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJCWFzc2VydFRydWUoIkVkaXRvciBkb2Vzbid0IGhhdmUgYSBkb2N1bWVudCIsIGRvY3VtZW50ICE9IG51bGwpOwotCQkJZG9jdW1lbnQuc2V0KCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgPz4iKTsKLQkJCUFycmF5cy5maWxsKHN0YXRlLCAtMSk7Ci0JCQl3YWl0Rm9yUmVjb25jaWxlKHN0YXRlKTsKLQkJCWFzc2VydFRydWUoIk1vZGlmaWVkOiBSZWNvbmNpbGluZyBkaWQgbm90IGNvbXBsZXRlIGluIGEgdGltZWx5IGZhc2hpb24iLCBzdGF0ZVswXSAhPSAtMSAmJiBzdGF0ZVsxXSAhPSAtMSk7Ci0JCQlhc3NlcnRUcnVlKCJNb2RpZmllZDogYWJvdXRUb0JlUmVjb25jaWxlZCBub3QgaW52b2tlZCBmaXJzdCAoIiArIHN0YXRlWzBdICsiKSIsIHN0YXRlWzBdID09IDIpOwotCQkJYXNzZXJ0VHJ1ZSgiTW9kaWZpZWQ6IHJlY29uY2lsZWQgbm90IGludm9rZWQgYWZ0ZXIgYWJvdXRUb0JlUmVjb25jaWxlZCAoIiArIHN0YXRlWzFdICsiKSIsIHN0YXRlWzFdID09IDMpOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKGVkaXRvciAhPSBudWxsICYmIGFjdGl2ZVBhZ2UgIT0gbnVsbCkgewotCQkJCWFjdGl2ZVBhZ2UuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgYW4gZWRpdG9yIG5vdGlmaWVzIHJlY29uY2lsaW5nIGxpc3RlbmVycyB3aGVuIHRoZSBlZGl0b3IgZ2V0cyBmb2N1cy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9jdXNlZFJlY29uY2lsaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgImZvY3VzdGVzdC54bWwiKTsKLQkJSUZpbGUgZmlsZUFsdCA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAiZm9jdXN0ZXN0QWx0LnhtbCIpOwotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCWZpbmFsIGludFtdIHN0YXRlID0gbmV3IGludFsyXTsKLQkJQXJyYXlzLmZpbGwoc3RhdGUsIC0xKTsKLQkJSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSVNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIoKSB7Ci0JCQlpbnQgbW9kID0gMDsKLQkJCXB1YmxpYyB2b2lkIHJlY29uY2lsZWQoSURvY3VtZW50IGRvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsIG1vZGVsLCBib29sZWFuIGZvcmNlZCwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJCQlzdGF0ZVsxXSA9IG1vZCsrOwotCQkJfQotCQkJCi0JCQlwdWJsaWMgdm9pZCBhYm91dFRvQmVSZWNvbmNpbGVkKCkgewotCQkJCXN0YXRlWzBdID0gbW9kKys7Ci0JCQl9Ci0JCX07Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGUsICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLnRlc3QiKTsKLQkJdHJ5IHsKLQkJCWFzc2VydFRydWUoIk5vdCBhIFN0cnVjdHVyZWRUZXh0RWRpdG9yIiwgZWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpOwotCQkJYWRkUmVjb25jaWxpbmdMaXN0ZW5lcigoU3RydWN0dXJlZFRleHRFZGl0b3IpIGVkaXRvciwgbGlzdGVuZXIpOwotCQkJd2FpdEZvclJlY29uY2lsZShzdGF0ZSk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiBSZWNvbmNpbGluZyBkaWQgbm90IGNvbXBsZXRlIGluIGEgdGltZWx5IGZhc2hpb24iLCBzdGF0ZVswXSAhPSAtMSAmJiBzdGF0ZVsxXSAhPSAtMSk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiBhYm91dFRvQmVSZWNvbmNpbGVkIG5vdCBpbnZva2VkIGZpcnN0ICgiICsgc3RhdGVbMF0gKyIpIiwgc3RhdGVbMF0gPT0gMCk7Ci0JCQlhc3NlcnRUcnVlKCJJbml0aWFsOiByZWNvbmNpbGVkIG5vdCBpbnZva2VkIGFmdGVyIGFib3V0VG9CZVJlY29uY2lsZWQgKCIgKyBzdGF0ZVsxXSArIikiLCBzdGF0ZVsxXSA9PSAxKTsKLQkJCUlERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGVBbHQsICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLnRlc3QiKTsKLQkJCUFycmF5cy5maWxsKHN0YXRlLCAtMSk7Ci0JCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3IoYWN0aXZlUGFnZSwgZmlsZSwgIm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCIpOwotCQkJYXNzZXJ0RXF1YWxzKCJEaWRuJ3QgZ2V0IHRoZSBvcmlnaW5hbCBlZGl0b3IgYmFjay4iLCBlZGl0b3IsIGVkaXRvclBhcnQpOwotCQkJd2FpdEZvclJlY29uY2lsZShzdGF0ZSk7Ci0JCQlhc3NlcnRUcnVlKCJNb2RpZmllZDogUmVjb25jaWxpbmcgZGlkIG5vdCBjb21wbGV0ZSBpbiBhIHRpbWVseSBmYXNoaW9uIiwgc3RhdGVbMF0gIT0gLTEgJiYgc3RhdGVbMV0gIT0gLTEpOwotCQkJYXNzZXJ0VHJ1ZSgiTW9kaWZpZWQ6IGFib3V0VG9CZVJlY29uY2lsZWQgbm90IGludm9rZWQgZmlyc3QgKCIgKyBzdGF0ZVswXSArIikiLCBzdGF0ZVswXSA9PSAyKTsKLQkJCWFzc2VydFRydWUoIk1vZGlmaWVkOiByZWNvbmNpbGVkIG5vdCBpbnZva2VkIGFmdGVyIGFib3V0VG9CZVJlY29uY2lsZWQgKCIgKyBzdGF0ZVsxXSArIikiLCBzdGF0ZVsxXSA9PSAzKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChlZGl0b3IgIT0gbnVsbCAmJiBhY3RpdmVQYWdlICE9IG51bGwpIHsKLQkJCQlhY3RpdmVQYWdlLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFJlY29uY2lsaW5nTGlzdGVuZXIoU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yLCBJU291cmNlUmVjb25jaWxpbmdMaXN0ZW5lciBsaXN0ZW5lcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU1ldGhvZCBtQ29uZmlnID0gQWJzdHJhY3RUZXh0RWRpdG9yLmNsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJnZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIiwgbnVsbCk7Ci0JCW1Db25maWcuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJT2JqZWN0IGNvbmZpZyA9IG1Db25maWcuaW52b2tlKGVkaXRvciwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZ2V0IGEgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIiwgY29uZmlnIGluc3RhbmNlb2YgU291cmNlVmlld2VyQ29uZmlndXJhdGlvbik7Ci0JCUlSZWNvbmNpbGVyIHJlY29uY2lsZXIgPSAoKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24pIGNvbmZpZykuZ2V0UmVjb25jaWxlcihmRWRpdG9yLmdldFRleHRWaWV3ZXIoKSk7Ci0JCWFzc2VydFRydWUoIlJlY29uY2lsZXIgaXMgbm90IGEgRGlydHlSZWdpb25Qcm9jZXNzb3IiLCByZWNvbmNpbGVyIGluc3RhbmNlb2YgRG9jdW1lbnRSZWdpb25Qcm9jZXNzb3IpOwotCQkoKERvY3VtZW50UmVnaW9uUHJvY2Vzc29yKSByZWNvbmNpbGVyKS5hZGRSZWNvbmNpbGluZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3YWl0Rm9yUmVjb25jaWxlKGludFtdIHN0YXRlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaW50IHRpbWUgPSAwOwotCQl3aGlsZSAoKHN0YXRlWzBdID09IC0xIHx8IHN0YXRlWzFdID09IC0xKSAmJiB0aW1lIDwgTUFYX1dBSVQpIHsKLQkJCVRocmVhZC5zbGVlcChUSU1FX0RFTFRBKTsKLQkJCXRpbWUgKz0gVElNRV9ERUxUQTsKLQkJfQotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk4MWE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5RWRpdG9yUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JTGlzdCBjb2xvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKTsKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJzc2UgZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQotCX0KLQotCS8qKgotCSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyBqdXN0IHRvIHRlc3QgaWYgd2UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBsb3RzCi0JICogb2YgUkJHIGNvbG9ycywgZXZlbiBpZiBkaXNwbGF5IHNldCB0byAiMjU2IiAob24gTGludXgpLiBBbmQsIEJUVywgaXQKLQkgKiBkb2VzIG5vdCBmYWlsIGV2ZW4gd2l0aCAyNTYgY29sb3JzIHNldCwgYXQgbGVhc3Qgb24gTGludXgsIGluIGRldi4gZW52LgotCSAqIFZhcnlpbmcgYWxsIHRocmVlIFJHQiBudW1iZXJzLCB0aG91Z2gsIGl0IGlzIGVhc3kgdG8gcnVuIG91dCBvZiBtZW1vcnkhCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbG9ySGFuZGxlcygpIHsKLQkJRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXRDdXJyZW50KCk7Ci0JCWlmIChkaXNwbGF5ID09IG51bGwpCi0JCQlkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCWFzc2VydE5vdE51bGwoImRpc3BsYXkgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIGRpc3BsYXkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IDI1NjsgaisrKSB7Ci0JCQkJLy8gMjU2IGN1YmVkIHJ1bnMgb3V0IG9mIG1lbW9yeQotCQkJCS8vIGZvciAoaW50IGsgPSAwOyBrIDwgMjU2OyBrKyspIHsKLQkJCQljb2xvckxpc3QuYWRkKG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKGksIGosIDUwKSkpOwotCQkJCS8vIH0KLQotCQkJfQotCi0JCX0KLQkJLy8gaWYgd2UgZ2V0IHRoaXMgZmFyIHdpdGhvdXQgZXJyb3IsIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzYzFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtQcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5wcmVzZW50YXRpb24uSVByZXNlbnRhdGlvblJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5Mb2dnZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJU3RydWN0dXJlZFBhcnRpdGlvbnMuREVGQVVMVF9QQVJUSVRJT04pOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZShjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA9PSAxKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZERvY3VtZW50UGFydGl0aW9uaW5nKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmcgcGFydGl0aW9uaW5nID0gZkNvbmZpZy5nZXRDb25maWd1cmVkRG9jdW1lbnRQYXJ0aXRpb25pbmcoZlZpZXdlcik7Ci0JCWFzc2VydEVxdWFscyhJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HLCBwYXJ0aXRpb25pbmcpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkVGV4dEhvdmVyU3RhdGVNYXNrcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJaW50W10gbWFza3MgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRUZXh0SG92ZXJTdGF0ZU1hc2tzKGZWaWV3ZXIsIElTdHJ1Y3R1cmVkUGFydGl0aW9ucy5ERUZBVUxUX1BBUlRJVElPTik7Ci0JCWFzc2VydEVxdWFscygyLCBtYXNrcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROdWxsKCJ0aGVyZSBpcyBhIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua1ByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua1ByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEh5cGVybGlua1ByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaHlwZXJsaW5rIHByZXNlbnRlciBzaG91bGRuJ3QgYmUgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9Db250cm9sQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaW5mbyBjb250cm9sIGNyZWF0b3Igd2FzIG51bGwiLCBpbmZvQ29udHJvbENyZWF0b3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIHdhcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJLy8gdGhlcmUgc2hvdWxkIGJlIG5vIGxpbmVzdHlsZXByb3ZpZGVycyBmb3IgZGVmYXVsdAotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlhc3NlcnROdWxsKCJsaW5lIHN0eWxlIHByb3ZpZGVycyBpcyBub3QgbnVsbCIsIHByb3ZpZGVycyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldE92ZXJ2aWV3UnVsZXJBbm5vdGF0aW9uSG92ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBbm5vdGF0aW9uSG92ZXIgYW5ub3RhdGlvbkhvdmVyID0gZkNvbmZpZy5nZXRPdmVydmlld1J1bGVyQW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJhbm5vdGF0aW9uIGhvdmVyIHdhcyBudWxsIiwgYW5ub3RhdGlvbkhvdmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJlc2VudGF0aW9uUmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVByZXNlbnRhdGlvblJlY29uY2lsZXIgcHJlc2VudGF0aW9uUmVjb25jaWxlciA9IGZDb25maWcuZ2V0UHJlc2VudGF0aW9uUmVjb25jaWxlcihmVmlld2VyKTsKLQkJLy8gb3VyIGRlZmF1bHQgcHJlc2VudGF0aW9uIHJlY29uY2lsZXIgaXMgbm8gbG9uZ2VyIG51bGwKLQkJYXNzZXJ0Tm90TnVsbCgicHJlc2VudGF0aW9uIHJlY29uY2lsZXIgd2FzIG51bGwiLCBwcmVzZW50YXRpb25SZWNvbmNpbGVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciB3YXMgbnVsbCIsIHIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRVbmRvTWFuYWdlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVVuZG9NYW5hZ2VyIHVuZG9NYW5hZ2VyID0gZkNvbmZpZy5nZXRVbmRvTWFuYWdlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidW5kbyBtYW5hZ2VyIHdhcyBudWxsIiwgdW5kb01hbmFnZXIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTY1ZWUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5TU0VVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9BY2Nlc3Nvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFlODY0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9BY2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7Ci0KLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIGFjY2Vzc2luZyBjbGFzc2VzIGFuZCBtZW1iZXJzIHdoaWNoIGNhbm5vdAotICogYmUgYWNjZXNzZWQgdXNpbmcgc3RhbmRhcmQgSmF2YSBhY2Nlc3MgY29udHJvbCBsaWtlIHByaXZhdGUKLSAqIG9yIHBhY2thZ2UgdmlzaWJsZSBlbGVtZW50cy4KLSAqCi0gKiBAc2luY2UgMy4xCi0gKi8KLXB1YmxpYyBjbGFzcyBBY2Nlc3NvciB7Ci0KLQkvKiogVGhlIGNsYXNzIHRvIGFjY2Vzcy4gKi8KLQlwcml2YXRlIENsYXNzIGZDbGFzczsKLQkvKiogVGhlIGluc3RhbmNlIHRvIGFjY2Vzcy4gKi8KLQlwcml2YXRlIE9iamVjdCBmSW5zdGFuY2U7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gPGNvZGU+aW5zdGFuY2U8L2NvZGU+IGFuZAotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPi4gT25seSBub24taW5oZXJpdGVkIG1lbWJlcnMgdGhhdCBwYXJ0aWN1bGFyCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+IGNhbiBiZSBhY2Nlc3NlZC4KLQkgKgotCSAqIEBwYXJhbSBpbnN0YW5jZSB0aGUgaW5zdGFuY2UKLQkgKiBAcGFyYW0gY2xhenogdGhlIGNsYXNzCi0JICovCi0JcHVibGljIEFjY2Vzc29yKE9iamVjdCBpbnN0YW5jZSwgQ2xhc3MgY2xhenopIHsKLQkJb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydC5pc05vdE51bGwoaW5zdGFuY2UpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXp6KTsKLQkJZkluc3RhbmNlPSBpbnN0YW5jZTsKLQkJZkNsYXNzPSBjbGF6ejsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gPGNvZGU+aW5zdGFuY2U8L2NvZGU+IGFuZAotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPi4gT25seSBub24taW5oZXJpdGVkIG1lbWJlcnMgdGhhdCBwYXJ0aWN1bGFyCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+IGNhbiBiZSBhY2Nlc3NlZC4KLQkgKgotCSAqIEBwYXJhbSBpbnN0YW5jZSB0aGUgaW5zdGFuY2UKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoT2JqZWN0IGluc3RhbmNlLCBTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQlBc3NlcnQuaXNOb3ROdWxsKGluc3RhbmNlKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGFzc05hbWUpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXNzTG9hZGVyKTsKLQkJZkluc3RhbmNlPSBpbnN0YW5jZTsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gZ2V0IHRoZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuCi0JICogYXJndW1lbnRzIHRoZXkgbXVzdCBhbGwgYmUgaW5zdGFuY2VvZiBPYmplY3QuIFVzZQotCSAqIHtAbGluayAjQWNjZXNzb3IoU3RyaW5nLCBDbGFzc0xvYWRlciwgQ2xhc3NbXSwgT2JqZWN0W10pfSBpZiB0aGlzCi0JICogaXMgbm90IHRoZSBjYXNlLjwvcD4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvckFyZ3MgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyB3aGljaCBtdXN0IGFsbCBiZSBpbnN0YW5jZSBvZiBPYmplY3QKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIsIE9iamVjdFtdIGNvbnN0cnVjdG9yQXJncykgewotCQl0aGlzKGNsYXNzTmFtZSwgY2xhc3NMb2FkZXIsIGdldFR5cGVzKGNvbnN0cnVjdG9yQXJncyksIGNvbnN0cnVjdG9yQXJncyk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICogQHBhcmFtIGNvbnN0cnVjdG9yVHlwZXMgdGhlIHR5cGVzIG9mIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMKLQkgKiBAcGFyYW0gY29uc3RydWN0b3JBcmdzIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIsIENsYXNzW10gY29uc3RydWN0b3JUeXBlcywgT2JqZWN0W10gY29uc3RydWN0b3JBcmdzKSB7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCUNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yPSBudWxsOwotCQl0cnkgewotCQkJY29uc3RydWN0b3I9IGZDbGFzcy5nZXREZWNsYXJlZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yVHlwZXMpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlMikgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZTIpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlBc3NlcnQuaXNOb3ROdWxsKGNvbnN0cnVjdG9yKTsKLQkJY29uc3RydWN0b3Iuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJdHJ5IHsKLQkJCWZJbnN0YW5jZT0gY29uc3RydWN0b3IubmV3SW5zdGFuY2UoY29uc3RydWN0b3JBcmdzKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiA8cD4KLQkgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gYWNjZXNzIHN0YXRpYyBzdHVmZi4KLQkgKiA8L3A+Ci0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJbnZva2VzIHRoZSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWUgYW5kIGFyZ3VtZW50cy4KLQkgKiA8cD4KLQkgKiBJbiBvcmRlciB0byBnZXQgdGhlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4KLQkgKiBhcmd1bWVudHMgYWxsIHRob3NlIGFyZ3VtZW50cyBtdXN0IGJlIGluc3RhbmNlIG9mIE9iamVjdC4gVXNlCi0JICoge0BsaW5rICNpbnZva2UoU3RyaW5nLCBDbGFzc1tdLCBPYmplY3RbXSl9IGlmIHRoaXMKLQkgKiBpcyBub3QgdGhlIGNhc2UuPC9wPgotCSAqCi0JICogQHBhcmFtIG1ldGhvZE5hbWUgdGhlIG1ldGhvZCBuYW1lCi0JICogQHBhcmFtIGFyZ3VtZW50cyB0aGUgbWV0aG9kIGFyZ3VtZW50cyB3aGljaCBtdXN0IGFsbCBiZSBpbnN0YW5jZSBvZiBPYmplY3QKLQkgKiBAcmV0dXJuIHRoZSBtZXRob2QgcmV0dXJuIHZhbHVlCi0JICovCi0JcHVibGljIE9iamVjdCBpbnZva2UoU3RyaW5nIG1ldGhvZE5hbWUsIE9iamVjdFtdIGFyZ3VtZW50cykgewotCQlyZXR1cm4gaW52b2tlKG1ldGhvZE5hbWUsIGdldFR5cGVzKGFyZ3VtZW50cyksIGFyZ3VtZW50cyk7Ci0JfQotCi0JLyoqCi0JICogSW52b2tlcyB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG1ldGhvZCBuYW1lIGFuZCBhcmd1bWVudHMuCi0JICoKLQkgKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbWV0aG9kIG5hbWUKLQkgKiBAcGFyYW0gdHlwZXMgdGhlIGFyZ3VtZW50IHR5cGVzCi0JICogQHBhcmFtIGFyZ3VtZW50cyB0aGUgbWV0aG9kIGFyZ3VtZW50cwotCSAqIEByZXR1cm4gdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGludm9rZShTdHJpbmcgbWV0aG9kTmFtZSwgQ2xhc3NbXSB0eXBlcywgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCU1ldGhvZCBtZXRob2Q9IG51bGw7Ci0JCXRyeSB7Ci0JCQltZXRob2Q9IGZDbGFzcy5nZXREZWNsYXJlZE1ldGhvZChtZXRob2ROYW1lLCB0eXBlcyk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQXNzZXJ0LmlzTm90TnVsbChtZXRob2QpOwotCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBtZXRob2QuaW52b2tlKGZJbnN0YW5jZSwgYXJndW1lbnRzKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBPYmplY3QgdmFsdWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmaWVsZC5zZXQoZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIGJvb2xlYW4gdmFsdWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmaWVsZC5zZXRCb29sZWFuKGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBpbnQgdmFsdWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmaWVsZC5zZXRJbnQoZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIE9iamVjdCBnZXQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXQoZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuKFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0Qm9vbGVhbihmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgaW50IGdldEludChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldEludChmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiAwOwotCX0KLQotCXByaXZhdGUgRmllbGQgZ2V0RmllbGQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpZWxkPSBmQ2xhc3MuZ2V0RGVjbGFyZWRGaWVsZChmaWVsZE5hbWUpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaEZpZWxkRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlyZXR1cm4gZmllbGQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBnZXRUeXBlcyhPYmplY3RbXSBvYmplY3RzKSB7Ci0JCWlmIChvYmplY3RzID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlpbnQgbGVuZ3RoPSBvYmplY3RzLmxlbmd0aDsKLQkJQ2xhc3NbXSBjbGFzc2VzPSBuZXcgQ2xhc3NbbGVuZ3RoXTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQlBc3NlcnQuaXNOb3ROdWxsKG9iamVjdHNbaV0pOwotCQkJY2xhc3Nlc1tpXT0gb2JqZWN0c1tpXS5nZXRDbGFzcygpOwotCQl9Ci0JCXJldHVybiBjbGFzc2VzOwotCX0KLQotCXByaXZhdGUgdm9pZCBmYWlsKCkgewotCQlBc3NlcnQuaXNUcnVlKGZhbHNlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRWNsaXBzZVRleHRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiNDgyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogVGVzdCBTdWl0ZSBmb3Igb3JnLmVjbGlwc2UudGV4dC4KLSAqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFY2xpcHNlVGV4dFRlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoIm9yZy5lY2xpcHNlLnRleHQgVGVzdCBTdWl0ZSB1c2luZyBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCS8vJEpVbml0LUJFR0lOJAotLy8JCXN1aXRlLmFkZFRlc3QoTGluZVRyYWNrZXJUZXN0NC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERvY3VtZW50RXh0ZW5zaW9uVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KExpbmVUcmFja2VyVGVzdDMuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChEb2N1bWVudFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChGaW5kUmVwbGFjZURvY3VtZW50QWRhcHRlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChFeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dEVkaXRUZXN0cy5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQWRhcHRpdmVHYXBUZXh0VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRTdG9yZVRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChDaGlsZERvY3VtZW50VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFByb2plY3Rpb25UZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChMaW5rVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQ29weU9uV3JpdGVUZXh0U3RvcmVUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dFV0aWxpdGllc1Rlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChBbm5vdGF0aW9uTW9kZWxTdHJlc3NUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQW5ub3RhdGlvbk1vZGVsRXh0ZW5zaW9uMlRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZW1wbGF0ZXNUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCS8vJEpVbml0LUVORCQKLQotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDBjYzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0V4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRGVmYXVsdFBvc2l0aW9uVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklQb3NpdGlvblVwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgY2xhc3MgRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEV4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgSVBvc2l0aW9uVXBkYXRlciBmVXBkYXRlcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUlk9ICJ0ZXN0Y2F0ZWdvcnkiOwotCXByaXZhdGUgUG9zaXRpb24gZlBvczsKLQlwcml2YXRlIElEb2N1bWVudCBmRG9jOwotCS8qCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZVcGRhdGVyPSBuZXcgRGVmYXVsdFBvc2l0aW9uVXBkYXRlcihDQVRFR09SWSk7Ci0vLwkJZkRvYyA9IG5ldyBEb2N1bWVudCgiY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIik7Ci0JCWZEb2M9IGNyZWF0ZURvY3VtZW50KCJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiKTsKLQkJZlBvcz0gbmV3IFBvc2l0aW9uKDUsIDUpOwotCQlmRG9jLmFkZFBvc2l0aW9uVXBkYXRlcihmVXBkYXRlcik7Ci0JCWZEb2MuYWRkUG9zaXRpb25DYXRlZ29yeShDQVRFR09SWSk7Ci0JCWZEb2MuYWRkUG9zaXRpb24oQ0FURUdPUlksIGZQb3MpOwotCX0KLQotCXByaXZhdGUgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KFN0cmluZyBjb250ZW50cykgewotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKCJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIik7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBoYW5kbGVyLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChjb250ZW50cyk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQkvKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jLnJlbW92ZVBvc2l0aW9uVXBkYXRlcihmVXBkYXRlcik7Ci0JCWZEb2MucmVtb3ZlUG9zaXRpb25DYXRlZ29yeShDQVRFR09SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUFmdGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIwLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkQWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMjAsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkQmVmb3JlKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDcsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFJpZ2h0QmVmb3JlKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDUsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDcsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUF0T2Zmc2V0KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDUsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVSaWdodEJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgzLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUmlnaHRBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgxMCwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlUmlnaHRBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgxMCwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFdpdGhpbigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg2LCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNywgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVXaXRoaW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNiwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygzLCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VMZWZ0Qm9yZGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDQsIDIsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDYsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg0LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VSaWdodEJvcmRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg5LCAyLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNCwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVPdmVyUmlnaHRCb3JkZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoOSwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg0LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZWQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNCwgNywgIiIpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmUG9zLmlzRGVsZXRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDQsIDcsICJ5eXl5eXl5Iik7Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGZQb3MuaXNEZWxldGVkKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL1Bvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL1Bvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg5ZGIxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9Qb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotCi0KLQotcHVibGljIGNsYXNzIFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvY3VtZW50OwotCi0JcHVibGljIFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQb3NpdGlvbnMoUG9zaXRpb25bXSBleHBlY3RlZCkgdGhyb3dzIEJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb24gewotCQlQb3NpdGlvbltdIGFjdHVhbD0gZkRvY3VtZW50LmdldFBvc2l0aW9ucyhJRG9jdW1lbnQuREVGQVVMVF9DQVRFR09SWSk7Ci0JCWFzc2VydFRydWUoImludmFsaWQgbnVtYmVyIG9mIHBvc2l0aW9ucyIsIGFjdHVhbC5sZW5ndGggPT0gZXhwZWN0ZWQubGVuZ3RoKTsKLQotCQlmb3IgKGludCBpPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhwcmludChhY3R1YWxbaV0pICsgIiAhPSAiICsgcHJpbnQoZXhwZWN0ZWRbaV0pLCBleHBlY3RlZFtpXSwgYWN0dWFsW2ldKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcHJpbnQoUG9zaXRpb24gcCkgewotCQlyZXR1cm4gIlsiICsgcC5nZXRPZmZzZXQoKSArICIsIiArIHAuZ2V0TGVuZ3RoKCkgKyAiXSI7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLS8vCQlmRG9jdW1lbnQ9IG5ldyBEb2N1bWVudCgieC14LXgteC14LXgteC14LXgteC14Iik7Ci0JCWZEb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoIngteC14LXgteC14LXgteC14LXgteCIpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDAsIDApKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbigwLCAxKSk7Ci0JCWZEb2N1bWVudC5hZGRQb3NpdGlvbihuZXcgUG9zaXRpb24oNSwgMCkpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDUsIDMpKTsKLQl9Ci0KLQlwcml2YXRlIElEb2N1bWVudCBjcmVhdGVEb2N1bWVudChTdHJpbmcgY29udGVudHMpIHsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gTW9kZWxIYW5kbGVyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZCgib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIpOwotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgaGFuZGxlci5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmNsYXNzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLQkJZkRvY3VtZW50PSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkRvY3VtZW50LnJlcGxhY2UoMCwgMCwgInl5Iik7Ci0KLQkJUG9zaXRpb25bXSBwb3NpdGlvbnM9IG5ldyBQb3NpdGlvbltdIHsKLQkJCQluZXcgUG9zaXRpb24oIDIsIDEpLAotCQkJCW5ldyBQb3NpdGlvbiggMiwgMCksCi0JCQkJbmV3IFBvc2l0aW9uKCA3LCAzKSwKLQkJCQluZXcgUG9zaXRpb24oIDcsIDApCi0JCX07Ci0KLQkJY2hlY2tQb3NpdGlvbnMocG9zaXRpb25zKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwNzdhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDE3NTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwuY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3ZDEwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jRnJpIE1hciAyNSAxNzozNDowMSBFU1QgMjAwNQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2Q9VVRGOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODZiMTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmFwYWNoZS54ZXJjZXMsCi0gb3JnLmVjbGlwc2UueHNkLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtQ2xhc3NQYXRoOiBjYXRhbG9ndGVzdHMuamFyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZGRjMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuY2F0YWxvZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5jYXRhbG9ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgY2F0YWxvZ3Rlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9jYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2ExYmE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9jYXRhbG9nMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJbnZvaWNlSWRfdGVzdCIgdXJpPSJmaWxlOi8vL1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLWhlbGlvcy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93ZWJVUkwiLz4KLSAgPHN5c3RlbSBjaGFjaGVkPSJ5ZXMiIHByb3BlcnR5PSJ2YWx1ZTEiIHN5c3RlbUlkPSJJbnZvaWNlLmR0ZCIgdXJpPSJmaWxlOi8vL1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLWhlbGlvcy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIi8+Ci0gIDx1cmkgY2hhY2hlZD0ibm8iIG5hbWU9Imh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiIHByb3BlcnR5PSJ2YWx1ZTIiIHVyaT0iZmlsZTovLy9Vc2Vycy9qZXNwZXIvRG9jdW1lbnRzL3dvcmtzcGFjZS1oZWxpb3Mvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIvPgotICA8bmV4dENhdGFsb2cgY2F0YWxvZz0iY2F0YWxvZzIueG1sIiBpZD0ibmV4dENhdGFsb2cxIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvY2F0YWxvZzExLXgueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2NhdGFsb2cxMS14LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllYTEyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvY2F0YWxvZzExLXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgaWQ9ImlkdmFsdWUxIiBwdWJsaWNJZD0iS3JvZWxsZWJvZWxsZSIgdXJpPSJodHRwOi8vdGVtcHVyaS5vcmciLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL29sZC1EVEQtbG9jYXRpb24ub3JnLyIgdXJpPSJodHRwOi8vd3d3Lm5ldy1sb2NhdGlvbi5jb20vIi8+Ci0gIDx1cmkgbmFtZT0idXJuOmZpc2h5OmZpc2giIHVyaT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy8iLz4KLSAgPHB1YmxpYyBpZD0iaWR2YWx1ZTIiIHB1YmxpY0lkPSJTbGVlcHkiIHVyaT0iaHR0cDovL3RlbXB1cmkub3JnIi8+Ci0gIDxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9vbGQtRFRELWxvY2F0aW9uLm9yZy8iIHVyaT0iaHR0cDovL3d3dy5uZXctbG9jYXRpb24uY29tLyIvPgotICA8bmV4dENhdGFsb2cgY2F0YWxvZz0iY2F0YWxvZy54bWwiLz4KLSAgPGRlbGVnYXRlUHVibGljIGNhdGFsb2c9InRvbS54bWwiIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy8iLz4KLSAgPGRlbGVnYXRlU3lzdGVtIGNhdGFsb2c9ImZyaXR6LnhtbCIgc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDoiLz4KLSAgPGRlbGVnYXRlVVJJIGNhdGFsb2c9ImdhcmZpZWxkLnhtbCIgdXJpU3RhcnRTdHJpbmc9InVybjp4LWZvb2RzOmxhc2FnbmEiLz4KLSAgPHN5c3RlbVN1ZmZpeCBzeXN0ZW1JZFN1ZmZpeD0ic2NoZW1hcy9nb29mLnhtbCIgdXJpPSJmaWxlOi8vL1VzZXJzL2plc3Blci9Eb2N1bWVudHMvd29ya3NwYWNlLWhlbGlvcy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLzIwMDkvZ29vZi12Mi54bWwiLz4KLSAgPHVyaVN1ZmZpeCB1cmk9ImZpbGU6Ly8vVXNlcnMvamVzcGVyL0RvY3VtZW50cy93b3Jrc3BhY2UtaGVsaW9zL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMvMjAwOS9mdW4tdjIueG1sIiB1cmlTdWZmaXg9InNjaGVtYXMvZ29vZi54bWwiLz4KLSAgPHJld3JpdGVTeXN0ZW0gcmV3cml0ZVByZWZpeD0iaHR0cDovL2NhY2hlLnNvbWUtcmVwb3NpdG9yeS5jb20vc2NoZW1lcy8iIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub3JpZ2luYWwtcmVwb3NpdG9yeS5jb20vc2NoZW1lcy8iLz4KLSAgPHJld3JpdGVVUkkgcmV3cml0ZVByZWZpeD0idXJuOmZ1bm55OiIgdXJpU3RhcnRTdHJpbmc9InVybjp4LWZ1bm55OiIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IUVMRU1FTlQgSW52b2ljZSAoSGVhZGVyLEl0ZW0rKT4KLTwhRUxFTUVOVCBIZWFkZXIgKERhdGUsQmlsbFRvKT4KLTwhQVRUTElTVCBIZWFkZXIKLSBpbnZvaWNlTnVtYmVyIENEQVRBICNSRVFVSVJFRAotPgotPCFFTEVNRU5UIEl0ZW0gKGRlc2NyaXB0aW9uKik+Ci08IUFUVExJU1QgSXRlbQotIHByaWNlIENEQVRBICNSRVFVSVJFRAotIGRpc2NvdW50IChwcm9tb3Rpb24gfCByZWd1bGFyKSAicmVndWxhciIKLT4KLTwhRUxFTUVOVCBEYXRlICgoTW9udGgsRGF5LFllYXIpfChEYXksTW9udGgsWWVhcikpPgotPCFFTEVNRU5UIEJpbGxUbyAoQWRkcmVzcyk+Ci08IUFUVExJU1QgQmlsbFRvCi0gY3VzdE51bWJlciBJRCAjUkVRVUlSRUQKLSBuYW1lIENEQVRBICNJTVBMSUVECi0gcGhvbmUgQ0RBVEEgI0lNUExJRUQKLT4KLTwhRUxFTUVOVCBkZXNjcmlwdGlvbiAoI1BDREFUQSk+Ci08IUVMRU1FTlQgQWRkcmVzcyAoc3RyZWV0MSxzdHJlZXQyPyxjaXR5LChzdGF0ZXxwcm92aW5jZSksemlwLGNvdW50cnk/KT4KLTwhRUxFTUVOVCBzdHJlZXQxICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdHJlZXQyICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjaXR5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdGF0ZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJvdmluY2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHppcCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY291bnRyeSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgTW9udGggKCNQQ0RBVEEpPgotPCFFTEVNRU5UIERheSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgWWVhciAoI1BDREFUQSk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmZTM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkX3Rlc3QiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC1zY2hlbWEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY3MjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHBlcnNvbm5lbCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCSAgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSdwZXJzb25hbC54c2QnPgotCi0gIDxwZXJzb24gaWQ9IkJpZy5Cb3NzIiA+Ci0gICAgPG5hbWU+PGZhbWlseT5Cb3NzPC9mYW1pbHk+IDxnaXZlbj5CaWc8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+Y2hpZWZAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgc3Vib3JkaW5hdGVzPSJvbmUud29ya2VyIHR3by53b3JrZXIgdGhyZWUud29ya2VyIGZvdXIud29ya2VyIGZpdmUud29ya2VyIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9Im9uZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5PbmU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+b25lQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InR3by53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Ud288L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dHdvQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InRocmVlLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlRocmVlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPnRocmVlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZvdXIud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rm91cjwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5mb3VyQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZpdmUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rml2ZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5maXZlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi08L3BlcnNvbm5lbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0ZTQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBwZXJzb25uZWwgKHBlcnNvbikrPgotCi08IUVMRU1FTlQgcGVyc29uIChuYW1lLGVtYWlsKix1cmwqLGxpbms/KT4KLTwhQVRUTElTVCBwZXJzb24gaWQgSUQgI1JFUVVJUkVEPgotPCFBVFRMSVNUIHBlcnNvbiBub3RlIENEQVRBICNJTVBMSUVEPgotPCFBVFRMSVNUIHBlcnNvbiBjb250ciAodHJ1ZXxmYWxzZSkgJ2ZhbHNlJz4KLTwhQVRUTElTVCBwZXJzb24gc2FsYXJ5IENEQVRBICNJTVBMSUVEPgotCi08IUVMRU1FTlQgbmFtZSAoKGZhbWlseSxnaXZlbil8KGdpdmVuLGZhbWlseSkpPgotCi08IUVMRU1FTlQgZmFtaWx5ICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGdpdmVuICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGVtYWlsICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIHVybCBFTVBUWT4KLTwhQVRUTElTVCB1cmwgaHJlZiBDREFUQSAnaHR0cDovLyc+Ci0KLTwhRUxFTUVOVCBsaW5rIEVNUFRZPgotPCFBVFRMSVNUIGxpbmsgbWFuYWdlciBJRFJFRiAjSU1QTElFRD4KLTwhQVRUTElTVCBsaW5rIHN1Ym9yZGluYXRlcyBJRFJFRlMgI0lNUExJRUQ+Ci0KLTwhTk9UQVRJT04gZ2lmIFBVQkxJQyAnLS8vQVBQL1Bob3Rvc2hvcC80LjAnICdwaG90b3Nob3AuZXhlJz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMzZTQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBlcnNvbm5lbCBTWVNURU0gImh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiPgotPHBlcnNvbm5lbD4KLQotICA8cGVyc29uIGlkPSJCaWcuQm9zcyI+Ci0gICAgPG5hbWU+PGZhbWlseT5Cb3NzPC9mYW1pbHk+IDxnaXZlbj5CaWc8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+Y2hpZWZAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgc3Vib3JkaW5hdGVzPSJvbmUud29ya2VyIHR3by53b3JrZXIgdGhyZWUud29ya2VyIGZvdXIud29ya2VyIGZpdmUud29ya2VyIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9Im9uZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5PbmU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+b25lQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InR3by53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Ud288L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dHdvQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InRocmVlLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlRocmVlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPnRocmVlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZvdXIud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rm91cjwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5mb3VyQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZpdmUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rml2ZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5maXZlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi08L3BlcnNvbm5lbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVlMzE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0icGVyc29ubmVsIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbiIgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgotICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6dW5pcXVlIG5hbWU9InVuaXF1ZTEiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJwZXJzb24iLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0ibmFtZS9naXZlbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJuYW1lL2ZhbWlseSIvPgotICA8L3hzOnVuaXF1ZT4KLSAgPHhzOmtleSBuYW1lPSdlbXBpZCc+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InBlcnNvbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAaWQiLz4KLSAgPC94czprZXk+Ci0gIDx4czprZXlyZWYgbmFtZT0ia2V5cmVmMSIgcmVmZXI9J2VtcGlkJz4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0icGVyc29uIi8+IAotICAgPHhzOmZpZWxkIHhwYXRoPSJsaW5rL0BtYW5hZ2VyIi8+ICAKLSAgPC94czprZXlyZWY+Ci0KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ibmFtZSIvPgotICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIiBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0idXJsIiAgIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rIiAgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9JzEnLz4KLSAgIDwveHM6c2VxdWVuY2U+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiAgdHlwZT0ieHM6SUQiIHVzZT0ncmVxdWlyZWQnLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRyIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgIDx4czpyZXN0cmljdGlvbiBiYXNlID0gInhzOnN0cmluZyI+Ci0gICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmYWxzZSIvPgotICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDwveHM6YXR0cmlidXRlPgotICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzYWxhcnkiIHR5cGU9InhzOmludGVnZXIiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmFsbD4KLSAgICA8eHM6ZWxlbWVudCByZWY9ImZhbWlseSIvPgotICAgIDx4czplbGVtZW50IHJlZj0iZ2l2ZW4iLz4KLSAgIDwveHM6YWxsPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImZhbWlseSIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJnaXZlbiIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJlbWFpbCIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJ1cmwiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iaHR0cDovLyIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImxpbmsiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hbmFnZXIiIHR5cGU9InhzOklEUkVGIi8+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9InN1Ym9yZGluYXRlcyIgdHlwZT0ieHM6SURSRUZTIi8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOm5vdGF0aW9uIG5hbWU9J2dpZicgcHVibGljPSctLy9BUFAvUGhvdG9zaG9wLzQuMCcgc3lzdGVtPSdwaG90b3Nob3AuZXhlJy8+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjYyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YzpDYXRhbG9ndWUgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IENhdGFsb2d1ZS54c2QgIj4KLQk8YzpCb29rPgotCQk8dGl0bGU+UHJvZmVzc2lvbmFsIFhNTCBTY2hlbWE8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4xLTg2MTAwNS00Ny00PC9pc2JuPgotCQk8cHVibGlzaGVyPldyb3ggUHJlc3M8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLQk8YzpNYWdhemluZT4KLQkJPHRpdGxlPldlYlNwaGVyZSBEZXZlbG9wZXIncyBKb3VybmFsPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQk8L2M6TWFnYXppbmU+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPkphdmEgYW5kIFhTTFQ8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4wLTU5Ni0wMDE0My02PC9pc2JuPgotCQk8cHVibGlzaGVyPk8nUmVpbGx5PC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci08L2M6Q2F0YWxvZ3VlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Njg2NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIKLQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL3Rlc3QgQ2F0YWxvZ3VlLnhzZCAiPgotCTxncm91cCBuYW1lPSJ0ZXN0Ij4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0idGVzdDEiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2dyb3VwPgotCTxjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNhdGlvblR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgotCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCTwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIgLz4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIKLQkJCQkJCW1heE9jY3Vycz0iMCIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGVsZW1lbnQgbmFtZT0iUHVibGljYXRpb24iIHR5cGU9ImM6UHVibGljYXRpb25UeXBlIgotCQlhYnN0cmFjdD0idHJ1ZSI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9IkNhdGFsb2d1ZSI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9ImM6UHVibGljYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYmQ3ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cG86cHVyY2hhc2VPcmRlciBvcmRlckRhdGU9IjIwMDEtMDEtMDEiIHhtbG5zOnBvPSJodHRwOi8vd3d3LmlibS5jb20iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5pYm0uY29tIFB1cmNoYXNlT3JkZXIueHNkIj4KLSAgPHNoaXBUbyBjb3VudHJ5PSJVUyI+Ci0gICAgPG5hbWU+QWxpY2UgU21pdGg8L25hbWU+Ci0gICAgPHN0cmVldD4xMjUgTWFwbGUgU3RyZWV0PC9zdHJlZXQ+Ci0gICAgPGNpdHk+TWlsbCBWYWxsZXk8L2NpdHk+Ci0gICAgPHN0YXRlPkNBPC9zdGF0ZT4KLSAgICA8emlwPjkwOTUyPC96aXA+Ci0gIDwvc2hpcFRvPgotICA8YmlsbFRvIGNvdW50cnk9IlVTIj4KLSAgICA8bmFtZT5Sb2JlcnQgU21pdGg8L25hbWU+Ci0gICAgPHN0cmVldD44IE9hayBBdmVudWU8L3N0cmVldD4KLSAgICA8Y2l0eT5PbGQgVG93bjwvY2l0eT4KLSAgICA8c3RhdGU+UEE8L3N0YXRlPgotICAgIDx6aXA+OTU4MTk8L3ppcD4KLSAgPC9iaWxsVG8+Ci0gIDxwbzpjb21tZW50Pkh1cnJ5LCBteSBsYXduIGlzIGdvaW5nIHdpbGQhPC9wbzpjb21tZW50PgotICA8aXRlbXM+Ci0gICAgPGl0ZW0gcGFydE51bT0iODcyLUFBIj4KLSAgICAgIDxwcm9kdWN0TmFtZT5MYXdubW93ZXI8L3Byb2R1Y3ROYW1lPgotICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PgotICAgICAgPFVTUHJpY2U+MTQ4Ljk1PC9VU1ByaWNlPgotICAgICAgPHBvOmNvbW1lbnQ+Q29uZmlybSB0aGlzIGlzIGVsZWN0cmljPC9wbzpjb21tZW50PgotICAgIDwvaXRlbT4KLSAgICA8aXRlbSBwYXJ0TnVtPSI5MjYtQUEiPgotICAgICAgPHByb2R1Y3ROYW1lPkJhYnkgTW9uaXRvcjwvcHJvZHVjdE5hbWU+Ci0gICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+Ci0gICAgICA8VVNQcmljZT4zOS45ODwvVVNQcmljZT4KLSAgICAgIDxzaGlwRGF0ZT4yMDAxLTA3LTIxPC9zaGlwRGF0ZT4KLSAgICA8L2l0ZW0+Ci0gIDwvaXRlbXM+Ci08L3BvOnB1cmNoYXNlT3JkZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmYjA5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5pYm0uY29tIgotIHhtbG5zOnBvPSJodHRwOi8vd3d3LmlibS5jb20iPgotICAgIDxhbm5vdGF0aW9uPgotICAgICAgICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hIGV4YW1wbGUgZnJvbSBYTUwgU2NoZW1hIFBhcnQgMDogUHJpbWVyCi0gICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZWV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLgotICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgIDwvYW5ub3RhdGlvbj4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlT3JkZXIiIHR5cGU9InBvOlB1cmNoYXNlT3JkZXJUeXBlIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJjb21tZW50IiB0eXBlPSJzdHJpbmciLz4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQdXJjaGFzZU9yZGVyVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBUbyIgdHlwZT0icG86VVNBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJiaWxsVG8iIHR5cGU9InBvOlVTQWRkcmVzcyIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiB0eXBlPSJwbzpJdGVtcyIvPgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iVVNBZGRyZXNzIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzdGF0ZSIgdHlwZT0icG86VVNTdGF0ZSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iemlwIiB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY291bnRyeSIgdHlwZT0iTk1UT0tFTiIgZml4ZWQ9IlVTIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJJdGVtcyI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Iml0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvZHVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icXVhbnRpdHkiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXhFeGNsdXNpdmUgdmFsdWU9IjEwMCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlVTUHJpY2UiIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzaGlwRGF0ZSIgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFydE51bSIgdHlwZT0icG86U0tVIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iU0tVIj4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICA8cGF0dGVybiB2YWx1ZT0iXGR7M30tW0EtWl17Mn0iLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iVVNTdGF0ZSI+Ci0gICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJDQSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUEEiPjwvZW51bWVyYXRpb24+Ci0gICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkFSIj48L2VudW1lcmF0aW9uPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmVhNDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgQWRkcmVzc2VzIGZvciBJbnRlcm5hdGlvbmFsIFB1cmNoYXNlIG9yZGVyIHNjaGVtYQotICAgQ29weXJpZ2h0IDIwMDAgRXhhbXBsZS5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIDwvZG9jdW1lbnRhdGlvbj4gCi0gPC9hbm5vdGF0aW9uPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJuYW1lIiAgIHR5cGU9InN0cmluZyIvPgotICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiB0eXBlPSJzdHJpbmciLz4KLSAgIDxlbGVtZW50IG5hbWU9ImNpdHkiICAgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2VxdWVuY2U+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJVU0FkZHJlc3MiPgotICA8Y29tcGxleENvbnRlbnQ+Ci0gICA8ZXh0ZW5zaW9uIGJhc2U9ImlwbzpBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0YXRlIiB0eXBlPSJpcG86VVNTdGF0ZSIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiICAgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvZXh0ZW5zaW9uPgotICA8L2NvbXBsZXhDb250ZW50PgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iVUtBZGRyZXNzIj4KLSAgPGNvbXBsZXhDb250ZW50PgotICAgPGV4dGVuc2lvbiBiYXNlPSJpcG86QWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0Y29kZSIgdHlwZT0iaXBvOlVLUG9zdGNvZGUiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXhwb3J0Q29kZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIiBmaXhlZD0iMSIvPgotICAgPC9leHRlbnNpb24+Ci0gIDwvY29tcGxleENvbnRlbnQ+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDwhLS0gb3RoZXIgQWRkcmVzcyBkZXJpdmF0aW9ucyBmb3IgbW9yZSBjb3VudHJpZXMgLS0+IAotCi0gPHNpbXBsZVR5cGUgbmFtZT0iVVNTdGF0ZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBSyIvPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBTCIvPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBUiIvPgotICAgPCEtLSBhbmQgc28gb24gLi4uIC0tPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotIDwhLS0gc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiBmb3IgUG9zdGNvZGUgLS0+Ci0gPHNpbXBsZVR5cGUgbmFtZT0iUG9zdGNvZGUiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLSA8IS0tIHNpbXBsZSB0eXBlIGRlZmluaXRpb24gZm9yIFVLUG9zdGNvZGUgLS0+Ci0gPHNpbXBsZVR5cGUgbmFtZT0iVUtQb3N0Y29kZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJpcG86UG9zdGNvZGUiPgotICAgIDxwYXR0ZXJuIHZhbHVlPSJbQS1aXXsyfVxkXHNcZFtBLVpdezJ9Ii8+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi0KLTwvc2NoZW1hPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDgzYWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08aXBvOnB1cmNoYXNlT3JkZXIKLSAgb3JkZXJEYXRlPSIyMDAxLTAxLTAxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIGlwby54c2QgIj4KLQotICAgIDxzaGlwVG8gZXhwb3J0Q29kZT0iMSIgeHNpOnR5cGU9ImlwbzpVS0FkZHJlc3MiPgotICAgICAgICA8bmFtZT5IZWxlbiBab2U8L25hbWU+Ci0gICAgICAgIDxzdHJlZXQ+NDcgRWRlbiBTdHJlZXQ8L3N0cmVldD4KLSAgICAgICAgPGNpdHk+Q2FtYnJpZGdlPC9jaXR5PgotICAgICAgICA8cG9zdGNvZGU+Q0IxIDFKUjwvcG9zdGNvZGU+Ci0gICAgPC9zaGlwVG8+Ci0KLSAgICA8YmlsbFRvIHhzaTp0eXBlPSJpcG86VVNBZGRyZXNzIj4KLSAgICAgICAgPG5hbWU+Um9iZXJ0IFNtaXRoPC9uYW1lPgotICAgICAgICA8c3RyZWV0PjggT2FrIEF2ZW51ZTwvc3RyZWV0PgotICAgICAgICA8Y2l0eT5PbGQgVG93bjwvY2l0eT4KLSAgICAgICAgPHN0YXRlPkFSPC9zdGF0ZT4KLSAgICAgICAgPHppcD45NTgxOTwvemlwPgotICAgIDwvYmlsbFRvPgotCi0gICAgPGl0ZW1zPgotICAgICAgICA8aXRlbSBwYXJ0TnVtPSI4MzMtQUEiPgotICAgICAgICAgICAgPHByb2R1Y3ROYW1lPkxhcGlzIG5lY2tsYWNlPC9wcm9kdWN0TmFtZT4KLSAgICAgICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4KLSAgICAgICAgICAgIDxVU1ByaWNlPjk5Ljk1PC9VU1ByaWNlPgotICAgICAgICAgICAgPGlwbzpjb21tZW50PldhbnQgdGhpcyBmb3IgdGhlIGhvbGlkYXlzITwvaXBvOmNvbW1lbnQ+Ci0gICAgICAgICAgICA8c2hpcERhdGU+MTk5OS0xMi0wNTwvc2hpcERhdGU+Ci0gICAgICAgIDwvaXRlbT4KLSAgICA8L2l0ZW1zPgotPC9pcG86cHVyY2hhc2VPcmRlcj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2M2QwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgSW50ZXJuYXRpb25hbCBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZm9yIEV4YW1wbGUuY29tCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8IS0tIGluY2x1ZGUgYWRkcmVzcyBjb25zdHJ1Y3RzIC0tPgotIDxpbmNsdWRlCi0gIHNjaGVtYUxvY2F0aW9uPSJhZGRyZXNzLnhzZCIvPgotCi0gPGVsZW1lbnQgbmFtZT0icHVyY2hhc2VPcmRlciIgdHlwZT0iaXBvOlB1cmNoYXNlT3JkZXJUeXBlIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJjb21tZW50IiB0eXBlPSJzdHJpbmciLz4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJQdXJjaGFzZU9yZGVyVHlwZSI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9InNoaXBUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJiaWxsVG8iICAgICB0eXBlPSJpcG86QWRkcmVzcyIvPgotICAgPGVsZW1lbnQgcmVmPSJpcG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtcyIgICAgICB0eXBlPSJpcG86SXRlbXMiLz4KLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJvcmRlckRhdGUiIHR5cGU9ImRhdGUiLz4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1zIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0iaXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJwcm9kdWN0TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJxdWFudGl0eSI+Ci0gICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJwb3NpdGl2ZUludGVnZXIiPgotICAgICAgICAgPG1heEV4Y2x1c2l2ZSB2YWx1ZT0iMTAwIi8+Ci0gICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iVVNQcmljZSIgICAgdHlwZT0iZGVjaW1hbCIvPgotICAgICAgPGVsZW1lbnQgcmVmPSJpcG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJzaGlwRGF0ZSIgICB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJ0TnVtIiB0eXBlPSJpcG86U0tVIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zZXF1ZW5jZT4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPHNpbXBsZVR5cGUgbmFtZT0iU0tVIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICA8cGF0dGVybiB2YWx1ZT0iXGR7M30tW0EtWl17Mn0iLz4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM2ZDQ5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvXy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0gICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgeG1sbnM6aXBvPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyI+Ci0KLSA8YW5ub3RhdGlvbj4KLSAgPGRvY3VtZW50YXRpb24geG1sOmxhbmc9ImVuIj4KLSAgIEludGVybmF0aW9uYWwgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hIGZvciBFeGFtcGxlLmNvbQotICAgQ29weXJpZ2h0IDIwMDAgRXhhbXBsZS5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIDwvZG9jdW1lbnRhdGlvbj4gCi0gPC9hbm5vdGF0aW9uPgotCi0gPCEtLSBpbmNsdWRlIGFkZHJlc3MgY29uc3RydWN0cyAtLT4KLSA8aW5jbHVkZQotICBzY2hlbWFMb2NhdGlvbj0iYWRkcmVzc18ueHNkIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZU9yZGVyIiB0eXBlPSJpcG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiAgICAgIHR5cGU9ImlwbzpJdGVtcyIvPgotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iSXRlbXMiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InByb2R1Y3ROYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InF1YW50aXR5Ij4KLSAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InBvc2l0aXZlSW50ZWdlciI+Ci0gICAgICAgICA8bWF4RXhjbHVzaXZlIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJVU1ByaWNlIiAgICB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiAgIHR5cGU9ImRhdGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgICA8YXR0cmlidXRlIG5hbWU9InBhcnROdW0iIHR5cGU9ImlwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NlcXVlbmNlPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThlZDZmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZXg6cHVyY2hhc2VSZXBvcnQKLSAgICAgICAgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IHJlcG9ydC54c2QiPgotICAgIDxleDpyZWdpb25zPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjM5NDg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIiBxdWFudGl0eT0iMyIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjI5Mzg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIiBxdWFudGl0eT0iMzAiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMTkyODUiPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siIHF1YW50aXR5PSIxOSIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiIHF1YW50aXR5PSI4Ii8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgIDwvZXg6cmVnaW9ucz4KLQotICAgIDxleDpwYXJ0cz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiLz4KLSAgICA8L2V4OnBhcnRzPgotPC9leDpwdXJjaGFzZVJlcG9ydD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlN2NhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnI9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnhpcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGUgUmVwb3J0IFNjaGVtYSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4KLSAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICA8L2Fubm90YXRpb24+Ci0KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHNjaGVtYUxvY2F0aW9uPSJpcG8ueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZVJlcG9ydCI+Ci0gICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWdpb25zIiB0eXBlPSJyOlJlZ2lvbnNUeXBlIi8+Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydHMiIHR5cGU9InI6UGFydHNUeXBlIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwZXJpb2QiIHR5cGU9ImR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZEVuZGluZyIgdHlwZT0iZGF0ZSIvPgotICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAKLSAgICAgICAgPHVuaXF1ZSBuYW1lPSJkdW1teTEiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnJlZ2lvbnMvcjp6aXAiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQGNvZGUiLz4KLSAgICAgICAgPC91bmlxdWU+Ci0gICAgICAgIAotICAgICAgICA8a2V5IG5hbWU9InBOdW1LZXkiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnBhcnRzL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5PgotICAgICAgICA8a2V5cmVmIG5hbWU9ImR1bW15MiIgcmVmZXI9InI6cE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcC9yOnBhcnQiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQG51bWJlciIvPgotICAgICAgICA8L2tleXJlZj4KLSAgICA8L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uc1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBhcnQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGFydHNUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiIHR5cGU9InhpcG86U0tVIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDM0Y2UxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZXg6cHVyY2hhc2VSZXBvcnQKLSAgICAgICAgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0Ij4KLSAgICA8ZXg6cmVnaW9ucz4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIzOTQ4NyI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1BWCIgcXVhbnRpdHk9IjMiLz4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUxEIiBxdWFudGl0eT0iMyIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIyOTM4NyI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9Ijg5Ny1KRCIgcXVhbnRpdHk9IjMwIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjE5Mjg1Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTIzLUNLIiBxdWFudGl0eT0iMTkiLz4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTc1LUZRIiBxdWFudGl0eT0iOCIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICA8L2V4OnJlZ2lvbnM+Ci0KLSAgICA8ZXg6cGFydHM+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTIzLUNLIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUxEIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTc1LUZRIi8+Ci0gICAgPC9leDpwYXJ0cz4KLTwvZXg6cHVyY2hhc2VSZXBvcnQ+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IyODRiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLSB4bWxuczpyPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLSB4bWxuczp4aXBvPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGFubm90YXRpb24+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIFJlcG9ydCBTY2hlbWEgZnJvbSBYTUwgU2NoZW1hIFBhcnQgMDogUHJpbWVyCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIAotICAgICAgICAgICAgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCi0gICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgPC9hbm5vdGF0aW9uPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIiBzY2hlbWFMb2NhdGlvbj0iaXBvX18ueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZVJlcG9ydCI+Ci0gICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWdpb25zIiB0eXBlPSJyOlJlZ2lvbnNUeXBlIi8+Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydHMiIHR5cGU9InI6UGFydHNUeXBlIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwZXJpb2QiIHR5cGU9ImR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZEVuZGluZyIgdHlwZT0iZGF0ZSIvPgotICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAKLSAgICAgICAgPHVuaXF1ZSBuYW1lPSJkdW1teTEiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnJlZ2lvbnMvcjp6aXAiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQGNvZGUiLz4KLSAgICAgICAgPC91bmlxdWU+Ci0gICAgICAgIAotICAgICAgICA8a2V5IG5hbWU9InBOdW1LZXkiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnBhcnRzL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5PgotICAgICAgICA8a2V5cmVmIG5hbWU9ImR1bW15MiIgcmVmZXI9InI6cE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcC9yOnBhcnQiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQG51bWJlciIvPgotICAgICAgICA8L2tleXJlZj4KLSAgICA8L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uc1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBhcnQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGFydHNUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiIHR5cGU9InhpcG86U0tVIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwYzgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgIHhtbG5zOmVyPSJodHRwOi8vb2FzaXMubmFtZXMudGMuZW50aXR5LnhtbG5zLnhtbC5jYXRhbG9nIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciCi0gICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8IS0tICRJZDogY2F0YWxvZy54c2QsdiAxLjEgMjAwNS8wNi8yNCAwNDoxNzo1MCBjc2FsdGVyIEV4cCAkIC0tPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InB1YklkQ2hhcnMiPgotICAgIDwhLS0gQSBzdHJpbmcgb2YgdGhlIGNoYXJhY3RlcnMgZGVmaW5lZCBhcyBwdWJJZENoYXIgaW4gcHJvZHVjdGlvbiAxMwotICAgICAgICAgb2YgdGhlIFNlY29uZCBFZGl0aW9uIG9mIHRoZSBYTUwgMS4wIFJlY29tbWVuZGF0aW9uLiBEb2VzIG5vdCBpbmNsdWRlCi0gICAgICAgICB0aGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSdyZSBub3JtYWxpemVkIGJ5IFhNTCBwYXJzaW5nLiAtLT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbYVwtekFcLVowXC05XC0nKCkrLC4vOj0/OyEqI0AkXyVdKiIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdwdWJsaWNJZGVudGlmaWVyJz4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0iZXI6cHViSWRDaGFycyIvPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ncGFydGlhbFB1YmxpY0lkZW50aWZpZXInPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSdlcjpwdWJJZENoYXJzJy8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdzeXN0ZW1PclB1YmxpYyc+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J3N5c3RlbScvPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdwdWJsaWMnLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPCEtLSBUaGUgZ2xvYmFsIGF0dHJpYnV0ZSB4bWw6YmFzZSBpcyBub3QgZXhwbGljaXRseSBkZWNsYXJlZDsgLS0+Ci0gIDwhLS0gaXQgaXMgYWxsb3dlZCBieSB0aGUgYW55QXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gLS0+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2NhdGFsb2cnPgotICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCc+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnB1YmxpYycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpzeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6dXJpJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnJld3JpdGVTeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVVSSScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVB1YmxpYycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVVSSScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpuZXh0Q2F0YWxvZycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpncm91cCcvPgotICAgICAgPHhzOmFueSBuYW1lc3BhY2U9JyMjb3RoZXInIHByb2Nlc3NDb250ZW50cz0nc2tpcCcvPgotICAgIDwveHM6Y2hvaWNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdwcmVmZXInIHR5cGU9J2VyOnN5c3RlbU9yUHVibGljJy8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3B1YmxpYyc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YmxpY0lkIiB0eXBlPSJlcjpwdWJsaWNJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3N5c3RlbSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkIiB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ndXJpJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6YW55VVJJIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jld3JpdGVTeXN0ZW0nPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW1JZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXdyaXRlUHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jld3JpdGVVUkknPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmlJZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXdyaXRlUHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlUHVibGljJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWRTdGFydFN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iZXI6cGFydGlhbFB1YmxpY0lkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlU3lzdGVtJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWRTdGFydFN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHM6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSdkZWxlZ2F0ZVVSSSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaVN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J25leHRDYXRhbG9nJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSdncm91cCc+Ci0gICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjp1cmknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlUHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOm5leHRDYXRhbG9nJy8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdza2lwJy8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdwcmVmZXInIHR5cGU9J2VyOnN5c3RlbU9yUHVibGljJy8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJjYXRhbG9nIiB0eXBlPSJlcjpjYXRhbG9nIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InB1YmxpYyIgdHlwZT0iZXI6cHVibGljIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InN5c3RlbSIgdHlwZT0iZXI6c3lzdGVtIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InVyaSIgdHlwZT0iZXI6dXJpIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVTeXN0ZW0iIHR5cGU9ImVyOnJld3JpdGVTeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmV3cml0ZVVSSSIgdHlwZT0iZXI6cmV3cml0ZVVSSSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVB1YmxpYyIgdHlwZT0iZXI6ZGVsZWdhdGVQdWJsaWMiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVTeXN0ZW0iIHR5cGU9ImVyOmRlbGVnYXRlU3lzdGVtIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlVVJJIiB0eXBlPSJlcjpkZWxlZ2F0ZVVSSSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJuZXh0Q2F0YWxvZyIgdHlwZT0iZXI6bmV4dENhdGFsb2ciLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiIHR5cGU9ImVyOmdyb3VwIi8+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSW52b2ljZUlkX3Rlc3QiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93ZWJVUkwiLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iSW52b2ljZS5kdGQiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiBjaGFjaGVkPSJ5ZXMiIHByb3BlcnR5PSJ2YWx1ZTEiLz4KLSAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ibm8iIHByb3BlcnR5PSJ2YWx1ZTIiLz4KLSAgPG5leHRDYXRhbG9nIGNhdGFsb2c9ImNhdGFsb2cyLnhtbCIgaWQ9Im5leHRDYXRhbG9nMSIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM5NTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+IAotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHN5c3RlbSBzeXN0ZW1JZD0iQ2F0YWxvZ3VlLnhzZCIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiIC8+IAotICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlLnhzZCIgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPGdyb3VwIGlkPSJncm91cDEiIHByZWZlcj0ic3lzdGVtIj4KLSAgICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDIiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPC9ncm91cD4KLSAgPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2NjEzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMmJhay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJDYXRhbG9ndWUueHNkIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICAgPGdyb3VwIGlkPSJncm91cDEiIHByZWZlcj0ic3lzdGVtIj4KLSAJCTx1cmkgbmFtZT0iaHR0cDovL0NhdGFsb2d1ZS54c2QiIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICAgPC9ncm91cD4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg0NTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTxYTUxDYXRhbG9nU2V0dGluZ3M+DQotICA8VXNlckVudHJpZXM+DQotICAgIDxVc2VyRW50cnkgVFlQRT0iUFVCTElDIiBJRD0iSW52b2ljZUlkIiANCi1VUkk9InBsYXRmb3JtOi9yZXNvdXJjZS9YTUxFeGFtcGxlcy9JbnZvaWNlMi9JbnZvaWNlLmR0ZCIvPg0KLSAgPC9Vc2VyRW50cmllcz4NCi08L1hNTENhdGFsb2dTZXR0aW5ncz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNzk0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSJJU08gODg3OToxOTg2IiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vc2Nyb2xsa2VlcGVyLnNvdXJjZWZvcmdlLm5ldC9kdGRzL3Njcm9sbGtlZXBlci1vbWYtMS4wL3Njcm9sbGtlZXBlci1vbWYuZHRkIiByZXdyaXRlUHJlZml4PSIvdXNyL3NoYXJlL3htbC9zY3JvbGxrZWVwZXIvZHRkcy9zY3JvbGxrZWVwZXItb21mLmR0ZCIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3Njcm9sbGtlZXBlci5zb3VyY2Vmb3JnZS5uZXQvZHRkcy9zY3JvbGxrZWVwZXItb21mLTEuMC9zY3JvbGxrZWVwZXItb21mLmR0ZCIgcmV3cml0ZVByZWZpeD0iL3Vzci9zaGFyZS94bWwvc2Nyb2xsa2VlcGVyL2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGVnYXRlQW5kUmV3cml0ZS9jYXRhbG9nMTEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cxMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxY2JiZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cxMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxjYXQ6Y2F0YWxvZw0KLSAgcHJlZmVyPSJzeXN0ZW0iDQotICB4bWxuczpjYXQ9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciDQotICB4bWxuczpjdXN0b209InVybjp4LXRlc3Q6c2NoZW1hIg0KLSAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCi0gIHhzaTpzY2hlbWFMb2NhdGlvbj0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyAuLi94c2QveG1sY2F0YWxvZzExLnhzZCAiPg0KLQ0KLSAgPCEtLSBUaGUgb3JpZ2luYWwgb25lcyAtLT4NCi0gIDxjYXQ6cHVibGljIGlkPSJpZHZhbHVlMCIgcHVibGljSWQ9IiIgdXJpPSJodHRwOi8vdGVtcHVyaS5vcmciLz4NCi0gIDxjYXQ6cHVibGljIGlkPSJpZHZhbHVlMSIgcHVibGljSWQ9Iktyb2VsbGVib2VsbGUiIHVyaT0iaHR0cDovL3RlbXB1cmkub3JnIi8+DQotICA8Y2F0OnN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL29sZC1EVEQtbG9jYXRpb24ub3JnLyIgdXJpPSJodHRwOi8vd3d3Lm5ldy1sb2NhdGlvbi5jb20vIi8+DQotICA8Y2F0OnVyaSBuYW1lPSJ1cm46ZmlzaHk6ZmlzaCIgdXJpPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnLyIvPg0KLSAgPGNhdDpuZXh0Q2F0YWxvZyBjYXRhbG9nPSJjYXRhbG9nLnhtbCIgY3VzdG9tOmN1c3RvbTE9InllcyIvPg0KLQ0KLSAgPCEtLSBUaGUgIm5ld2VyIiBvbmVzIChwYXJ0aWFsIHN1cHBvcnQgZnJvbSBXVFAgMy4xKSAtLT4NCi0gIDxjYXQ6ZGVsZWdhdGVQdWJsaWMgY2F0YWxvZz0idG9tLnhtbCIgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvLyIvPg0KLSAgPGNhdDpkZWxlZ2F0ZVN5c3RlbSBjYXRhbG9nPSJmcml0ei54bWwiIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ii8+DQotICA8Y2F0OmRlbGVnYXRlVVJJIGNhdGFsb2c9ImdhcmZpZWxkLnhtbCIgdXJpU3RhcnRTdHJpbmc9InVybjp4LWZvb2RzOmxhc2FnbmEiLz4NCi0NCi0gIDxjYXQ6cmV3cml0ZVN5c3RlbQ0KLSAgICBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9yaWdpbmFsLXJlcG9zaXRvcnkuY29tL3NjaGVtZXMvIg0KLSAgICByZXdyaXRlUHJlZml4PSJodHRwOi8vY2FjaGUuc29tZS1yZXBvc2l0b3J5LmNvbS9zY2hlbWVzLyIgLz4NCi0gIDxjYXQ6cmV3cml0ZVVSSQ0KLSAgICB1cmlTdGFydFN0cmluZz0idXJuOngtZnVubnk6Ig0KLSAgICByZXdyaXRlUHJlZml4PSJ1cm46ZnVubnk6IiAvPg0KLQ0KLSAgPGNhdDpzeXN0ZW1TdWZmaXgNCi0gICAgc3lzdGVtSWRTdWZmaXg9InNjaGVtYXMvZ29vZi54bWwiDQotICAgIHVyaT0iLi4vc2NoZW1hcy8yMDA5L2dvb2YtdjIueG1sIiAvPg0KLQ0KLSAgPGNhdDp1cmlTdWZmaXgNCi0gICAgdXJpU3VmZml4PSJzY2hlbWFzL2dvb2YueG1sIg0KLSAgICB1cmk9Ii4uL3NjaGVtYXMvMjAwOS9mdW4tdjIueG1sIiAvPg0KLSAgDQotICA8Y2F0Omdyb3VwIHByZWZlcj0icHVibGljIj4NCi0gICAgPGNhdDpwdWJsaWMgaWQ9ImlkdmFsdWUyIiBwdWJsaWNJZD0iU2xlZXB5IiB1cmk9Imh0dHA6Ly90ZW1wdXJpLm9yZyIgLz4NCi0gICAgPGNhdDpzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9vbGQtRFRELWxvY2F0aW9uLm9yZy8iIHVyaT0iaHR0cDovL3d3dy5uZXctbG9jYXRpb24uY29tLyIvPg0KLSAgPC9jYXQ6Z3JvdXA+DQotICANCi08L2NhdDpjYXRhbG9nPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGV0ZW1lY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxldGVtZWNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGV0ZW1lY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ikludm9pY2VJZF90ZXN0IiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgd2ViVVJMPSJodHRwOi8vd2ViVVJMIi8+Ci0gIDxzeXN0ZW0gc3lzdGVtSWQ9Ikludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ieWVzIiBwcm9wZXJ0eT0idmFsdWUxIi8+Ci0gIDx1cmkgbmFtZT0iaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIGNoYWNoZWQ9Im5vIiBwcm9wZXJ0eT0idmFsdWUyIi8+Ci0gIDxuZXh0Q2F0YWxvZyBjYXRhbG9nPSJjYXRhbG9nMi54bWwiIGlkPSJuZXh0Q2F0YWxvZzEiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjgzZGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLXB1Yi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmsxLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJwb29seC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYm94LmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kb2Nib29reC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmszLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc24uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1udW0uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiY2VudHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrNC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJub3RueC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZGlhLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazIuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiZ2VuZW50Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmhpZXJ4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNhLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc28uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tY3lybC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tdGVjaC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc2MuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9zb2V4dGJseC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9jYWxzdGJseC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1sYXQxLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zYi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1sYXQyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1jeXIyLmVudCIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RicG9vbHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZG9jYm9va3guZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJjZW50eC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYm5vdG54Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiZ2VuZW50Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiaGllcngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9jYWxzdGJseC5kdGQiLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4yLTEuMC0xNy4yIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjItMS4wLTE3LjIiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjdjZDA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLSAgICAgICAgIHByZWZlcj0icHVibGljIj4KLSA8dXJpIG5hbWU9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiB1cmk9Ii4vZXhhbXBsZS9leGFtcGxlLnhzZCIvPiAgCi0gPHN5c3RlbSBzeXN0ZW1JZD0ibXlleGFtcGxlLnhzZCIgdXJpPSIuL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QiLz4gICAgCi0gICAgCi0gPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL0EvLyIKLSAgICAgICAgICAgICAgICAgY2F0YWxvZz0iZXhhbXBsZS1jYXRhbG9nMi54bWwiLz4KLQotICAgICAgICAgICAgICAgICAgIAotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YmIxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotICAgICAgICAgcHJlZmVyPSJwdWJsaWMiPgotIDxwdWJsaWMgcHVibGljSWQ9Ii0vL0EvL1hNTCBDQVRBTE9HIElERU5USUZJRVIvL0VOIiAKLSAgICAgICAgIHVyaT0iLi9leGFtcGxlL2V4YW1wbGUuZW50Ii8+Ci08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhYWFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgcm9vdCBbCi0gPCFFTlRJVFkgdGV4dCBQVUJMSUMgIi0vL0EvL1hNTCBDQVRBTE9HIElERU5USUZJRVIvL0VOIiAKLSAgInVybjpwdWJsaWNpZDotOkE6WE1MK0NBVEFMT0crSURFTlRJRklFUjpFTiI+Ci1dPgotPHJvb3Q+JnRleHQ7PC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjk5OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHhzOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0ieHM6YW55VVJJIi8+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTc1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHJvb3QgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQkgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0ibXlleGFtcGxlLnhzZCI+Ci1odHRwOi8vYXBhY2hlLm9yZy94bWwvYW55VVJJPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3Y2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cm9vdCAgeG1sbnM9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIj4KLWh0dHA6Ly9hcGFjaGUub3JnL3htbC9hbnlVUkk8L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QwODc1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotSGVsbG8gd29ybGQhCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhMjlmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICB4bWxucz0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiPgotIDx4czplbGVtZW50IG5hbWU9InJvb3QiIHR5cGU9InhzOmFueVVSSSIvPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTI3YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0JcHJlZmVyPSJwdWJsaWMiPgotCQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0gICAgPCEtLSB3ZSBjYW4gbm90IG1hcCBQdWJsaWNJZCBvciBVUkkgb2YgdGhlIGluY2x1ZGVkL3JlZGVmaW5lZCBzY2hlbWFzIC0tPgkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9ImFkZHJlc3NfLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZCIgLz4KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzRlY2JhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLQlwcmVmZXI9InB1YmxpYyI+Ci0JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCIgLz4KLSAgICA8IS0tIHdlIGNhbiBub3QgbWFwIFB1YmxpY0lkIG9yIFVSSSBvZiB0aGUgaW5jbHVkZWQvcmVkZWZpbmVkIHNjaGVtYXMgLS0+CQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZCIgLz4KLQkKLQotCi08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmExYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0JPHN5c3RlbSBzeXN0ZW1JZD0iaXBvX18ueHNkIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9ImFkZHJlc3NfLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZCIgLz4KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWU0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjA0YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHhtbDpiYXNlPSIuIj4KLSAgIAkJPHB1YmxpYyBwdWJsaWNJZD0ibXlxdW90ZSIgdXJpPSJxdW90ZTIueG1sIi8+ICAKLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmY2JhNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi0gIDwhLS0gSSBiZWxvbmcgdG86Ci0gICAgICAgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZ0J1aWxkRmlsZVRlc3QuamF2YSAKLSAgICAgICAtLT4KLQotPHBhcmE+Ci0gIEEgc3RpdGNoIGluIHRpbWUgc2F2ZXMgbmluZQotPC9wYXJhPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjZDE0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci0KLTxwYXJhPgotICBObyBuZXdzIGlzIGdvb2QgbmV3cwotPC9wYXJhPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OTJiMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4c2w6c3R5bGVzaGVldCAKLSAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gIHZlcnNpb249IjEuMCI+Ci0KLSAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0Ii8+Ci0KLSAgPCEtLSBuYW1lIG9mIHRoZSBvdXRwdXQgcGFyYW1ldGVyIHRvIHdyaXRlIC0tPgotICA8eHNsOnBhcmFtIG5hbWU9Im91dHByb3AiPnZhbHVlPC94c2w6cGFyYW0+Ci0KLSAgPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIvPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkb3V0cHJvcCIvPjogPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvZnJhZ21lbnQvcGFyYSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8IS0tIFRoaXMgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaW4gZG9jMi54bWwgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IlJlZiI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJkb2N1bWVudChAZmlsZSkvZnJhZ21lbnQvcGFyYSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8IS0tIFRoaXMgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaW4gZG9jMS54bWwgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRleHQoKSI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5vcm1hbGl6ZS1zcGFjZSguKSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWM3MzBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBmcmFnbWVudCBbCi0gIDwhRU5USVRZIHF1b3RlIFBVQkxJQyAibXlxdW90ZSIgInF1b3RlMS54bWwiPgotXT4KLQotPGZyYWdtZW50PgotICA8cGFyYT4KLSAgICAgICZxdW90ZTsKLSAgPC9wYXJhPgotPC9mcmFnbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQxZDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi08ZnJhZ21lbnQ+Ci0gIDxwYXJhPgotICAgIDxSZWYgZmlsZT0ieG1sY2F0YWxvZzEueG1sIi8+Ci0gIDwvcGFyYT4KLTwvZnJhZ21lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ3ZmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGVzdHZhbHVlOiBBIHN0aXRjaCBpbiB0aW1lIHNhdmVzIG5pbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQtZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3YTVkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08PDw8IHRlc3R2YWx1ZTogQSBzdGl0Y2ggaW4gdGltZSBzYXZlcyBuaW5lDQotPDw8PCB0ZXN0dmFsdWU6IE5vIG5ld3MgaXMgZ29vZCBuZXdzDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1yZXN1bHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRlMjhhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRlc3R2YWx1ZTogTm8gbmV3cyBpcyBnb29kIG5ld3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QvWFNMU2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk2NDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPCEtLSB4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIgLy0tPgotCi0JPHhzZDplbGVtZW50IG5hbWU9InN0eWxlc2hlZXQiIHR5cGU9IndyYXBwZXIiIC8+Ci0JPHhzZDplbGVtZW50IG5hbWU9InRyYW5zZm9ybSIgdHlwZT0id3JhcHBlciIgLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0id3JhcHBlciI+Ci0JCTx4c2Q6Z3JvdXAgcmVmPSJ0b3BMZXZlbEVsZW1lbnRzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6SUQiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW1wb3J0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImluY2x1ZGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJpcC1zcGFjZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50cyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0icHJlc2VydmUtc3BhY2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im91dHB1dCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtZXRob2QiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InhtbCIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imh0bWwiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXh0IiAvPgotCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJPC94c2Q6YXR0cmlidXRlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvbWl0LXhtbC1kZWNsYXJhdGlvbiIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic3RhbmRhbG9uZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXN5c3RlbSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNkYXRhLXNlY3Rpb24tZWxlbWVudHMiIHR5cGU9InhzZDpOTVRPS0VOUyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImluZGVudCIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWVkaWEtdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ia2V5Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InBhdHRlcm4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImRlY2ltYWwtZm9ybWF0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLiIgbmFtZT0iZGVjaW1hbC1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIsIiBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJJbmZpbml0eSIgbmFtZT0iaW5maW5pdHkiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSItIiBuYW1lPSJtaW51cy1zaWduIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iTmFOIiBuYW1lPSJOYU4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIlIiBuYW1lPSJwZXJjZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0i4oCwIiBuYW1lPSJwZXItbWlsbGUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIwIiBuYW1lPSJ6ZXJvLWRpZ2l0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iIyIgbmFtZT0iZGlnaXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSI7IiBuYW1lPSJwYXR0ZXJuLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZXNwYWNlLWFsaWFzIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InN0eWxlc2hlZXQtcHJlZml4IiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icmVzdWx0LXByZWZpeCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0idGVtcGxhdGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0icGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQkJCTx4c2Q6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIiAvPgotCQkJCTwveHNkOmNob2ljZT4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InBhdHRlcm4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InByaW9yaXR5IiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YWx1ZS1vZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb3B5LW9mIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3QtcmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im51bWJlciI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJzaW5nbGUiIG5hbWU9ImxldmVsIj4KLQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzaW5nbGUiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdWx0aXBsZSIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFueSIgLz4KLQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCTwveHNkOmF0dHJpYnV0ZT4KLQkgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvdW50IiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJmcm9tIiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iMSIgbmFtZT0iZm9ybWF0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxldHRlci12YWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNpemUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImFwcGx5LXRlbXBsYXRlcyI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJzb3J0IiAvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndpdGgtcGFyYW0iIC8+Ci0JCQk8L3hzZDpjaG9pY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJub2RlKCkiIG5hbWU9InNlbGVjdCIgdHlwZT0iZXhwcmVzc2lvbiIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhcHBseS1pbXBvcnRzIj4KLQkJPHhzZDpjb21wbGV4VHlwZSAvPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZm9yLWVhY2giPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ic29ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCQk8eHNkOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCQkJPHhzZDphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiIC8+Ci0JCQkJPC94c2Q6Y2hvaWNlPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9InNvcnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLiIgbmFtZT0ic2VsZWN0IiB0eXBlPSJleHByZXNzaW9uIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9InRleHQiIG5hbWU9ImRhdGEtdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9ImFzY2VuZGluZyIgbmFtZT0ib3JkZXIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjYXNlLW9yZGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0IiB0eXBlPSJleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImNob29zZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndoZW4iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ib3RoZXJ3aXNlIiBtaW5PY2N1cnM9IjAiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3aGVuIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdGhlcndpc2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlLXNldCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCAgcmVmPSJhdHRyaWJ1dGUiICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNkOk5NVE9LRU5TIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjYWxsLXRlbXBsYXRlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0id2l0aC1wYXJhbSIgbWluT2NjdXJzPSIwIiAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiICAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0id2l0aC1wYXJhbSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJwYXJhbSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXh0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiAvPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtZW50Ij4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXNlLWF0dHJpYnV0ZS1zZXRzIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29tbWVudCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIi8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImNvcHkiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2UtYXR0cmlidXRlLXNldHMiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0ibm8iIG5hbWU9InRlcm1pbmF0ZSIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImZhbGxiYWNrIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTwveHNkOmNob2ljZT4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iaW5zdHJ1Y3Rpb25zIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJPHhzZDplbGVtZW50IHJlZj0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvbW1lbnQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJlbGVtZW50IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXR0cmlidXRlIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9ImNoYXItaW5zdHJ1Y3Rpb25zIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhcHBseS10ZW1wbGF0ZXMiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjYWxsLXRlbXBsYXRlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXBwbHktaW1wb3J0cyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImZvci1lYWNoIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idmFsdWUtb2YiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjb3B5LW9mIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibnVtYmVyIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY2hvb3NlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iaWYiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZXh0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY29weSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InZhcmlhYmxlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibWVzc2FnZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImZhbGxiYWNrIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9InRvcExldmVsRWxlbWVudHMiPgotCQk8eHNkOmNob2ljZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcG9ydCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImluY2x1ZGUiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJzdHJpcC1zcGFjZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InByZXNlcnZlLXNwYWNlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ia2V5IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iZGVjaW1hbC1mb3JtYXQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhdHRyaWJ1dGUtc2V0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibmFtZXNwYWNlLWFsaWFzIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0icGFyYW0iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ2YXJpYWJsZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Im91dHB1dCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRlbXBsYXRlIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iWWVzTm9UeXBlIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InllcyIgLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIiAvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lZEFuZFNlbGVjdGFibGUiIG1peGVkPSJ0cnVlIj4KLQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3Qtb3B0aW9uYWwiIC8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJleHByZXNzaW9uIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwYXR0ZXJuIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWxlY3Qtb3B0aW9uYWwiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWxlY3QtcmVxdWlyZWQiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJZZXNOb1R5cGUiIGRlZmF1bHQ9Im5vIiAvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2Q6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEveHNkL3htbGNhdGFsb2cxMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QveG1sY2F0YWxvZzExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4MmQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QveG1sY2F0YWxvZzExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KLSAgICAgICAgICAgeG1sbnM6ZXI9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciDQotICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+DQotDQotICA8IS0tICRJZDogeG1sY2F0YWxvZzExLnhzZCx2IDEuMSAyMDEwLzAzLzA4IDIwOjQ0OjMwIGptb2xsZXIgRXhwICQgLS0+DQotDQotICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+DQotDQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwdWJJZENoYXJzIj4NCi0gICAgPCEtLSBBIHN0cmluZyBvZiB0aGUgY2hhcmFjdGVycyBkZWZpbmVkIGFzIHB1YklkQ2hhciBpbiBwcm9kdWN0aW9uIDEzDQotICAgICAgICAgb2YgdGhlIFNlY29uZCBFZGl0aW9uIG9mIHRoZSBYTUwgMS4wIFJlY29tbWVuZGF0aW9uLiBEb2VzIG5vdCBpbmNsdWRlDQotICAgICAgICAgdGhlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkncmUgbm9ybWFsaXplZCBieSBYTUwgcGFyc2luZy4gLS0+DQotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbYS16QS1aMC05XC0nXChcKSssLi86PT87ISojQCRfJV0qIi8+DQotICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICA8L3hzOnNpbXBsZVR5cGU+DQotDQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwdWJsaWNJZGVudGlmaWVyIj4NCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9ImVyOnB1YklkQ2hhcnMiLz4NCi0gIDwveHM6c2ltcGxlVHlwZT4NCi0NCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InBhcnRpYWxQdWJsaWNJZGVudGlmaWVyIj4NCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9ImVyOnB1YklkQ2hhcnMiLz4NCi0gIDwveHM6c2ltcGxlVHlwZT4NCi0NCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InN5c3RlbU9yUHVibGljIj4NCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzeXN0ZW0iLz4NCi0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InB1YmxpYyIvPg0KLSAgICA8L3hzOnJlc3RyaWN0aW9uPg0KLSAgPC94czpzaW1wbGVUeXBlPg0KLQ0KLSAgPCEtLSBUaGUgZ2xvYmFsIGF0dHJpYnV0ZSB4bWw6YmFzZSBpcyBub3QgZXhwbGljaXRseSBkZWNsYXJlZDsgLS0+DQotICA8IS0tIGl0IGlzIGFsbG93ZWQgYnkgdGhlIGFueUF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMuIC0tPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImNhdGFsb2ciPg0KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW0iLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOnVyaSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVVSSSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6dXJpU3VmZml4Ii8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW1TdWZmaXgiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOmRlbGVnYXRlUHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpkZWxlZ2F0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6ZGVsZWdhdGVVUkkiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOm5leHRDYXRhbG9nIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpncm91cCIvPg0KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4NCi0gICAgPC94czpjaG9pY2U+DQotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJlZmVyIiB0eXBlPSJlcjpzeXN0ZW1PclB1YmxpYyIvPg0KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icHVibGljIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWQiIHR5cGU9ImVyOnB1YmxpY0lkZW50aWZpZXIiDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic3lzdGVtIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWQiIHR5cGU9InhzOnN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gICAgICA8L3hzOnJlc3RyaWN0aW9uPg0KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ1cmkiPg0KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czphbnlVUkkiDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icmV3cml0ZVN5c3RlbSI+DQotICAgIDx4czpjb21wbGV4Q29udGVudD4NCi0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkU3RhcnRTdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJld3JpdGVQcmVmaXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InJld3JpdGVVUkkiPg0KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmlTdGFydFN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV3cml0ZVByZWZpeCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic3lzdGVtU3VmZml4Ij4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWRTdWZmaXgiDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idXJpU3VmZml4Ij4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpU3VmZml4Ig0KLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHM6c3RyaW5nIg0KLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImRlbGVnYXRlUHVibGljIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWRTdGFydFN0cmluZyINCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImVyOnBhcnRpYWxQdWJsaWNJZGVudGlmaWVyIg0KLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gICAgICA8L3hzOnJlc3RyaWN0aW9uPg0KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJkZWxlZ2F0ZVN5c3RlbSI+DQotICAgIDx4czpjb21wbGV4Q29udGVudD4NCi0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkU3RhcnRTdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImRlbGVnYXRlVVJJIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpU3RhcnRTdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciDQotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPg0KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4NCi0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+DQotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5leHRDYXRhbG9nIj4NCi0gICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4NCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+DQotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPg0KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgICAgPC94czpyZXN0cmljdGlvbj4NCi0gICAgPC94czpjb21wbGV4Q29udGVudD4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ3JvdXAiPg0KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW0iLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOnVyaSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6cmV3cml0ZVVSSSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6dXJpU3VmZml4Ii8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpzeXN0ZW1TdWZmaXgiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOmRlbGVnYXRlUHVibGljIi8+DQotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcjpkZWxlZ2F0ZVN5c3RlbSIvPg0KLSAgICAgIDx4czplbGVtZW50IHJlZj0iZXI6ZGVsZWdhdGVVUkkiLz4NCi0gICAgICA8eHM6ZWxlbWVudCByZWY9ImVyOm5leHRDYXRhbG9nIi8+DQotICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPg0KLSAgICA8L3hzOmNob2ljZT4NCi0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcmVmZXIiIHR5cGU9ImVyOnN5c3RlbU9yUHVibGljIi8+DQotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+DQotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImNhdGFsb2ciIHR5cGU9ImVyOmNhdGFsb2ciLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InB1YmxpYyIgdHlwZT0iZXI6cHVibGljIi8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJzeXN0ZW0iIHR5cGU9ImVyOnN5c3RlbSIvPg0KLSAgPHhzOmVsZW1lbnQgbmFtZT0idXJpIiB0eXBlPSJlcjp1cmkiLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVTeXN0ZW0iIHR5cGU9ImVyOnJld3JpdGVTeXN0ZW0iLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVVUkkiIHR5cGU9ImVyOnJld3JpdGVVUkkiLz4NCi0gIDx4czplbGVtZW50IG5hbWU9InN5c3RlbVN1ZmZpeCIgdHlwZT0iZXI6c3lzdGVtU3VmZml4Ii8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJ1cmlTdWZmaXgiIHR5cGU9ImVyOnVyaVN1ZmZpeCIvPg0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVQdWJsaWMiIHR5cGU9ImVyOmRlbGVnYXRlUHVibGljIi8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVN5c3RlbSIgdHlwZT0iZXI6ZGVsZWdhdGVTeXN0ZW0iLz4NCi0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlVVJJIiB0eXBlPSJlcjpkZWxlZ2F0ZVVSSSIvPg0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibmV4dENhdGFsb2ciIHR5cGU9ImVyOm5leHRDYXRhbG9nIi8+DQotICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0iZXI6Z3JvdXAiLz4NCi0NCi08L3hzOnNjaGVtYT4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MzhjOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYTUwgQ2F0YWxvZyBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNzVjNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuY2F0YWxvZ0NvbnRyaWJ1dGlvbnMiPgotCSAgPGNhdGFsb2dDb250cmlidXRpb24+IAotICAgICAgICAgICA8c3lzdGVtIGlkPSJ0ZXN0U3lzdGVtSWQiCi0gICAgICAgICAgICAgICBzeXN0ZW1JZD0iaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIKLSAgICAgICAgICAgICAgIHVyaT0iZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiPiAKLSAgICAgICAgICAgICAgIDwvc3lzdGVtPgotICAgICAgICAgICA8cHVibGljIGlkPSJ0ZXN0UHVibGljSWQxIgotICAgICAgICAgICAgICAgcHVibGljSWQ9Ikludm9pY2VJZF90ZXN0IgotICAgICAgICAgICAgICAgdXJpPSJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiCi0gICAgICAgICAgICAgICB3ZWJVUkw9Imh0dHA6Ly9vcmcuZWNsaXBzZS53c3QueG1sLmV4YW1wbGUvSW52b2ljZS5kdGQiPgotICAgICAgICAgIDwvcHVibGljPgotICAgICAgICAgIDx1cmkgaWQ9InRlc3RVcmlJZDEiCi0gICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIgCi0gICAgICAgICAgICAgICB1cmk9ImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIvPiAKLSAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VVJJSWQyIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgICAgICB1cmk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIj4KLSAgICAgICAgICA8L3VyaT4gCi0gICAgICAgICAgPG5leHRDYXRhbG9nIGlkPSJ0ZXN0TmVzdGVkQ2F0YWxvZyIKLSAgICAgICAgICAgICAgIGNhdGFsb2c9ImRhdGEvY2F0YWxvZzEueG1sIi8+IAotICAgICAgIDwvY2F0YWxvZ0NvbnRyaWJ1dGlvbj4gCi0JPC9leHRlbnNpb24+IAotICAgCi0gCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiNjNkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BYnN0cmFjdENhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2dTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHByaXZhdGUgQ2F0YWxvZ1NldCBjYXRhbG9nU2V0ID0gbmV3IENhdGFsb2dTZXQoKTsKLSAgICAKLSAgICBwcm90ZWN0ZWQgSUNhdGFsb2cgc3lzdGVtQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyB1c2VyQ2F0YWxvZzsKLQotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyBkZWZhdWx0Q2F0YWxvZzsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgQWJzdHJhY3RDYXRhbG9nVGVzdChTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgICAgICAKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIExpc3QgZ2V0Q2F0YWxvZ0VudHJpZXMoSUNhdGFsb2cgY2F0YWxvZywgaW50IGVudHJ5VHlwZSkKLSAgICB7Ci0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBJQ2F0YWxvZ0VudHJ5W10gZW50cmllcyA9IGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gZW50cmllc1tpXTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBlbnRyeVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIGdldENhdGFsb2coU3RyaW5nIGlkLCBTdHJpbmcgdXJpU3RyaW5nKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotCQlyZXR1cm4gY2F0YWxvZ1NldC5sb29rdXBPckNyZWF0ZUNhdGFsb2coaWQsIHVyaVN0cmluZyk7Ci0gICAgfQotICAgIAotCi0gICAgcHVibGljIHZvaWQgaW5pdENhdGFsb2dzKCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dzID0gZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJTmV4dENhdGFsb2cgY2F0YWxvZyA9IG5leHRDYXRhbG9nc1tpXTsKLSAgICAgICAgICAgIElDYXRhbG9nIHJlZmVyZW5jZWRDYXRhbG9nID0gY2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRDYXRhbG9nICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKFhNTENvcmVQbHVnaW4uU1lTVEVNX0NBVEFMT0dfSUQKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMocmVmZXJlbmNlZENhdGFsb2cuZ2V0SWQoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1DYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRAotICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhyZWZlcmVuY2VkQ2F0YWxvZy5nZXRJZCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZXJDYXRhbG9nID0gcmVmZXJlbmNlZENhdGFsb2c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgICAgICBpbml0Q2F0YWxvZ3MoKTsKLSAgICB9Ci0JCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgbWFrZUFic29sdXRlKFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBsb2NhdGlvbikKLQkgIHsKLQkJICBVUkwgbG9jYWwgPSBudWxsOwotCQkgIGxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgnXFwnLCAnLycpOwotCQkgIHRyeQotCQkgIHsKLQkJCSAgVVJMIGJhc2VVUkwgPSBuZXcgVVJMKGJhc2VMb2NhdGlvbik7Ci0JCQkgIGxvY2FsID0gbmV3IFVSTChiYXNlVVJMLCBsb2NhdGlvbik7Ci0JCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JCSAgewotCQkgIH0KLQkJICAKLQkJICBpZiAobG9jYWwgIT0gbnVsbCkKLQkJICB7Ci0JCQkgIHJldHVybiBsb2NhbC50b1N0cmluZygpOwotCQkgIH0gZWxzZQotCQkgIHsKLQkJCSAgcmV0dXJuIGxvY2F0aW9uOwotCQkgIH0KLQkgIH0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIFVSTCByZXNvbHZlUGx1Z2luTG9jYXRpb24oU3RyaW5nIHBsdWdpbklkKXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJewotCQkJVVJMIGJ1bmRsZUVudHJ5ID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQl0cnkKLQkJCXsKLQkJCQlyZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShidW5kbGVFbnRyeSk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCS8vIHNlZSBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aChTdHJpbmcgcGF0aCkgCi0JICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVQYXRoKFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIHBhdGgpIAotCSAgewotCi0JCSAgcmV0dXJuICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5yZXNvbHZlUGF0aCggCi0JCQkJICBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlci5nZXRQbGF0Zm9ybVVSTChwbHVnaW5JZCksIHBhdGgpOwotCSAgfQotCSAgCi0JICAKLQkgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZUxvY2F0aW9uKFN0cmluZyBwYXRoKSB7Ci0JCSAgU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCSAgdHJ5IHsKLQkJCXJlc3VsdCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTChGaWxlTG9jYXRvci5maW5kKFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aChwYXRoKSwgbnVsbCkpLnRvU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0JCXJldHVybiBVUklIZWxwZXIuZW5zdXJlRmlsZVVSSVByb3RvY29sRm9ybWF0KHJlc3VsdCk7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjU4YzdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgKLQkJCQkiVGVzdCBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1JlYWRlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1Jlc29sdmVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nV3JpdGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1Rlc3QuY2xhc3MpOwotCQkvLyRKVW5pdC1FTkQkCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci0gICAgCi0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwMDFjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLQotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0Ci17Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0KFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlYWRSZWdpc3RyeSgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZGVmYXVsdENhdGFsb2cpOwotICAgICAgICBhc3NlcnRFcXVhbHMoWE1MQ29yZVBsdWdpbi5ERUZBVUxUX0NBVEFMT0dfSUQsIGRlZmF1bHRDYXRhbG9nLmdldElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVmYXVsdENhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCkubGVuZ3RoKTsKLQotCQlTdHJpbmcgcGx1Z2luSWQgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKTsKLSAgICAKLQkJICAvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0gICAgICAgIGFzc2VydE5vdE51bGwoc3lzdGVtQ2F0YWxvZyk7Ci0gICAgICAgIExpc3QgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0U3lzdGVtSWQiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQl9Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0gICAgICAgIGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhzeXN0ZW1DYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsgICAgICAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLnNpemUoKTsgaSsrKQotCQl7Ci0JCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoaSk7Ci0JCQlpZigidGVzdFB1YmxpY0lkMSIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCQkvLyB0ZXN0IHVzZXIgZGVmaW5lZCBhdHRyaWJ1dGVzCi0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LnhtbC5leGFtcGxlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkJfQotCQkJCi0JCQllbHNlIGlmKCJ0ZXN0TWFwcGluZ0luZm8iLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYTEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JICAgICAKLQkJfQotICAgICAgCi0gICAgICAgIC8vIHRlc3QgdXJpIGVudHJpZXMKLSAgICAgICAgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0VVJJSWQxIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJICBTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIpOwotCQkJICAgICAgYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQkJZWxzZSBpZigidGVzdFVSSUlkMiIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQkJZWxzZSBpZigidGVzdFVSSUlkMyIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiamFyOnBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIhL2RhdGEvY2F0YWxvZy54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLSAgICAgIAotICAgICAgICAvLyB0ZXN0IHRlc3RlZCBjYXRhbG9nCi0gICAgICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IHN5c3RlbUNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dFbnRyaWVzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1tpXTsKLQkJCWlmKCJ0ZXN0TmVzdGVkQ2F0YWxvZyIuZXF1YWxzKG5leHRDYXRhbG9nRW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL2NhdGFsb2cxLnhtbCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nTG9jYXRpb24oKSk7Ci0JCQkJSUNhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZyk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDMsIG5leHRDYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQkJCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLAotCQkJCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJCQlJQ2F0YWxvZ0VudHJ5IGVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQkJCS8vVVJJIHVyaSA9IFVSSUhlbHBlci5nZXRVUklGb3JGaWxlUGF0aChyZXNvbHZlZFVSSSk7Ci0JCQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUodXJpLnRvVVJMKCksICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCBzeXN0ZW0gZW50cmllcwotCQkJCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywKLQkJCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQkJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJCS8vIHRlc3QgdXJpIGVudHJpZXMKLQkJCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csCi0JCQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfVVJJKTsKLQkJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQkJCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQkJCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJfQotCQl9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZWFkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZGQwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLQotcHVibGljIGNsYXNzIENhdGFsb2dSZWFkZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZWFkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciB2b2lkIHJlYWQoSUNhdGFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZENhdGFsb2coKXRocm93cyBFeGNlcHRpb24gewotCi0JCS8vcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNhdGFsb2cxIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJCi0JCS8vIHRlc3QgbWFpbiBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCS8vYXNzZXJ0RXF1YWxzKCJjYXQxIiwgY2F0YWxvZy5nZXRJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJLy9TdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKGJhc2UsICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQotCQkKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3dlYlVSTCIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJ3ZWJVUkwiKSk7Ci0KLQkJCi0JCS8vICB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfU1lTVEVNKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygieWVzIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUxIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0KLQkJLy8gIHRlc3QgdXJpIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCQkKLQkJLy8gIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQkKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nRW50cnkgPSAoSU5leHRDYXRhbG9nKW5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQkJCi0vLwkJU3RyaW5nIGNhdGFsb2dSZWZJZCA9IG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ1JlZklkKCk7Ci0vLwkJYXNzZXJ0RXF1YWxzKCJuZXh0Q2F0YWxvZzEiLCBjYXRhbG9nUmVmSWQpOwotCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZShiYXNlLCAiY2F0YWxvZzIueG1sIik7Ci0JCWFzc2VydEVxdWFscygiY2F0YWxvZzIueG1sIiwgbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nTG9jYXRpb24oKSk7Ci0KLQkJSUNhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0KLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZyk7Ci0JCWFzc2VydEVxdWFscyg0LCBuZXh0Q2F0YWxvZy5nZXRDYXRhbG9nRW50cmllcygpLmxlbmd0aCk7Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygyLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCS8vcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKG5leHRDYXRhbG9nLmdldEJhc2UoKSwgIi4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyeSBmcm9tIGEgZ3JvdXAKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgxKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUobmV4dENhdGFsb2cuZ2V0QmFzZSgpLCAiLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oIi9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMiIsIGVudHJ5LmdldEtleSgpKTsKLQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJDYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkKLQotCX0KLQotCS8qCi0JICogQ2xhc3MgdW5kZXIgdGVzdCBmb3Igdm9pZCByZWFkKElDYXRhbG9nLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJlYWRDb21wbGV4Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZzExLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgYmFzZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUoY2F0YWxvZ1VybCk7Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpZ2V0Q2F0YWxvZygiY2F0YWxvZzExIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJCi0JCS8vIHRlc3QgbWFpbiBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCS8vYXNzZXJ0RXF1YWxzKCJjYXQxIiwgY2F0YWxvZy5nZXRJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEzLCBjYXRhbG9nLmdldENhdGFsb2dFbGVtZW50cygpLmxlbmd0aCk7Ci0JCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cmllcwotCQlhc3NlcnRFcXVhbHMoMiwgQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQykuc2l6ZSgpKTsKLQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQlhc3NlcnRFcXVhbHMoMiwgQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSkuc2l6ZSgpKTsKLQotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQlhc3NlcnRFcXVhbHMoMSwgQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSkuc2l6ZSgpKTsKLQotCQkvLyAgdGVzdCBuZXh0IGNhdGFsb2cgLSBjYXRhbG9nMi54bWwKLQkJSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gY2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIG5leHRDYXRhbG9nRW50cmllcy5sZW5ndGgpOwotCQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpbmV4dENhdGFsb2dFbnRyaWVzWzBdOwotCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nRW50cnkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKCJjYXRhbG9nLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wYXRhYmlsaXR5UmVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vCXJlYWQgY2F0YWxvZwotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZyI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgYmFzZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUoY2F0YWxvZ1VybCk7Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpZ2V0Q2F0YWxvZygiY29tcGF0YWJpbGl0eUNhdGFsb2ciLCBiYXNlLnRvU3RyaW5nKCkpOwotCQkvL0NhdGFsb2dSZWFkZXIucmVhZChjYXRhbG9nLCBjYXRhbG9nRmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2cpOwotCQlMaXN0IGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoInBsYXRmb3JtOi9yZXNvdXJjZS9YTUxFeGFtcGxlcy9JbnZvaWNlMi9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGY0NTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nUmVzb2x2ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZXNvbHZlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlc29sdmVSZXNvbHZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQotCQotCQkvLyBmcm9tIHBsdWdpbi54bWwgZmlsZQotCQlTdHJpbmcgcGx1Z2luQmFzZSA9IHJlc29sdmVQbHVnaW5Mb2NhdGlvbihUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSkudG9TdHJpbmcoKTsKLQotCQlTdHJpbmcgcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJJbnZvaWNlSWRfdGVzdCIsIG51bGwpOwotCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JCXJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgoIiIsICJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCByZXNvbHZlZFVSSSk7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQkKLQkJLy8gZnJvbSBjYXRhbG9nMS54bWwKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJJbnZvaWNlSWRfdGVzdCIsIG51bGwpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiSW52b2ljZS5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQotCQkKLQkJLy8gZnJvbSBjYXRhbG9nMi54bWwKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQkJCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzb2x2ZWRVUkkpLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJDYXRhbG9ndWUueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzb2x2ZWRVUkkpLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQl9Ci0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhZmMzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgQ2F0YWxvZyB3b3JraW5nVXNlckNhdGFsb2cgPSBuZXcgQ2F0YWxvZyhudWxsLCAid29ya2luZyIsIG51bGwpOwotICAgICAgIGFzc2VydE5vdE51bGwodXNlckNhdGFsb2cpOwotICAgICAgIHdvcmtpbmdVc2VyQ2F0YWxvZy5hZGRFbnRyaWVzRnJvbUNhdGFsb2codXNlckNhdGFsb2cpOwotICAgICAgIAotICAgICAgIElDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0gICAgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotICAgICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0gICAgICAgd29ya2luZ1VzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0gICAgIAotICAgICAgIHVzZXJDYXRhbG9nLmFkZEVudHJpZXNGcm9tQ2F0YWxvZyh3b3JraW5nVXNlckNhdGFsb2cpOwotCSAgIFN0cmluZyB1c2VyQ2F0YWxvZ0xvY2F0aW9uID0gdXNlckNhdGFsb2cuZ2V0TG9jYXRpb24oKTsKLQkgIAotICAgICAgIHVzZXJDYXRhbG9nLnNhdmUoKTsKLSAgICAgICB1c2VyQ2F0YWxvZy5jbGVhcigpOwotICAgICAgIAotICAgICAgIHVzZXJDYXRhbG9nID0gZ2V0Q2F0YWxvZyhYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRCwgdXNlckNhdGFsb2dMb2NhdGlvbik7Ci0gICAgICAgCi0gICAgICAgTGlzdCBlbnRyaWVzID0gZ2V0Q2F0YWxvZ0VudHJpZXModXNlckNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotICAgICAgIGFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotICAgICAKLSAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly90ZXN0dXJpIiwgZW50cnkuZ2V0VVJJKCkpOwotICAgICAgIGFzc2VydEVxdWFscygidGVzdEtleSIsIGVudHJ5LmdldEtleSgpKTsKLQotICAgCi0gICAgfQotCi0KLSAgIAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBmZDcwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nV3JpdGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nV3JpdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0V3JpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cxLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0JCQkJY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgdGVzdENhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzEiLCByZXNvbHZlZFVSTAotCQkJCS50b1N0cmluZygpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0JCXRlc3RDYXRhbG9nLnNldEJhc2UocmVzb2x2ZWRVUkwudG9TdHJpbmcoKSk7Ci0JCS8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0KLQkJLy8gd3JpdGUgY2F0YWxvZwotCQlVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCSIvIik7Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aChGaWxlTG9jYXRvci5yZXNvbHZlKHJlc3VsdHNGb2xkZXIpLmdldEZpbGUoKSk7Ci0JCVN0cmluZyByZXN1bHRDYXRhbG9nRmlsZSA9IHBhdGguYXBwZW5kKCIvY2F0YWxvZzEueG1sIikudG9GaWxlKCkudG9VUkkoKS50b1N0cmluZygpOwotCQl0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0JCQotCQkKLQkJCi0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJdGVzdENhdGFsb2cuc2F2ZSgpOwotCQkKLQkJLy8gcmVhZCBjYXRhbG9nIGZpbGUgZnJvbSB0aGUgc2F2ZWQgbG9jYXRpb24gYW5kIHRlc3QgaXRzIGNvbnRlbnQKLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cyIiwgdGVzdENhdGFsb2cuZ2V0TG9jYXRpb24oKSk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0KLQkJCi0JCQotCQkvLyB0ZXN0IHNhdmVkIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywKLQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93ZWJVUkwiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCS8vIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csCi0JCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoInllcyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMSIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCQkvLyB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLAotCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQkKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB0ZXN0QnVnMjM1NDQ1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAvLyByZWFkIGNhdGFsb2cKLSAgICAgIFN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9kZWxldGVtZWNhdGFsb2cueG1sIjsKLSAgICAgIFVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0gICAgICAgICAgICAgIGNhdGFsb2dGaWxlKTsKLSAgICAgIGFzc2VydE5vdE51bGwoY2F0YWxvZ1VybCk7Ci0gICAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0gICAgICBDYXRhbG9nIHRlc3RDYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImRlbGV0ZW1lY2F0YWxvZyIsIHJlc29sdmVkVVJMCi0gICAgICAgICAgICAgIC50b1N0cmluZygpKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotICAgICAgdGVzdENhdGFsb2cuc2V0QmFzZShyZXNvbHZlZFVSTC50b1N0cmluZygpKTsKLSAgICAgIC8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotCi0gICAgICAvLyB3cml0ZSBjYXRhbG9nCi0gICAgICBVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotICAgICAgICAgICAgICAiLyIpOwotICAgICAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKEZpbGVMb2NhdG9yLnJlc29sdmUocmVzdWx0c0ZvbGRlcikuZ2V0RmlsZSgpKTsKLSAgICAgIGZpbmFsIEZpbGUgY2F0YWxvZ0lPRmlsZSA9IHBhdGguYXBwZW5kKCIvZGVsZXRlbWVjYXRhbG9nLnhtbCIpLnRvRmlsZSgpOwotICAgICAgU3RyaW5nIHJlc3VsdENhdGFsb2dGaWxlID0gY2F0YWxvZ0lPRmlsZS50b1VSSSgpLnRvU3RyaW5nKCk7Ci0gICAgICB0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0gICAgICAKLSAgICAgIC8vIHdyaXRlIGNhdGFsb2cKLSAgICAgIHRlc3RDYXRhbG9nLnNhdmUoKTsKLSAgICAgIAotICAgICAgSVdvcmtzcGFjZVJ1bm5hYmxlIGRlbGV0ZU9wID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjYXRhbG9nSU9GaWxlLmRlbGV0ZSgpOwotICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJleGNlcHRpb24gdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBjYXRhbG9nIiwgZmFsc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihkZWxldGVPcCwgbnVsbCk7Ci0gICAgICBhc3NlcnRGYWxzZSgiY2F0YWxvZyBmaWxlIHdhcyBub3QgZGVsZXRlZCIsIGNhdGFsb2dJT0ZpbGUuZXhpc3RzKCkpOwotICAgIH0KLQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciB2b2lkIHJlYWQoSUNhdGFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZEFuZFdyaXRlQ29tcGxleENhdGFsb2coKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvL3JlYWQgY2F0YWxvZwotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cxMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNhdGFsb2cxMSIsIGJhc2UudG9TdHJpbmcoKSk7Ci0JCS8vQ2F0YWxvZ1JlYWRlci5yZWFkKGNhdGFsb2csIGNhdGFsb2dGaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0KLQkJLy8gdGVzdCBtYWluIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJLy9hc3NlcnRFcXVhbHMoImNhdDEiLCBjYXRhbG9nLmdldElkKCkpOwotCQlhc3NlcnRFcXVhbHMoMTMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VsZW1lbnRzKCkubGVuZ3RoKTsKLQotCQkvLyB3cml0ZSBjYXRhbG9nIHNvIHdlIGNhbiByZWFkIGl0IGJhY2sgaW4KLQkJVVJMIHJlc3VsdHNGb2xkZXIgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeSgKLQkJCQkiLyIpOwotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoRmlsZUxvY2F0b3IucmVzb2x2ZShyZXN1bHRzRm9sZGVyKS5nZXRGaWxlKCkpOwotCQlTdHJpbmcgcmVzdWx0Q2F0YWxvZ0ZpbGUgPSBwYXRoLmFwcGVuZCgiL2NhdGFsb2cxMS14LnhtbCIpLnRvRmlsZSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKLQkJY2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0JCQotCQkKLQkJCi0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJY2F0YWxvZy5zYXZlKCk7Ci0JCQotCQkvLyByZWFkIGNhdGFsb2cgZmlsZSBmcm9tIHRoZSBzYXZlZCBsb2NhdGlvbiBhbmQgdGVzdCBpdHMgY29udGVudAotCQljYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cyIiwgY2F0YWxvZy5nZXRMb2NhdGlvbigpKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQotCQkvLyB0ZXN0IG1haW4gY2F0YWxvZyAtIGNhdGFsb2cxLnhtbAotCQkvL2Fzc2VydEVxdWFscygiY2F0MSIsIGNhdGFsb2cuZ2V0SWQoKSk7Ci0JCWFzc2VydEVxdWFscygxMywgY2F0YWxvZy5nZXRDYXRhbG9nRWxlbWVudHMoKS5sZW5ndGgpOwotCQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJYXNzZXJ0RXF1YWxzKDIsIENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpLnNpemUoKSk7Ci0KLQkJLy8gIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJYXNzZXJ0RXF1YWxzKDIsIENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pLnNpemUoKSk7Ci0KLQkJLy8gIHRlc3QgdXJpIGVudHJpZXMKLQkJYXNzZXJ0RXF1YWxzKDEsIENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpLnNpemUoKSk7Ci0KLQkJLy8gIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQkKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nRW50cnkgPSAoSU5leHRDYXRhbG9nKW5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQkJCi0JCWFzc2VydEVxdWFscygiY2F0YWxvZy54bWwiLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJhY2RhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9UZXN0UGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0UGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdFBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdFBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzdC54bWwuY2F0YWxvZy50ZXN0LlRlc3RQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlc29sdmVQbHVnaW5Mb2NhdGlvbihTdHJpbmcgcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IGdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShwYXRoKTsKLQkJdXJsID0gRmlsZUxvY2F0b3IucmVzb2x2ZSh1cmwpOwotCQlyZXR1cm4gdXJsLmdldEZpbGUoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIzODRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLQotPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgotCi0gIDwhLS0gQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KLSAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIi8+Ci0KLSAgPCEtLSBFbmQgQ29uZmlndXJhYmxlIFByb3BlcnRpZXMgLS0+Ci0KLSAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KLSAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiR7YmFzZWRpcn1cLi5cLi4iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImJ2dHdvcmtzcGFjZSIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLSAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiLz4KLSAgPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZS1mb2xkZXIiIHZhbHVlPSIke2J2dHdvcmtzcGFjZX0vJHtwbHVnaW4tbmFtZX0iLz4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgIDx0c3RhbXAvPgotICAgICA8ZGVsZXRlPgotICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLioueG1sIi8+Ci0gICAgPC9kZWxldGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgPCEtLSBTdGFydCB3aXRoIGNsZWFuIGRhdGEgd29ya3NwYWNlIC0tPiAgCi0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0KLSAgICA8YW50IHRhcmdldD0iY29yZS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7d29ya3NwYWNlLWZvbGRlcn0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsLkFsbFRlc3RzIi8+Ci0gICAgPC9hbnQ+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzKi54bWwiLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgotICAgIDwvYW50PgotICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiZGMxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWJmNTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXNzZW1vZGVseG1sdGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuc3NlbW9kZWx4bWx0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWZmYmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM1NzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdiYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWM3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUyMmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI01vbiBBcHIgMTcgMDI6MDE6MzMgRURUIDIwMDYKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MAotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZjZkNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHNzZW1vZGVseG1sdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LnRlc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNsZWFudXAsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNsZWFudXAudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20sCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmZvcm1hdCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZm9ybWF0LnRlc3RmaWxlcy54bWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LnRlc3RmaWxlcy54bWwsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0zLjguMiwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuZWNsaXBzZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBjb20uaWJtLmljdQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZjRhNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc3NlbW9kZWx4bWx0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuc3NlbW9kZWx4bWx0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNzZW1vZGVseG1sdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy56aXAsXAotICAgICAgICAgICAgICAgcHJvamVjdHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3ZWVmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IFNTRSBNb2RlbCBYTUwgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDgxZDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZS5jb250ZW50VHlwZXMiPgotCQk8IS0tIGFzc29jaWF0ZSAuZnJhZ3ggZmlsZXMgd2l0aCB0aGUgWE1MIGNvbnRlbnQgdHlwZSAtLT4KLQkJPGZpbGUtYXNzb2NpYXRpb24KLQkJCWNvbnRlbnQtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkJCWZpbGUtZXh0ZW5zaW9ucz0iZnJhZ3giIC8+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uCi0JCWlkPSJUZXN0IgotCQlwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFwcGxpY2F0aW9ucyI+Ci0JCTxhcHBsaWNhdGlvbj4KLQkJCTxydW4KLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbC5DTVZpc2l0b3JUZXN0IiAvPgotCQk8L2FwcGxpY2F0aW9uPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5jYXRhbG9nQ29udHJpYnV0aW9ucyI+Ci0JCTxjYXRhbG9nQ29udHJpYnV0aW9uIGlkPSJkZWZhdWx0Ij4KLQkJCTx1cmkKLSAgICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3RTY2hlbWEueHNkIgotICAgICAgICAgICAgICAgIHVyaT0icHJvamVjdHRlc3RmaWxlcy90ZXN0ZmlsZXMvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QiIC8+Ci0JCTwvY2F0YWxvZ0NvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAKLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTURvY3VtZW50Q2FjaGVUZXN0UHJvamVjdC56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTURvY3VtZW50Q2FjaGVUZXN0UHJvamVjdC56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NzdkY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvQ01Eb2N1bWVudENhY2hlVGVzdFByb2plY3QuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvQ01WYWxpZGF0b3JUZXN0UHJvamVjdC56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTVZhbGlkYXRvclRlc3RQcm9qZWN0LnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkZTE0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9DTVZhbGlkYXRvclRlc3RQcm9qZWN0LnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2F0dHJpYnV0ZXNvcmRlcnRlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9hdHRyaWJ1dGVzb3JkZXJ0ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzI4ZDdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2F0dHJpYnV0ZXNvcmRlcnRlc3RmaWxlcy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy90ZXN0ZmlsZXMvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy90ZXN0ZmlsZXMvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NDNmN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvdGVzdGZpbGVzL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3RTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9HbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0U2NoZW1hIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3htbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODNhZDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3htbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvZG9jdW1lbnQvdGVzdC9Ob2RlSW1wbFRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC9kb2N1bWVudC90ZXN0L05vZGVJbXBsVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgyZGUzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC9kb2N1bWVudC90ZXN0L05vZGVJbXBsVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIEJhbGF6cyBCYW5mYWk6IEJ1ZyAxNTQ3MzcgZ2V0VXNlckRhdGEvc2V0VXNlckRhdGEgc3VwcG9ydCBmb3IgTm9kZQotICogICAgIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTQ3MzcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LnRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkF0dHJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50Lk5vZGVJbXBsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Vc2VyRGF0YUhhbmRsZXI7Ci0KLQotcHVibGljIGNsYXNzIE5vZGVJbXBsVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogQ2FzdHMgdG8gaW1wbGVtZW50YXRpb24gY2xhc3NlcyBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgbWV0aG9kcyBiZWluZwotCSAqIHRoZXJlIGlzbid0IHRoZSBpbnRlcmVzdGluZyBwYXJ0LCBqdXN0IHdoZXRoZXIgb3VyIGJlaGF2aW9yIHdpdGggdGhvc2UKLQkgKiBtZXRob2RzIGlzIGNvcnJlY3QuCi0JICovCQotCi0JTm9kZUltcGwgZWxlbWVudDsKLQlBdHRySW1wbCBhdHRyaWJ1dGU7Ci0JTm9kZUltcGwgZGVzdGluYXRpb25Ob2RlOwotCURvY3VtZW50IGRvY3VtZW50OwotCQotCUVsZW1lbnQgZWxlbWVudFRvSW1wb3J0OwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVk9ImtleSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFPSJ2YWx1ZSI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWTI9ImtleTIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRTI9InZhbHVlMiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCQotCQotCS8qKgotICAgICAqIFNldHMgdXAgdGhlIHRlc3QgZml4dHVyZS4gCi0gICAgICogKENhbGxlZCBiZWZvcmUgZXZlcnkgdGVzdCBjYXNlIG1ldGhvZC4pIAotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsgCi0gICAgICAgIAotICAgIAlET01Nb2RlbEltcGwgbW9kZWwgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0gICAgCWRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLSAgICAJZWxlbWVudCA9IChOb2RlSW1wbClkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0ZWxlbWVudCIpOwotICAgIAlhdHRyaWJ1dGUgPSAoQXR0ckltcGwpZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJhdHRyaWJ1dGUiKTsKLSAgICB9IAotCQotICAgIC8qCi0gICAgICogVGVzdCBmb3IgbnVsbDsKLSAgICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEwKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuZ2V0VXNlckRhdGEobnVsbCkpOwotCX0KLSAgICAKLQkvKgotCSAqIFRlc3QgZm9yIG9uZSBrZXkvdmFsdWUKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGExKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUsZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGF0dHJpYnV0ZS5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0gICAgLyoKLSAgICAgKiBUZXN0IGZvciBtdWx0aXBsZSBub2RlcwotICAgICAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRVc2VyRGF0YTIoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSxlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZMiwgVkFMVUUyLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKFZBTFVFMixhdHRyaWJ1dGUuZ2V0VXNlckRhdGEoS0VZMikpOwotCX0KLQkKLQkvKgotCSAqIFRlc3QgZm9yIG11bHRpcGxlIGtleXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEzKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWTIsIFZBTFVFMiwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSxlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUyLGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZMikpOwotCX0KLQotCS8qCi0JICogVGVzdCBmb3IgbnVsbCBrZXkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGExKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5zZXRVc2VyRGF0YShudWxsLCBWQUxVRSwgbnVsbCkpOwotCX0KLQotCS8qCi0JICogVGVzdCBmb3IgbnVsbCBkYXRhIHdpdGggbm8gcHJldmlvdXMgdmFsdWUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGEyKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIG51bGwsIG51bGwpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBvdmVyd3JpdGluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRVc2VyRGF0YTMoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRTIsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUyLCBlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCX0KLQkKLQkvKiAKLQkgKiBUZXN0IGZvciBkZWxldGluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRVc2VyRGF0YTQoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIG51bGwsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBub3RpZnlpbmcgdGhlIFVzZXJEYXRhSGFuZGxlcj1udWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjAoKSB7Ci0JCQotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWRlc3RpbmF0aW9uTm9kZT0oTm9kZUltcGwpYXR0cmlidXRlLmNsb25lTm9kZSh0cnVlKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBub3RpZnlpbmcgdGhlIFVzZXJEYXRhSGFuZGxlciB3aGVuIGNsb25pbmcgYW4gYXR0cmlidXRlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjEoKSB7Ci0JCQotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbmV3IFVzZXJEYXRhSGFuZGxlcigpewotCi0JCQlwdWJsaWMgdm9pZCBoYW5kbGUoc2hvcnQgb3BlcmF0aW9uLCBTdHJpbmcga2V5LCBPYmplY3QgZGF0YSwgTm9kZSBzcmMsIE5vZGUgZHN0KSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKFVzZXJEYXRhSGFuZGxlci5OT0RFX0NMT05FRCwgb3BlcmF0aW9uKTsKLQkJCQlhc3NlcnRFcXVhbHMoVkFMVUUsIGRhdGEpOwotCQkJCWFzc2VydEVxdWFscyhLRVksIGtleSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKHNyYywgYXR0cmlidXRlKTsgCi0JCQkJCi0JCQkJaWYoREVCVUcpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJPcGVyYXRpb246ICIrb3BlcmF0aW9uKyIgS2V5OiIrIGtleSAKLQkJCQkJCSsgIiBPYmplY3Q6IitkYXRhKyIgU291cmNlTm9kZToiK3NyYy5nZXRMb2NhbE5hbWUoKSsiIERlc3RpbmF0aW9uTm9kZToiK2RzdC5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCi0JCQl9Ci0JCX0pOwotCQkvL2V2ZW50IG9jY3VycyBiZWZvcmUgdGhlIGRlc3RpbmF0aW9uTm9kZSByZXR1cm5zLi4uLgotCQlkZXN0aW5hdGlvbk5vZGU9KEF0dHJJbXBsKWF0dHJpYnV0ZS5jbG9uZU5vZGUodHJ1ZSk7Ci0JfQotCQotCS8qCi0JICogVGVzdCBmb3Igbm90aWZ5aW5nIHRoZSBVc2VyRGF0YUhhbmRsZXIgd2hlbiBpbXBvcnRpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm90aWZ5VXNlckRhdGFIYW5kbGVyMigpIHsKLSAgICAJZWxlbWVudFRvSW1wb3J0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRWxlbWVudFRvSW1wb3J0Iik7Ci0gICAgCSgoTm9kZUltcGwpZWxlbWVudFRvSW1wb3J0KS5zZXRVc2VyRGF0YShLRVksIFZBTFVFLCBuZXcgVXNlckRhdGFIYW5kbGVyKCl7Ci0KLQkJCXB1YmxpYyB2b2lkIGhhbmRsZShzaG9ydCBvcGVyYXRpb24sIFN0cmluZyBrZXksIE9iamVjdCBkYXRhLCBOb2RlIHNyYywgTm9kZSBkc3QpIHsKLQotCQkJCS8vc2VlIGlmIE5PREUuSU1QT1JURUQgbm90aWZpY2F0aW9uIG9jY3VycyB3aXRoIHRoZSByaWdodAotCQkJCS8vcGFyYW1ldGVycwotCQkJCWlmIChvcGVyYXRpb249PVVzZXJEYXRhSGFuZGxlci5OT0RFX0lNUE9SVEVEKSB7CQotCQkJCWFzc2VydEVxdWFscyhWQUxVRSwgZGF0YSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKEtFWSwga2V5KTsKLQkJCQlhc3NlcnRFcXVhbHMoc3JjLCBlbGVtZW50VG9JbXBvcnQpOwotCQkJCWFzc2VydEVxdWFscyhkc3QsIG51bGwpOyAgCi0JCQkJaWYoREVCVUcpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJPcGVyYXRpb246ICIrb3BlcmF0aW9uKyIgS2V5OiIrIGtleSAKLQkJCQkJCSsgIiBPYmplY3Q6IitkYXRhKyIgU291cmNlTm9kZToiK3NyYy5nZXRMb2NhbE5hbWUoKSsiIERlc3RpbmF0aW9uTm9kZToiK2RzdCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50VG9JbXBvcnQsIHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNjA2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCi0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMwNzQ5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQudGVzdC5Ob2RlSW1wbFRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jYWNoZS5HbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jbGVhbnVwLlRlc3RDbGVhbnVwUHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwuQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLlRlc3RBdHRyaWJ1dGVzT3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbC5UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5HZXREb2N1bWVudFJlZ2lvbnNUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0U3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UZXN0WE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlRyYW5zaXRpb25UZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLkF0dHJJbXBsVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5FbGVtZW50SW1wbFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTmFtZVZhbGlkYXRvclRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTm9kZUNvbnRhaW5lclRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTm9kZUxpc3RJbXBsVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5SZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQuVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsc0Zyb21GaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5yYW5nZS5UZXN0UmFuZ2VDb21wYXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LlRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUw7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBDb3JlIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbHNGcm9tRmlsZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RYTUxNb2RlbExvYWRlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFhNTERvY3VtZW50TG9hZGVyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZERvY3VtZW50LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShGaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxNYW5hZ2VyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZE1vZGVsLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOYW1lVmFsaWRhdG9yVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVsZW1lbnRJbXBsVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEF0dHJJbXBsVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE5vZGVMaXN0SW1wbFRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOb2RlQ29udGFpbmVyVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRyYW5zaXRpb25UZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFJhbmdlQ29tcGFyZS5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHZXREb2N1bWVudFJlZ2lvbnNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOb2RlSW1wbFRlc3RDYXNlLmNsYXNzKSk7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDbGVhbnVwUHJvY2Vzc29yWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0QXR0cmlidXRlc09yZGVyLmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdC5jbGFzcykpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0LmNsYXNzKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmYxZGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjMyMDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1hNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRW5jb2RlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBmYWxzZTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gdHJ1ZTsKLQotCQlTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJaWYgKCEiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpIHsKLQkJCW9yaWdpbmFsVmFsdWUgPSBCb29sZWFuLnZhbHVlT2Yob3JpZ2luYWxTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCQkJZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQl9Ci0JCW5vZGUucHV0Qm9vbGVhbihwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gbm9kZS5nZXRCb29sZWFuKHByZWZLZXksIHRydWUpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCQlub2RlLnB1dChwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiIik7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsVmFsdWUpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2VzIGJ5IG1ha2luZyBzdXJlIGRvY3VtZW50IGNyZWF0ZWQKLQkgKiBmb2xsb3dzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGltaXRlclByZWZlcmVuY2VzKCkgewotCQkvLyBjaGVjayBpZiBjb250ZW50IHR5cGUgcHJlZmVyZW5jZXMgbWF0Y2gKLQkJU3RyaW5nIHByZWZlcnJlZERlbGltaXRlciA9IENvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcy5nZXRQcmVmZXJyZWROZXdMaW5lRGVsaW1pdGVyKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlTdHJpbmcgZ2F0ZXdheURlbGltaXRlciA9IHByZWZzLmdldChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMgYW5kIENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5IHByZWZlcmVuY2VzIGRvIG5vdCBtYXRjaCIsIGdhdGV3YXlEZWxpbWl0ZXIsIHByZWZlcnJlZERlbGltaXRlcik7Ci0KLQkJLy8gc2V0IGEgcGFydGljdWxhciBsaW5lIGRlbGltaXRlcgotCQlwcmVmcy5wdXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuTEYpOwotCi0JCS8vIGNyZWF0ZSBkb2N1bWVudAotCQlYTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSUVuY29kZWREb2N1bWVudCBkb2N1bWVudCA9IGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJU3RyaW5nIGRvY3VtZW50RGVsaW1pdGVyID0gZG9jdW1lbnQuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCi0JCS8vIHZlcmlmeSBkZWxpbWl0ZXIgaW4gZG9jdW1lbnQgbWF0Y2hlcyBwcmVmZXJlbmNlCi0JCWFzc2VydEVxdWFscygiRGVsaW1pdGVyIGluIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHByZWZlcmVuY2UiLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5TVFJJTkdfTEYsIGRvY3VtZW50RGVsaW1pdGVyKTsKLQotCQkvLyByZXR1cm4gdG8gb3JpZ2luYWwgcHJlZmVyZW5jZQotCQlwcmVmcy5yZW1vdmUoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2FjaGUvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2FjaGUvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzkzN2JlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NhY2hlL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY2FjaGU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuQ01Eb2N1bWVudE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5DTURvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIEdsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpJUF9GSUxFX05BTUUgPSAiQ01Eb2N1bWVudENhY2hlVGVzdFByb2plY3QuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiQ01Eb2N1bWVudENhY2hlVGVzdFByb2plY3QiOyAvLyROT04tTkxTLTEkCi0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIFpJUF9GSUxFX05BTUUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQl9Ci0KLQkvKgotCSAqIFRlc3QgZGVzY3JpcHRpb246Ci0JICogIC0gRW5hYmxlIGdsb2JhbCBjYWNoZS4KLQkgKiAgLSBTY2hlbWEgR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdFNjaGVtYS54c2QgaXMgY29udHJpYnV0ZWQgdG8gdGhlIHN5c3RlbSBjYXRhbG9nLgotCSAqICAtIExvYWQgZG9jdW1lbnRzICJHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0MS54bWwiIGFuZCAiR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdDEueG1sIi4KLQkgKiAgLSBWZXJpZnkgdGhhdCB0aGUgYXNzb2NpYXRlZCBDTURvY3VtZW50cyBhcmUgdGhlIHNhbWUgKGNhY2hlZCkuCi0JICogIC0gTG9hZCBkb2N1bWVudHMgImRvY3VtZW50MS54bWwiIGFuZCAiZG9jdW1lbnQyLnhtbCIgKGxvY2FsIHNjaGVtYSwgbm90IGluIGNhdGFsb2cpLiAgCi0JICogIC0gVmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgQ01Eb2N1bWVudHMgYXJlIGRpZmZlcmVudCAobm90IGNhY2hlZCwgYXMgdGhlIHNjaGVtYSBpcyBub3QgaW4gc3lzdGVtIGNhdGFsb2cpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHbG9iYWxDTURvY3VtZW50Q2FjaGVFbmFibGVkKCkgewotCQkKLQkJLy8gRW5zdXJlIHRoZSBnbG9iYWwgY2FjaGUgaXMgZGlzYWJsZWQuCi0JCXNldEdsb2JhbENhY2hlRW5hYmxlZCh0cnVlKTsKLQkJCi0JCS8vIExvYWQgIndlYjEueG1sIiBhbmQgIndlYjIueG1sIgotCQlDTURvY3VtZW50IGdsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3RfMSA9IGdldENNRG9jdW1lbnRGcm9tWE1MRmlsZShQUk9KRUNUX05BTUUgKyAiL0dsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QxLnhtbCIpOyAvLyROT04tTkxTLTEkCi0JCUNNRG9jdW1lbnQgZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8yID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdDIueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCS8vIEVuc3VyZSBDTURvY3VtZW50cyBhcmUgZGlmZmVyZW50LgotCQlhc3NlcnRFcXVhbHMoZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8xLCBnbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0XzIpOwotCQkKLQkJLy8gTG9hZCAiZG9jdW1lbnQxLnhtbCIgYW5kICJkb2N1bWVudDIueG1sIgotCQlDTURvY3VtZW50IGxvY2FsQ01Eb2N1bWVudF8xID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvZG9jdW1lbnQxLnhtbCIpOyAvLyROT04tTkxTLTEkCi0JCUNNRG9jdW1lbnQgbG9jYWxDTURvY3VtZW50XzIgPSBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoUFJPSkVDVF9OQU1FICsgIi9kb2N1bWVudDIueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCS8vIEVuc3VyZSBDTURvY3VtZW50cyBhcmUgZGlmZmVyZW50LgotCQlhc3NlcnROb3RTYW1lKGxvY2FsQ01Eb2N1bWVudF8xLCBsb2NhbENNRG9jdW1lbnRfMik7Ci0JfQotCi0JLyoKLQkgKiBUZXN0IGRlc2NyaXB0aW9uOgotCSAqICAtIERpc2FibGUgZ2xvYmFsIGNhY2hlLgotCSAqICAtIFNjaGVtYSBHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0U2NoZW1hLnhzZCBpcyBjb250cmlidXRlZCB0byB0aGUgc3lzdGVtIGNhdGFsb2cuCi0JICogIC0gTG9hZCBkb2N1bWVudHMgIkdsb2JhbENNRG9jdW1lbnRDYWNoZVRlc3QxLnhtbCIgYW5kICJHbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0MS54bWwiLgotCSAqICAtIFZlcmlmeSB0aGF0IHRoZSBhc3NvY2lhdGVkIENNRG9jdW1lbnRzIGFyZSBkaWZmZXJlbnQgKG5vdCBjYWNoZWQpLgotCSAqICAtIExvYWQgZG9jdW1lbnRzICJkb2N1bWVudDEueG1sIiBhbmQgImRvY3VtZW50Mi54bWwiLiAgKGxvY2FsIHNjaGVtYSwgbm90IGluIGNhdGFsb2cpLiAgCi0JICogIC0gVmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgQ01Eb2N1bWVudHMgYXJlIGRpZmZlcmVudCAobm90IGNhY2hlZCwgYXMgdGhlIHNjaGVtYSBpcyBub3QgaW4gc3lzdGVtIGNhdGFsb2cpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHbG9iYWxDTURvY3VtZW50Q2FjaGVEaXNhYmxlZCgpIHsKLQkJCi0JCS8vIEVuc3VyZSB0aGUgZ2xvYmFsIGNhY2hlIGlzIGRpc2FibGVkLgotCQlzZXRHbG9iYWxDYWNoZUVuYWJsZWQoZmFsc2UpOwotCQkKLQkJLy8gTG9hZCAid2ViMS54bWwiIGFuZCAid2ViMi54bWwiCi0JCUNNRG9jdW1lbnQgZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8xID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvR2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdDEueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJQ01Eb2N1bWVudCBnbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0XzIgPSBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoUFJPSkVDVF9OQU1FICsgIi9HbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0Mi54bWwiKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJLy8gRW5zdXJlIENNRG9jdW1lbnRzIGFyZSBkaWZmZXJlbnQuCi0JCWFzc2VydE5vdFNhbWUoZ2xvYmFsQ01Eb2N1bWVudENhY2hlVGVzdF8xLCBnbG9iYWxDTURvY3VtZW50Q2FjaGVUZXN0XzIpOwotCQkKLQkJLy8gTG9hZCAiZG9jdW1lbnQxLnhtbCIgYW5kICJkb2N1bWVudDIueG1sIgotCQlDTURvY3VtZW50IGxvY2FsQ01Eb2N1bWVudF8xID0gZ2V0Q01Eb2N1bWVudEZyb21YTUxGaWxlKFBST0pFQ1RfTkFNRSArICIvZG9jdW1lbnQxLnhtbCIpOyAvLyROT04tTkxTLTEkCi0JCUNNRG9jdW1lbnQgbG9jYWxDTURvY3VtZW50XzIgPSBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoUFJPSkVDVF9OQU1FICsgIi9kb2N1bWVudDIueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCS8vIEVuc3VyZSBDTURvY3VtZW50cyBhcmUgZGlmZmVyZW50LgotCQlhc3NlcnROb3RTYW1lKGxvY2FsQ01Eb2N1bWVudF8xLCBsb2NhbENNRG9jdW1lbnRfMik7Ci0JCQotCX0KLQotCXByaXZhdGUgQ01Eb2N1bWVudCBnZXRDTURvY3VtZW50RnJvbVhNTEZpbGUoU3RyaW5nIGRvY3VtZW50UGF0aCkgewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGRvY3VtZW50UGF0aCkpOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgCXN0cnVjdHVyZWRNb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9ICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQlNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGRvY3VtZW50KTsKLQkJCUNNRG9jdW1lbnRNYW5hZ2VyIGNtRG9jdW1lbnRNYW5hZ2VyID0gbW9kZWxRdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJQ01Eb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgQ01Eb2N1bWVudExvYWRlcihkb2N1bWVudCwgY21Eb2N1bWVudE1hbmFnZXIpOwotCQkJbG9hZGVyLmxvYWRDTURvY3VtZW50cygpOwotCQkJY21Eb2N1bWVudCA9IG1vZGVsUXVlcnkuZ2V0Q29ycmVzcG9uZGluZ0NNRG9jdW1lbnQoZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCkpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7ZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpO30KLQkgICAgZmluYWxseSB7Ci0JICAgIAlpZiAoc3RydWN0dXJlZE1vZGVsICE9IG51bGwpIHsKLQkJCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JICAgIAl9Ci0JICAgIH0KLQkgICAgcmV0dXJuIGNtRG9jdW1lbnQ7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBzZXRHbG9iYWxDYWNoZUVuYWJsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQlQcmVmZXJlbmNlcyBwbHVnaW5QcmVmZXJlbmNlcyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXBsdWdpblByZWZlcmVuY2VzLnNldERlZmF1bHQoWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5DTURPQ1VNRU5UX0dMT0JBTF9DQUNIRV9FTkFCTEVELCB2YWx1ZSk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC9UZXN0Q2xlYW51cFByb2Nlc3NvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC9UZXN0Q2xlYW51cFByb2Nlc3NvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTQ4ZjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvVGVzdENsZWFudXBQcm9jZXNzb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNsZWFudXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DbGVhbnVwUHJvY2Vzc29yWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENsZWFudXBQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIENsZWFudXBQcm9jZXNzb3JYTUwgY2xlYW51cDsKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQljbGVhbnVwID0gbmV3IENsZWFudXBQcm9jZXNzb3JYTUwoKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RDbGVhbnVwUHJvY2Vzc29yWE1MKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBOb0hlYWRlcigpIHsKLQkJU3RyaW5nIHBhdGggPSAidGVzdGZpbGVzL25vaGVhZGVyLnhtbCI7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRNb2RlbEZvckVkaXQocGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJDb3VsZCBub3QgbG9hZCBtb2RlbCBmb3IgWyIgKyBwYXRoICsgIl0iLCBtb2RlbCk7Ci0KLQkJCWNsZWFudXAuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCkuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJCWNsZWFudXAuY2xlYW51cE1vZGVsKG1vZGVsKTsKLQotCQkJSW5kZXhlZFJlZ2lvbiByZWdpb24gPSBtb2RlbC5nZXRJbmRleGVkUmVnaW9uKDApOwotCQkJYXNzZXJ0VHJ1ZSgiRmlyc3QgcmVnaW9uIGlzIG5vdCBhIG5vZGUiLCByZWdpb24gaW5zdGFuY2VvZiBOb2RlKTsKLQotCQkJTm9kZSBub2RlID0gKE5vZGUpIHJlZ2lvbjsKLQkJCWFzc2VydFRydWUoIkZpcnN0IHJlZ2lvbiBpcyBub3QgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIiwgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsKLQotCQkJUHJvY2Vzc2luZ0luc3RydWN0aW9uIHBpID0gKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikgbm9kZTsKLQkJCWFzc2VydEVxdWFscygiTm9kZSBpcyBub3QgYW4gWE1MIGRlY2xhcmF0aW9uIiwgInhtbCIsIHBpLmdldFRhcmdldCgpKTsKLQkJCVN0cmluZyBlbmNvZGluZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLk9VVFBVVF9DT0RFU0VUKTsKLQkJCWFzc2VydEVxdWFscygidmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIiArIGVuY29kaW5nICsgIlwiIiwgcGkuZ2V0RGF0YSgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBGaXhEZWNsYXJhdGlvbigpIHsKLQkJU3RyaW5nIHBhdGggPSAidGVzdGZpbGVzL2ZpeGRlY2wueG1sIjsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldE1vZGVsRm9yRWRpdChwYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBsb2FkIG1vZGVsIGZvciBbIiArIHBhdGggKyAiXSIsIG1vZGVsKTsKLQotCQkJY2xlYW51cC5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKS5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQkJY2xlYW51cC5jbGVhbnVwTW9kZWwobW9kZWwpOwotCi0JCQlJbmRleGVkUmVnaW9uIHJlZ2lvbiA9IG1vZGVsLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0JCQlhc3NlcnRUcnVlKCJGaXJzdCByZWdpb24gaXMgbm90IGEgbm9kZSIsIHJlZ2lvbiBpbnN0YW5jZW9mIE5vZGUpOwotCi0JCQlOb2RlIG5vZGUgPSAoTm9kZSkgcmVnaW9uOwotCQkJYXNzZXJ0VHJ1ZSgiRmlyc3QgcmVnaW9uIGlzIG5vdCBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24iLCBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOwotCi0JCQlQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKSBub2RlOwotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIGlzIG5vdCBhbiBYTUwgZGVjbGFyYXRpb24iLCAieG1sIiwgcGkuZ2V0VGFyZ2V0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKCJ2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJJU08tODg1OS0xXCIiLCBwaS5nZXREYXRhKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jbGVhbnVwL3Rlc3RmaWxlcy9maXhkZWNsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvdGVzdGZpbGVzL2ZpeGRlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNmYjRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvdGVzdGZpbGVzL2ZpeGRlY2wueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLQotCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci0KLTxyb290PgotCTxub2RlIGlkPSJjb250ZW50Ij48L25vZGU+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC90ZXN0ZmlsZXMvbm9oZWFkZXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY2xlYW51cC90ZXN0ZmlsZXMvbm9oZWFkZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjI4ODE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NsZWFudXAvdGVzdGZpbGVzL25vaGVhZGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHJvb3Q+Ci0JPGRhdGEgaWQ9IjEiPjwvZGF0YT4KLQk8ZGF0YSBpZD0iMiI+PC9kYXRhPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFiZmY0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01QcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUFueUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Db250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01EYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRW50aXR5RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci0KLQotcHVibGljIGNsYXNzIENNUHJpbnRlciBleHRlbmRzIENNVmlzaXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nQnVmZmVyIGZTdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIHByb3RlY3RlZCBWZWN0b3IgdmlzaXRlZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOyAKLSAgICAKLSAgLyoqKioqKiAgIGZvcm1hdHRpbmcgICAgKioqKioqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGluZGVudCA9ICIiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIHZvaWQgaW5jcmVtZW50SW5kZW50KCkKLSAgewotICAgIGluZGVudCA9IGluZGVudCArICIgICI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGRlY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnQgPSBpbmRlbnQuc3Vic3RyaW5nKDAsIGluZGVudC5sZW5ndGgoKS0yKTsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRDTU5vZGUoU3RyaW5nIGZpbGVuYW1lLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgdmlzaXRDTU5vZGUoY21ub2RlKTsKLSAgICB0cnkgCi0gICAgewotICAgICAgRmlsZU91dHB1dFN0cmVhbSBmaWxlU3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpOwotICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZmlsZVN0cmVhbSk7Ci0gICAgICB3cml0ZXIud3JpdGUoZlN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLSAgICAgIHdyaXRlci5mbHVzaCgpOwotICAgICAgZmlsZVN0cmVhbS5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgIAlMb2dnZXIubG9nRXhjZXB0aW9uKCJQTVByaW50ZXIgRGVidWc6ICIsIGUpOwotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUFueUVsZW1lbnQoQ01BbnlFbGVtZW50IGFueUVsZW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQW55RWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGFueUVsZW1lbnQpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+L24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBhbnlFbGVtZW50KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUFueUVsZW1lbnQ+L24iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKENNQXR0cmlidXRlRGVjbGFyYXRpb24gYWQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQXR0cmlidXRlRGVjbGFyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBhZCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGFkKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICB2aXNpdENNTm9kZShhZC5nZXRBdHRyVHlwZSgpKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUF0dHJpYnV0ZURlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01EYXRhVHlwZShDTURhdGFUeXBlIGRhdGFUeXBlKQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTURhdGFUeXBlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZGF0YVR5cGUpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8SW1wbGllZFZhbHVlIGtpbmQ9XCIiICsgZGF0YVR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpICsgIlwiPiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChkYXRhVHlwZS5nZXRJbXBsaWVkVmFsdWUoKSArICI8L0ltcGxpZWRWYWx1ZT5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRFbnVtZXJhdGlvbihmU3RyaW5nQnVmZmVyLCBkYXRhVHlwZS5nZXRFbnVtZXJhdGVkVmFsdWVzKCkpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRGF0YVR5cGU+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTURvY3VtZW50KENNRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBkb2N1bWVudCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICAvLyAgICBwcmludEVudGl0aWVzKHNiLCBkb2N1bWVudC5nZXRFbnRpdGllcygpKTsgCi0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGRvY3VtZW50KTsKLQotICAgIENNTmFtZWROb2RlTWFwIG1hcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgaW50IHNpemUgPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobWFwLml0ZW0oaSkpOwotICAgIH0KLQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRG9jdW1lbnQ+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNR3JvdXAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBncm91cCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBDTU5vZGVMaXN0IG5vZGVMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotICAgIGludCBzaXplID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobm9kZUxpc3QuaXRlbShpKSk7Ci0gICAgfQotCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01Hcm91cD5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGVkKQotICB7Ci0gICAgaWYgKCF2aXNpdGVkRWxlbWVudHMuY29udGFpbnMoZWQpKQotICAgIHsKLSAgICAgIHZpc2l0ZWRFbGVtZW50cy5hZGQoZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBlZCk7Ci0KLSAgICAgIENNTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBlZC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpbnQgc2l6ZSA9IG5vZGVNYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgIHsKLSAgICAgICAgdmlzaXRDTU5vZGUobm9kZU1hcC5pdGVtKGkpKTsKLSAgICAgIH0KLQotICAgICAgdmlzaXRDTU5vZGUoZWQuZ2V0Q29udGVudCgpKTsKLQotICAgICAgQ01EYXRhVHlwZSBkYXRhVHlwZSA9IGVkLmdldERhdGFUeXBlKCk7Ci0gICAgICBpZiAoZGF0YVR5cGUgIT0gbnVsbCkKLSAgICAgICAgdmlzaXRDTU5vZGUoZGF0YVR5cGUpOwotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRWxlbWVudERlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW51bWVyYXRpb24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmdbXSB2YWx1ZXMpCi0gIHsKLSAgICBpZiAoKHZhbHVlcyAhPSBudWxsKSAmJiAodmFsdWVzLmxlbmd0aCA+IDApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudW1lcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8dmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxWYWx1ZT4iICsgdmFsdWVzW2ldICsgIjwvVmFsdWVzPlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPC9FbnVtZXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludEF0dHJpYnV0ZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgaWYgKGNtbm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCgiIG5vZGVOYW1lPVwiIiArIGNtbm9kZS5nZXROb2RlTmFtZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgc2IuYXBwZW5kKCIgbm9kZVR5cGU9XCIiICsgY21ub2RlLmdldE5vZGVUeXBlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUNvbnRlbnQpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIG1pbk9jY3VyPVwiIiArICgoQ01Db250ZW50KWNtbm9kZSkuZ2V0TWluT2NjdXIoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgc2IuYXBwZW5kKCIgbWF4T2NjdXI9XCIiICsgKChDTUNvbnRlbnQpY21ub2RlKS5nZXRNYXhPY2N1cigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNQW55RWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgbmFtZXNwYWNlVVJJPVwiIiArICgoQ01BbnlFbGVtZW50KWNtbm9kZSkuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgdWFzYWdlPVwiIiArICgoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiljbW5vZGUpLmdldFVzYWdlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIHNiLmFwcGVuZCgiIGRlZmF1bHRWYWx1ZT1cIiIgKyAoKENNQXR0cmlidXRlRGVjbGFyYXRpb24pY21ub2RlKS5nZXREZWZhdWx0VmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTURhdGFUeXBlKQotICAgICAgeyAKLSAgICAgICAgc2IuYXBwZW5kKCIgaW5zdGFuY2VWYWx1ZT1cIiIgKyAoKENNRGF0YVR5cGUpY21ub2RlKS5nZW5lcmF0ZUluc3RhbmNlVmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUVudGl0eURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSAoKENNRW50aXR5RGVjbGFyYXRpb24pY21ub2RlKS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiXCIiKSA9PSAtMSkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgZWxzZSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUdyb3VwKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBvcGVyYXRvcj1cIiIgKyAoKENNR3JvdXApY21ub2RlKS5nZXRPcGVyYXRvcigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBjb250ZW50VHlwZT1cIiIgKyAoKENNRWxlbWVudERlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0Q29udGVudFR5cGUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW50aXRpZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5hbWVkTm9kZU1hcCBlbnRpdGllcykKLSAgewotICAgIGlmICgoZW50aXRpZXMgIT0gbnVsbCkgJiYgKGVudGl0aWVzLmdldExlbmd0aCgpPjApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlbnRpdGllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIENNRW50aXR5RGVjbGFyYXRpb24gZW50aXR5ID0gKENNRW50aXR5RGVjbGFyYXRpb24paS5uZXh0KCk7Ci0gICAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0eSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByaW50QXR0cmlidXRlcyhzYiwgZW50aXR5KTsKLSAgICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvRW50aXRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHByaW50UHJvcGVydGllcyhTdHJpbmdCdWZmZXIgc2IsIENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzKGNtbm9kZSk7Ci0gICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8cHJvcGVydGllcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvcGVydHkgPSAoU3RyaW5nKXByb3BlcnRpZXMuZ2V0KGkpOwotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydHkgbmFtZT1cIiIgKyBwcm9wZXJ0eSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICAgaWYgKGNtbm9kZS5zdXBwb3J0cyhwcm9wZXJ0eSkpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIHN1cHBvcnRzPVwidHJ1ZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgc3VwcG9ydHM9XCJmYWxzZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIE9iamVjdCB2YWx1ZSA9IGNtbm9kZS5nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIChTdHJpbmcpdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUuZ2V0Q2xhc3MoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGVsc2Ugc2IuYXBwZW5kKCIgdmFsdWU9XCJudWxsXCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvUHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQcm9wZXJ0aWVzKENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICBpZiAoY21ub2RlICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydGllcy5hZGQoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImRvY3VtZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy91c2VzTG9jYWxFbGVtZW50RGVjbGFyYXRpb25zIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvaXNOYW1lU3BhY2VBd2FyZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25zUHJlZml4UXVhbGlmaWNhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25pbGxhYmxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbW9mTm90aWZpZXIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoInNwZWMiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01FbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvZGVmaW5pdGlvbkluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2RlZmluaXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiWFNJVHlwZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiRGVyaXZlZEVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vIHByb3BlcnRpZXMuYWRkKCJTdWJzdGl0dXRpb25Hcm91cCIpOyBDdXJycmVudGx5IGJyb2tlbiBmb3IgbmV4dGVkIHhzZCBmaWxlcwotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiQWJzdHJhY3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRG9jdW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdGFyZ2V0TmFtZXNwYWNlVVJJIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9pbXBvcnRlZE5hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2VsZW1lbnRGb3JtRGVmYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJhbm5vdGF0aW9uTWFwIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi19Ci0KLSAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThlNjY5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01VdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01WaXNpdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBDTVV0aWxpdHkKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgLyoqCi0gICAqIHJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCBvciBhbnkgb2YgaXRzIGFuY2VzdG9yIGdyb3VwIG5vZGVzIGFyZSByZXBlYXRhYmxlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2RlT3JBbmNlc3Rvckdyb3VwUmVwZWF0YWJsZShDTUNvbnRlbnQgY29udGVudCwgQ01Ob2RlIGNoaWxkKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIC8vIHNpbmNlIHdlIGNhbid0IHdhbGsgdXAgdGhlIENNTm9kZSB0cmVlICh3aHkgeW91IGFzaz8gLi4uIGl0cyBhIGxvbmcgc3RvcnkpCi0gICAgLy8gd2Ugd2FsayBkb3duIHRoZSB0cmVlIHRvIGNvbnNpZGVyIHRoZSBjaGlsZCdzIHBhcmVudCBub2RlJ3MKLSAgICAvLwotICAgIGJvb2xlYW4gcmVzdWx0ID0gaXNSZXBlYXRhYmxlKGNoaWxkKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICB7Ci0gICAgICBDYW5SZXBlYXRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgQ2FuUmVwZWF0VmlzaXRvcihjb250ZW50LCBjaGlsZCk7Ci0gICAgICB2aXNpdG9yLnZpc2l0Q01Ob2RlKGNvbnRlbnQpOwotICAgICAgcmVzdWx0ID0gdmlzaXRvci5nZXRSZXN1bHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8qKgotICAgKiByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQgaXMgcmVwZWF0YWJsZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9kZVJlcGVhdGFibGUoQ01Db250ZW50IGNvbnRlbnQsIENNTm9kZSBjaGlsZCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBzaW5jZSB3ZSBjYW4ndCB3YWxrIHVwIHRoZSBDTU5vZGUgdHJlZSAod2h5IHlvdSBhc2s/IC4uLiBpdHMgYSBsb25nIHN0b3J5KQotICAgIC8vIHdlIHdhbGsgZG93biB0aGUgdHJlZSB0byBjb25zaWRlciB0aGUgY2hpbGQncyBwYXJlbnQgbm9kZSdzCi0gICAgLy8KLSAgICBib29sZWFuIHJlc3VsdCA9IGlzUmVwZWF0YWJsZShjaGlsZCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgewotICAgICAgSXNSZXBlYXRhYmxlVmlzaXRvciB2aXNpdG9yID0gbmV3IElzUmVwZWF0YWJsZVZpc2l0b3IoY29udGVudCwgY2hpbGQpOwotICAgICAgdmlzaXRvci52aXNpdENNTm9kZShjb250ZW50KTsKLSAgICAgIHJlc3VsdCA9IHZpc2l0b3IuZ2V0UmVzdWx0KCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZXBlYXRhYmxlKENNTm9kZSBjaGlsZCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBDTUNvbnRlbnQpCi0gICAgewotICAgICAgQ01Db250ZW50IGNvbnRlbnQgPSAoQ01Db250ZW50KWNoaWxkOwotICAgICAgcmVzdWx0ID0gY29udGVudC5nZXRNYXhPY2N1cigpID4gMSB8fCBjb250ZW50LmdldE1heE9jY3VyKCkgPT0gLTE7Ci0gICAgfSAKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gICAgCi0gICAKLSAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBDYW5SZXBlYXRWaXNpdG9yIGV4dGVuZHMgQ01WaXNpdG9yCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiByZXN1bHQ7Ci0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0KLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHJvb3Q7Ci0gICAgcHJvdGVjdGVkIENNTm9kZSB0YXJnZXQ7Ci0KLSAgICBwdWJsaWMgQ2FuUmVwZWF0VmlzaXRvcihDTU5vZGUgcm9vdCwgQ01Ob2RlIHRhcmdldCkKLSAgICB7Ci0gICAgICB0aGlzLnJvb3QgPSByb290OwotICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gICAgeyAgICAgICAgIAotICAgICAgYm9vbGVhbiBvbGRJc1dpdGhpblJlcGVhdGFibGVHcm91cCA9IGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXAgPSBpc1JlcGVhdGFibGUoZ3JvdXApOwotICAgICAgCi0gICAgICBzdXBlci52aXNpdENNR3JvdXAoZ3JvdXApOwotCi0gICAgICBpc1dpdGhpblJlcGVhdGFibGVHcm91cCA9IG9sZElzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gY21lbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChjbWVsZW1lbnQgPT0gdGFyZ2V0KQotICAgICAgewotICAgICAgICByZXN1bHQgPSBpc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSAgCi0gIH0KLQotCi0gIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgSXNSZXBlYXRhYmxlVmlzaXRvciBleHRlbmRzIENNVmlzaXRvcgotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcHVibGljIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgcHJvdGVjdGVkIENNR3JvdXAgY3VycmVudEdyb3VwOwotCi0gICAgcHJvdGVjdGVkIENNTm9kZSByb290OwotICAgIHByb3RlY3RlZCBDTU5vZGUgdGFyZ2V0OwotCi0gICAgcHVibGljIElzUmVwZWF0YWJsZVZpc2l0b3IoQ01Ob2RlIHJvb3QsIENNTm9kZSB0YXJnZXQpCi0gICAgewotICAgICAgdGhpcy5yb290ID0gcm9vdDsKLSAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01Hcm91cChDTUdyb3VwIGdyb3VwKQotICAgIHsgICAgICAgICAKLSAgICAgIENNR3JvdXAgcHJldmlvdXNHcm91cCA9IGN1cnJlbnRHcm91cDsKLSAgICAgIGN1cnJlbnRHcm91cCA9IGdyb3VwOwotICAgICAgc3VwZXIudmlzaXRDTUdyb3VwKGdyb3VwKTsKLSAgICAgIGN1cnJlbnRHcm91cCA9IHByZXZpb3VzR3JvdXA7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBjbWVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGNtZWxlbWVudCA9PSB0YXJnZXQpCi0gICAgICB7Ci0gICAgICAgIGlmIChjdXJyZW50R3JvdXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9ICgoY3VycmVudEdyb3VwLmdldE9wZXJhdG9yKCkgPT0gQ01Hcm91cC5DSE9JQ0UpICYmCi0gICAgICAgICAgICAgICAgICAgIChpc1JlcGVhdGFibGUoY3VycmVudEdyb3VwKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0gIAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MmNjMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkNNVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvci5FbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuQ01WYWxpZGF0b3IuU3RyaW5nRWxlbWVudENvbnRlbnRDb21wYXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgQ01WYWxpZGF0b3JUZXN0Ci17Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdbXSkKLSAgewotICAgIGlmIChhcmcubGVuZ3RoID4gMSkKLSAgICB7Ci0gICAgICB0cnkKLSAgICAgIHsKLSAgICAgICAgLy9DTURvY3VtZW50RmFjdG9yeVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkucmVnaXN0ZXJDTURvY3VtZW50QnVpbGRlcldpdGhDbGFzc05hbWUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9maW1wbC5DTURvY3VtZW50QnVpbGRlckltcGwiKTsKLQotICAgICAgICBTdHJpbmcgZ3JhbW1hckZpbGVOYW1lID0gYXJnWzBdOwotICAgICAgICBTdHJpbmcgZWxlbWVudE5hbWUgPSBhcmdbMV07Ci0KLSAgICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gQ29udGVudE1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNyZWF0ZUNNRG9jdW1lbnQoZ3JhbW1hckZpbGVOYW1lLCBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRNYXAgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudE1hcC5nZXROYW1lZEl0ZW0oZWxlbWVudE5hbWUpOwotICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKQotICAgICAgICB7IC8qCi0gICAgICAgICAgcHJpbnRsbigiZm91bmQgZWxlbWVudCBbIiArIGVsZW1lbnROYW1lICsgIl0gIGNvbnRlbnRUeXBlID0gIiArIGVsZW1lbnQuZ2V0Q29udGVudFR5cGUoKSk7Ci0gICAgICAgICAgR3JhcGhOb2RlIGdyYXBoTm9kZSA9IGNyZWF0ZUdyYXBoKGVsZW1lbnQpOwotICAgICAgICAgIHByaW50R3JhcGgoZ3JhcGhOb2RlKTsKLSAgICAgICAgICAqLwotICAgICAgICAgIHByaW50bG4oIi0tLS0tLS0tLS0tLS0tIGJlZ2luIHZhbGlkYXRlIC0tLS0tLS0tLS0tLS0tLSIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgICAgICBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBTdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3IoKTsKLSAgICAgICAgICBDTVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgQ01WYWxpZGF0b3IoKTsKLSAgICAgICAgICBFbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdCByZXN1bHQgPSBuZXcgRWxlbWVudFBhdGhSZWNvcmRpbmdSZXN1bHQoKTsKLSAgICAgICAgICB2YWxpZGF0b3IuZ2V0T3JpZ2luQXJyYXkoZWxlbWVudCwgQ01WYWxpZGF0b3IuY3JlYXRlU3RyaW5nTGlzdChhcmcsIDIpLCBjb21wYXJhdG9yLCByZXN1bHQpOwotICAgICAgICAgIGlmIChyZXN1bHQuaXNWYWxpZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDTU5vZGVbXSBub2RlTWFwcGluZyA9IHJlc3VsdC5nZXRPcmlnaW5BcnJheSgpOwotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBTdWNjZXNzISIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBwcmludCgiICAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTWFwcGluZy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBub2RlTWFwcGluZ1tpXSAhPSBudWxsID8gbm9kZU1hcHBpbmdbaV0uZ2V0Tm9kZU5hbWUoKSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgICBwcmludCgiWyIgKyBuYW1lICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGxuKCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRsbigiVmFsaWRhdGlvbiBGYWlsZWQhICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yTWVzc2FnZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBwcmludGxuKCIgICIgKyByZXN1bHQuZXJyb3JNZXNzYWdlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBwcmludGxuKCItLS0tLS0tLS0tLS0tLSBlbmQgdmFsaWRhdGUgLS0tLS0tLS0tLS0tLS0tIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBwcmludGxuKCJlbGVtZW50IFsiICsgZWxlbWVudE5hbWUgKyAiXSBjYW4gbm90IGJlIGZvdW5kIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIHByaW50bG4oIkNNVmFsaWRhdG9yIGVycm9yIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHByaW50bG4oIjIgYXJncyByZXF1aXJlZC4uLiBvbmx5ICIgKyBhcmcubGVuZ3RoICsgIiBwcm92aWRlZCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIHByaW50bG4oInVzYWdlIGphdmEgb3JnLmVjbGlwc2Uud3N0Lm5ld3htbC51dGlsLlhNTFV0aWwgZ3JhbW1hckZpbGVOYW1lIHJvb3RFbGVtZW50TmFtZSBwYXR0ZXJuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludChTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAgIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbihTdHJpbmcgc3RyaW5nKQotICB7ICAKLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKQotICB7Ci0gIH0gICAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmFsaWRhdG9yVmFsaWRhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3YzAzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ01WYWxpZGF0b3JWYWxpZGF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSJDTVZhbGlkYXRvclRlc3RQcm9qZWN0IjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBaSVBfRklMRV9OQU1FID0gIkNNVmFsaWRhdG9yVGVzdFByb2plY3QuemlwIjsKLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgWklQX0ZJTEVfTkFNRSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChQUk9KRUNUX05BTUUpOwotCX0KLQotCS8qCi0JICogVGhpcyB0ZXN0IG1ha2VzIHVzZSBvZiB0aGUgZm9sbG93aW5nIFhNTCBzY2hlbWEgc3RydWN0dXJlOgotCSAqIAotCSAqIHJvb3QgKGVsZW1lbnQpCi0JICogICB8Ci0JICogICArLSBzZXF1ZW5jZQotCSAqICAgICAgICAgfAotCSAqICAgICAgICAgKy0gYSAoZWxlbWVudCkKLQkgKiAgICAgICAgIHwgIHwKLQkgKiAgICAgICAgIHwgICstIHNlcXVlbmNlICgwIHRvIG4pCi0JICogICAgICAgICB8ICAgICAgICB8Ci0JICogICAgICAgICB8ICAgICAgICArLSBhMSAoZWxlbWVudCkKLQkgKiAgICAgICAgIHwKLQkgKiAgICAgICAgICstIGIgKGVsZW1lbnQpCi0JICogICAgICAgICB8ICB8Ci0JICogICAgICAgICB8ICArLSBzZXF1ZW5jZQotCSAqICAgICAgICAgfCAgICAgICAgfAotCSAqICAgICAgICAgfCAgICAgICAgKy0gYjEgKGVsZW1lbnQgd2l0aCBvY2N1cnJlbmNlcyAwIHRvIDIpCi0JICogICAgICAgICB8Ci0JICogICAgICAgICArLSBjaG9pY2UKLQkgKiAgICAgICAgICAgICAgIHwKLQkgKiAgICAgICAgICAgICAgICstIGMgKGVsZW1lbnQpCi0JICogICAgICAgICAgICAgICB8Ci0JICogICAgICAgICAgICAgICArLSBkIChlbGVtZW50KQotCSAqCi0JICogVGVzdCBkb2N1bWVudCBjb250YWlucyBvbmx5IHRoZSByb290IGVsZW1lbnQuCi0JICogQXQgdGhlIHJvb3QgZWxlbWVudCBsZXZlbCwgZWxlbWVudCBhIGlzIGluaXRpYWxseSBhdmFpbGFibGUuCi0JICogQWRkaW5nIGEgbWFrZXMgYiBhdmFpbGFibGUuIEFkZGluZyBiIG1ha2VzIGMgb3IgZCBhdmFpbGFibGUuCi0JICogQWRkaW5nIGVpdGhlciBjIG9yIGQgbWFrZXMgbm8gbm9kZXMgYXZhaWxhYmxlIGF0IHRoZSByb290LgotCSAqIEFueSBhcmJpdHJhcnkgbnVtYmVyIG9mIGVsZW1lbnRzIGExIGNhbiBiZSBhZGRlZCB0byBlbGVtZW50IGEuCi0JICogT25seSAyIGVsZW1lbnRzIGIyIG1heSBiZSBhZGRlZCB0byBlbGVtZW50IGIuIAotCSAqLwotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbnNlcnRBY3Rpb25zKCkgewotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKFBST0pFQ1RfTkFNRSArICIvQ01WYWxpZGF0b3JUZXN0U2NoZW1hLnhtbCIpKTsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCSAgICB0cnkgewotCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCQkKLQkJCS8vIHJvb3QgZWxlbWVudCBoYXMgbm8gY2hpbGRyZW4sIGVsZW1lbnQgYSBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117ImEifSk7Ci0KLQkJCS8vIGFkZCBlbGVtZW50IGEKLQkJCUVsZW1lbnQgYUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYUVsZW1lbnQpOwotCQkJCi0JCQkvLyByb290IGVsZW1lbnQgY29udGFpbnMgYTsgYiBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117ImIifSk7Ci0JCQkKLQkJCS8vIGFkZCBlbGVtZW50IGIKLQkJCUVsZW1lbnQgYkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYkVsZW1lbnQpOwotCQkJCi0JCQkvLyByb290IGVsZW1lbnQgY29udGFpbnMgYSBhbmQgYjsgYyBhbmQgZCBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117ImQiLCAiYyJ9KTsKLQkJCQotCQkJLy8gYWRkIGVsZW1lbnQgYwotCQkJRWxlbWVudCBjRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKTsKLQkJCWRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChjRWxlbWVudCk7Ci0JCQkKLQkJCS8vIHJvb3QgZWxlbWVudCBjb250YWlucyBhLCBiIGFuZCBjOyBubyBtb3JlIGVsZW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUKLQkJCXZlcmlmeShkb2N1bWVudEVsZW1lbnQsIG5ldyBTdHJpbmdbXXt9KTsKLQkJCQotCQkJLy8gcmVtb3ZlIGMgZWxlbWVudAotCQkJZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKGNFbGVtZW50KTsKLQkJCQotCQkJLy8gcm9vdCBlbGVtZW50IGNvbnRhaW5zIGEgYW5kIGI7IGMgYW5kIGQgc2hvdWxkIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGRvY3VtZW50RWxlbWVudCwgbmV3IFN0cmluZ1tdeyJkIiwgImMifSk7Ci0JCQkKLQkJCS8vIGFkZCBlbGVtZW50IGQKLQkJCUVsZW1lbnQgZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkIik7Ci0JCQlkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZEVsZW1lbnQpOwotCQkJCi0JCQkvLyByb290IGVsZW1lbnQgY29udGFpbnMgYSwgYiBhbmQgZDsgbm8gbW9yZSBlbGVtZW50cyBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoZG9jdW1lbnRFbGVtZW50LCBuZXcgU3RyaW5nW117fSk7Ci0JCQkKLQkJCS8vIGVsZW1lbnQgYSBjb250YWlucyBubyBjaGlsZHJlbjsgZWxlbWVudCBhMSBzaG91bGQgYmUgYXZhaWxhYmxlCi0JCQl2ZXJpZnkoYUVsZW1lbnQsIG5ldyBTdHJpbmdbXXsiYTEifSk7Ci0JCQkKLQkJCS8vIGFkZCBlbGVtZW50IGExIHRvIGEKLQkJCWFFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImExIikpOwotCQkJCi0JCQkvLyBlbGVtZW50IGExIGlzIGluIGFuIHVuYm91bmRlZCBzZXF1ZW5jZSwgaXQgc2hvdWxkIHN0aWxsIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGFFbGVtZW50LCBuZXcgU3RyaW5nW117ImExIn0pOwotCQkJCi0JCQkvLyBlbGVtZW50IGIgY29udGFpbnMgbm8gY2hpbGRyZW47IGVsZW1lbnQgYjEgc2hvdWxkIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGJFbGVtZW50LCBuZXcgU3RyaW5nW117ImIxIn0pOwotCQkJCi0JCQkvLyBhZGQgZWxlbWVudCBiMSB0byBiCi0JCQliRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiMSIpKTsKLQkJCQotCQkJLy8gZWxlbWVudCBiIGNvbnRhaW5zIDEgYjEgY2hpbGQ7IGFub3RoZXIgaW5zdGFuY2Ugb2YgYjEgc2hvdWxkIGJlIGF2YWlsYWJsZQotCQkJdmVyaWZ5KGJFbGVtZW50LCBuZXcgU3RyaW5nW117ImIxIn0pOwotCi0JCQkvLyBhZGQgYW5vdGhlciBlbGVtZW50IGIxIHRvIGIKLQkJCWJFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIxIikpOwotCQkJCi0JCQkvLyBiMSBjYW4gb25seSBhcHBlYXIgdHdpY2UsIG5vIGVsZW1lbnRzIHNob3VsZCBiZSBhdmFpbGFibGUKLQkJCXZlcmlmeShiRWxlbWVudCwgbmV3IFN0cmluZ1tde30pOwotCQkJCi0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikge2V4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTt9Ci0JfQotCQotCQotCXByaXZhdGUgdm9pZCB2ZXJpZnkoRWxlbWVudCBwYXJlbnRFbGVtZW50LCBTdHJpbmdbXSBjaGlsZEVsZW1lbnRzQXZhaWxhYmxlKSB7Ci0JCUxpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShwYXJlbnRFbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uID0gbW9kZWxRdWVyeS5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbihwYXJlbnRFbGVtZW50KTsKLQkJbW9kZWxRdWVyeS5nZXRJbnNlcnRBY3Rpb25zKHBhcmVudEVsZW1lbnQsIGNtRWxlbWVudERlY2xhcmF0aW9uLCAtMSwgTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTLCBNb2RlbFF1ZXJ5LlZBTElESVRZX1NUUklDVCwgbGlzdCk7Ci0JCWFzc2VydEVxdWFscyhjaGlsZEVsZW1lbnRzQXZhaWxhYmxlLmxlbmd0aCwgbGlzdC5zaXplKCkpOwotCQlMaXN0IGF2YWlsYWJsZU5vZGVOYW1lTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJYXZhaWxhYmxlTm9kZU5hbWVMaXN0LmFkZCgoKE1vZGVsUXVlcnlBY3Rpb24paXRlcmF0b3IubmV4dCgpKS5nZXRDTU5vZGUoKS5nZXROb2RlTmFtZSgpKTsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkRWxlbWVudHNBdmFpbGFibGUubGVuZ3RoOyBpKyspIHsKLQkJCWlmKGF2YWlsYWJsZU5vZGVOYW1lTGlzdC5pbmRleE9mKGNoaWxkRWxlbWVudHNBdmFpbGFibGVbaV0pID09IC0xKSB7Ci0JCQkJZmFpbCgpOwotCQkJfQotCQl9Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmlzaXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZpc2l0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OWI5OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmlzaXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQbGF0Zm9ybVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeWltcGwuTW9kZWxRdWVyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5YTUxBc3NvY2lhdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTURvY3VtZW50Q2FjaGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLQotcHVibGljIGNsYXNzIENNVmlzaXRvclRlc3QgaW1wbGVtZW50cyBJUGxhdGZvcm1SdW5uYWJsZSB7Ci0JcHVibGljIE9iamVjdCBydW4oT2JqZWN0IGEpIHsKLQkJU3RyaW5nIGFyZ3NbXSA9IChTdHJpbmdbXSkgYTsKLQkJaWYgKGFyZ3MubGVuZ3RoID4gMCkgewotCQkJdGVzdChhcmdzWzBdKTsKLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigieG1sIGZpbGUgbmFtZSBhcmd1bWVudCByZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVzdChTdHJpbmcgZmlsZU5hbWUpIHsKLQotCQlDbGFzc0xvYWRlciBvcmlnaW5hbENsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKLQkJdHJ5IHsKLQkJCVhNTEFzc29jaWF0aW9uUHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgWE1MQXNzb2NpYXRpb25Qcm92aWRlcihuZXcgQ01Eb2N1bWVudENhY2hlKCkpIHsKLQkJCX07Ci0KLQkJCU1vZGVsUXVlcnkgbXEgPSBuZXcgTW9kZWxRdWVyeUltcGwocHJvdmlkZXIpOwotCi0JCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihDTVZpc2l0b3JUZXN0LmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwotCQkJRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IGJ1aWxkZXIucGFyc2UoZmlsZU5hbWUpOwotCi0JCQkvKgotCQkJICogQ2xhc3NMb2FkZXIgcHJldkNsYXNzTG9hZGVyID0KLQkJCSAqIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0JCQkgKiBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotCQkJICogQ2xhc3MgdGhlQ2xhc3MgPQotCQkJICogQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54ZXJjZXMucGFyc2Vycy5ET01QYXJzZXIiKTsgRE9NUGFyc2VyCi0JCQkgKiBwYXJzZXIgPSAoRE9NUGFyc2VyKXRoZUNsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCQkgKiBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihwcmV2Q2xhc3NMb2FkZXIpOwotCQkJICogcGFyc2VyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShmaWxlTmFtZSkpOyBEb2N1bWVudCBkb2N1bWVudCA9Ci0JCQkgKiBwYXJzZXIuZ2V0RG9jdW1lbnQoKTsKLQkJCSAqLwotCQkJdmlzaXROb2RlKGRvY3VtZW50LCBtcSwgMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIob3JpZ2luYWxDbGFzc0xvYWRlcik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB2aXNpdE5vZGUoTm9kZSBub2RlLCBNb2RlbFF1ZXJ5IG1xLCBpbnQgaW5kZW50KSB7Ci0JCUNNTm9kZSBjbW5vZGUgPSBtcS5nZXRDTU5vZGUobm9kZSk7Ci0JCXByaW50bG5JbmRlbnRlZChpbmRlbnQsICJub2RlIDoiICsgbm9kZS5nZXROb2RlTmFtZSgpICsgIiBjbW5vZGUgOiAiICsgKGNtbm9kZSAhPSBudWxsID8gY21ub2RlLmdldE5vZGVOYW1lKCkgOiAibnVsbCIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJTmFtZWROb2RlTWFwIG1hcCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlpZiAobWFwICE9IG51bGwpIHsKLQkJCWluZGVudCArPSAyOwotCQkJaW50IG1hcExlbmd0aCA9IG1hcC5nZXRMZW5ndGgoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWFwTGVuZ3RoOyBpKyspIHsKLQkJCQl2aXNpdE5vZGUobWFwLml0ZW0oaSksIG1xLCBpbmRlbnQpOwotCQkJfQotCQkJaW5kZW50IC09IDI7Ci0JCX0KLQkJaW5kZW50ICs9IDQ7Ci0JCU5vZGVMaXN0IGxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKLQkJaW50IGxpc3RMZW5ndGggPSBsaXN0LmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykgewotCQkJdmlzaXROb2RlKGxpc3QuaXRlbShpKSwgbXEsIGluZGVudCk7Ci0JCX0KLQkJaW5kZW50IC09IDQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50bG5JbmRlbnRlZChpbnQgaW5kZW50LCBTdHJpbmcgc3RyaW5nKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnQoIiAiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmcpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0QXR0cmlidXRlc09yZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdEF0dHJpYnV0ZXNPcmRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTY5OGRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0QXR0cmlidXRlc09yZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBBZGRlZCBjb250ZW50IEFzc2lzdCBjaGVjayBpbiB0ZXN0SWdub3Jlc0F0dHJpYnV0ZXNPcmRlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKiBUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgYXR0cmlidXRlcyBvcmRlciBpcyBub3QgaW1wb3J0YW50IHdoZW4gdHJ5aW5nIHRvCi0gKiBkZXRlcm1pbmUgdGhlIGNvbnRlbnQgbW9kZWwuCi0gKiAKLSAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTk4ODA3Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QXR0cmlidXRlc09yZGVyIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhlIHRhcmdldCBwcm9qZWN0IG5hbWUuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiQXR0cmlidXRlc09yZGVyIjsgLy8kTk9OLU5MUy1OJAotCi0gIC8qKgotICAgKiBUaGUgbmFtZSBvZiB0aGUgemlwIGZpbGUgY29udGFpbmluZyB0aGUgcHJvamVjdCB0byBpbXBvcnQuCi0gICAqLwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAiYXR0cmlidXRlc29yZGVydGVzdGZpbGVzLnppcCI7IC8vJE5PTi1OTFMtMSQKLQotICBwdWJsaWMgVGVzdEF0dHJpYnV0ZXNPcmRlcigpCi0gIHsKLSAgICBzdXBlcigiVGVzdEF0dHJpYnV0ZXNPcmRlciIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYXR0cmlidXRlcyBvcmRlciBpcyBub3QgaW1wb3J0YW50IHdoZW4KLSAgICogZGV0ZXJtaW5pbmcgdGhlIGNvbnRlbnQgbW9kZWwgZm9yIGEgZ2l2ZW4gWE1MIGRvY3VtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdElnbm9yZXNBdHRyaWJ1dGVzT3JkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIC8vIFRlc3RzIHRoZSBzY2VuYXJpbyB0aGF0IHVzZWQgdG8gc3VjY2VlZCwgd2hlcmUgdGhlIG5hbWVzcGFjZSBwcmVmaXggaXMKLSAgICAvLyBkZWNsYXJlZCBiZWZvcmUgdGhlIHNjaGVtYUxvY2F0aW9uLgotCi0gICAgSUZpbGUgZmlsZSA9IGdldEZpbGUoIlByZXZpb3VzbHlTdWNjZWVkaW5nVGVzdC54bWwiKTsgLy8kTk9OLU5MUy0xJAotICAgIGVuc3VyZURvY3VtZW50SGFzR3JhbW1hcihmaWxlKTsKLQotICAgIC8vIFRlc3RzIHRoZSBmYWlsaW5nIHNjZW5hcmlvLCB3aGVyZSB0aGUgc2NoZW1hTG9jYXRpb24gY29tZXMgZmlyc3QuCi0KLSAgICBmaWxlID0gZ2V0RmlsZSgiUHJldmlvdXNseUZhaWxpbmdUZXN0LnhtbCIpOyAvLyROT04tTkxTLTEkCi0gICAgZW5zdXJlRG9jdW1lbnRIYXNHcmFtbWFyKGZpbGUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotCi0gICAgaWYgKCF0aGlzLmlzU2V0dXApCi0gICAgewotICAgICAgZG9TZXR1cCgpOwotICAgICAgdGhpcy5pc1NldHVwID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0cyB1cCB0aGUgcmVxdWlyZWQgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlLgotICAgKiAKLSAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICovCi0gIHByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotICAgIFByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLSAgICBGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLSAgICBVUkwgcGxhdGZvcm1Mb2NhdGlvblVSTCA9IHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCk7Ci0gICAgU3RyaW5nIGZpbGUgPSBwbGF0Zm9ybUxvY2F0aW9uVVJMLmdldEZpbGUoKTsKLSAgICB1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZmlsZSk7Ci0gICAgdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldXNhYmxlIHRlc3QgdG8gbWFrZSBzdXJlIHRoZSBYTUwgbW9kZWwgZm9yIHRoZSBnaXZlbiBmaWxlIGhhcyBhIGdyYW1tYXIuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZQotICAgKiAgICAgICAgICB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgZW5zdXJlRG9jdW1lbnRIYXNHcmFtbWFyKElGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbgotICB7Ci0gICAgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotICAgICAgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiZmFpbHVyZSBsb2FkaW5nIG1vZGVsIiwgbW9kZWwpOyAvLyROT04tTkxTLTEkCi0gICAgICBJRE9NTW9kZWwgZG9tTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbDsKLSAgICAgIElET01Eb2N1bWVudCBkb2N1bWVudCA9IGRvbU1vZGVsLmdldERvY3VtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJmYWlsdXJlIGdldHRpbmcgZG9jdW1lbnQiLCBkb2N1bWVudCk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIE1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkoZG9jdW1lbnQpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiTW9kZWxRdWVyeSBpcyBtaXNzaW5nIiwgbW9kZWxRdWVyeSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgIElET01FbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IChJRE9NRWxlbWVudCkgZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJtaXNzaW5nIGRvY3VtZW50IGVsZW1lbnQiLCBkb2N1bWVudEVsZW1lbnQpOyAvLyROT04tTkxTLTEkCi0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBjbUVsZW1lbnREZWNsYXJhdGlvbiA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oZG9jdW1lbnRFbGVtZW50KTsKLSAgICAgIGFzc2VydE5vdE51bGwoIk5vIGVsZW1lbnQgZGVjbGFyYXRpb24gZm9yIiArIGRvY3VtZW50RWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiAoIitkb2N1bWVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkrIikiLCBjbUVsZW1lbnREZWNsYXJhdGlvbik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0gICAgICBhc3NlcnROb3ROdWxsKCJObyBjb250ZW50IGFzc2lzdCBhdmFpbGFibGUgZm9yIiArIGRvY3VtZW50RWxlbWVudC5nZXROb2RlTmFtZSgpICsgIiAoIiArIGRvY3VtZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSArICIpIixtb2RlbFF1ZXJ5LmdldEF2YWlsYWJsZUNvbnRlbnQoZG9jdW1lbnRFbGVtZW50LCBjbUVsZW1lbnREZWNsYXJhdGlvbiwgTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTKSk7Ci0gICAgfQotICAgIGZpbmFsbHkKLSAgICB7Ci0gICAgICBpZiAobW9kZWwgIT0gbnVsbCkKLSAgICAgIHsKLSAgICAgICAgbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFV0aWxpdHkgdG8gcmV0cmlldmUgdGhlIElGaWxlIGZvciB0aGUgZ2l2ZW4gZmlsZSBuYW1lLiBUaGUgZmlsZSBpcyBleHBlY3RlZAotICAgKiB0byBiZSBpbiB0aGUgd29ya3NwYWNlIGluIHRoZSBwcm9qZWN0IG5hbWVkIGJ5IHtAbGluayAjZlByb2plY3ROYW1lfS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlTmFtZQotICAgKiAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byByZXRyaWV2ZS4KLSAgICogQHJldHVybiBhbiBJRmlsZS4KLSAgICovCi0gIHByaXZhdGUgSUZpbGUgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpCi0gIHsKLSAgICBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLSAgICBQYXRoIHBhdGggPSBuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiLyIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKLSAgICByZXR1cm4gcm9vdC5nZXRGaWxlKHBhdGgpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2E5YjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIEFkZGVkIFhNTCBDYXRhbG9ncyAxLjEgc3VwcG9ydAotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JRGVsZWdhdGVDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklSZXdyaXRlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSVN1ZmZpeEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuWE1MQ2F0YWxvZ0lkUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIFRlc3QgdGhhdCBhIGtub3duIGVycm9yIGNhc2UgcmV0dXJucyBudWxsLgotCSAqIAotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RLbm93bk5vdEV4aXN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgSlVOS19TVFJJTkcgPSAiZG9lc05vdEV4aXN0VGVzdCI7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoSlVOS19TVFJJTkcsIG51bGwpOwotCQlhc3NlcnROdWxsKCJleHBlY3RlZCBubyBtYXRjaCBmb3IgIiArIEpVTktfU1RSSU5HLCByZXNvbHZlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlZHRlc3RXQVBGT1JVTSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTAoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMFQoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEYoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwQigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpOwotCX0KLQkKLQkvKioKLQkgKiBXZSBleHBlY3QgdGhlIFhNTENhdGFsb2dSZXNvbHZlciBhbmQgWE1MQ2F0YWxvZ0lkUmVzb2x2ZXIKLQkgKiB0byByZXNvbHZlIHRvIHRoZSBzYW1lIFVSSSBnaXZlbiBhIHB1YmxpYyBpZCBpbiBvdXIgY2F0YWxvZy4KLQkgKiAKLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMV94bWxyZXNvbHZlcigpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEID0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iOwotCQkKLQkJLy8gYnVnIDExNzQyNCwgaGVyZSBld2UgbWFrZSB1cCBhIGJhc2UgbG9jYXRpb24gdG8gc2F0aXNmeSB0aGUgcmVzb2x2ZXIgQVBJCi0JCS8vIHRoYXQgZXhwZWN0cyBhIG5vbi1udWxsIGJhc2UgbG9jYXRpb24KLQkJU3RyaW5nIGJhc2VMb2NhdGlvbiA9ICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RYSFRNTDExLnhtbCI7Ci0JCVhNTENhdGFsb2dJZFJlc29sdmVyIHJlc29sdmVyID0gbmV3IFhNTENhdGFsb2dJZFJlc29sdmVyKGJhc2VMb2NhdGlvbiwgbnVsbCk7Ci0JCVN0cmluZyByZXNvbHZlZFhNTF9JZCA9IHJlc29sdmVyLnJlc29sdmUoYmFzZUxvY2F0aW9uLCBFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCQotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkWExfQ2F0ID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEVYUEVDVEVEX1BVQkxJQ0lELCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkWExfQ2F0LCByZXNvbHZlZFhNTF9JZCk7CQkgCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDTVhIVE1MMTEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01UZXN0KCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIik7Ci0JfQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0WEhUTUwxME0oKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0V0FQMTMoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4zLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyMDAxU2NoZW1hKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1VSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYgZHRkIE5PVCBpbiBvdXIgY2F0YWxvZyBjYW4gaGF2ZSBhIGNvbnRlbnQgbW9kZWwgCi0JICogY3JlYXRlZC4gCi0JICogCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4dGVybmFsRFREKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly9oaWJlcm5hdGUuc291cmNlZm9yZ2UubmV0L2hpYmVybmF0ZS1jb25maWd1cmF0aW9uLTMuMC5kdGQiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYUNNRGlyZWN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYUNNQ2F0YWxvZygpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9VUklfQ01UZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbnZvaWNlLmR0ZCIsIDE4KTsKLQl9CQotCQotCXB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlSW5kaXJlY3QoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW5kaXJlY3RJbnZvaWNlLmR0ZCIsIDE4KTsKLQl9Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQUxfU0NIRU1BX0ZJTEUgPSAiZmlsZTovLy91c3IvdG1wL215U2NoZW1hU2NoZW1hLnhzZCI7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQUxfU0NIRU1BX0RJUiA9ICJmaWxlOi8vL3Vzci90bXAvc2NoZW1hcy8iOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExPQ0FMX1NDSEVNQV9ESVJfUkVXUklUVEVOID0gImZpbGU6Ly8vdXNyL3RtcC9zY2hlbWFzL2V4YW1wbGUuZHRkIjsKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZzExU3lzdGVtU3VmZml4KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSVN1ZmZpeEVudHJ5IHN5c3RlbVN1ZmZpeCA9IChJU3VmZml4RW50cnkpeG1sQ2F0YWxvZy5jcmVhdGVDYXRhbG9nRWxlbWVudChJU3VmZml4RW50cnkuU1VGRklYX1RZUEVfU1lTVEVNKTsKLQkJc3lzdGVtU3VmZml4LnNldFN1ZmZpeCgiWE1MU2NoZW1hLnhzZCIpOwotCQlzeXN0ZW1TdWZmaXguc2V0VVJJKExPQ0FMX1NDSEVNQV9GSUxFKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRklMRSwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMVVyaVN1ZmZpeCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlTdWZmaXhFbnRyeSB1cmlTdWZmaXggPSAoSVN1ZmZpeEVudHJ5KXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSVN1ZmZpeEVudHJ5LlNVRkZJWF9UWVBFX1VSSSk7Ci0JCXVyaVN1ZmZpeC5zZXRTdWZmaXgoIlhNTFNjaGVtYS54c2QiKTsKLQkJdXJpU3VmZml4LnNldFVSSShMT0NBTF9TQ0hFTUFfRklMRSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJdHJ5IHsKLQkJCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQlhc3NlcnRFcXVhbHMoTE9DQUxfU0NIRU1BX0ZJTEUsIHJlc29sdmVkKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFSZXdyaXRlU3lzdGVtKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSVJld3JpdGVFbnRyeSBzeXN0ZW1TdWZmaXggPSAoSVJld3JpdGVFbnRyeSl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElSZXdyaXRlRW50cnkuUkVXUklURV9UWVBFX1NZU1RFTSk7Ci0JCXN5c3RlbVN1ZmZpeC5zZXRTdGFydFN0cmluZygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9kdGRzLyIpOwotCQlzeXN0ZW1TdWZmaXguc2V0UmV3cml0ZVByZWZpeChMT0NBTF9TQ0hFTUFfRElSKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2R0ZHMvZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRElSX1JFV1JJVFRFTiwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMVJld3JpdGVVcmkoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlJUmV3cml0ZUVudHJ5IHVyaVN1ZmZpeCA9IChJUmV3cml0ZUVudHJ5KXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSVJld3JpdGVFbnRyeS5SRVdSSVRFX1RZUEVfVVJJKTsKLQkJdXJpU3VmZml4LnNldFN0YXJ0U3RyaW5nKCJ1cm46ZmlzazoiKTsKLQkJdXJpU3VmZml4LnNldFJld3JpdGVQcmVmaXgoTE9DQUxfU0NIRU1BX0RJUik7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJdHJ5IHsKLQkJCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSSgidXJuOmZpc2s6ZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRElSX1JFV1JJVFRFTiwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudCh1cmlTdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMURlbGVnYXRlUHVibGljKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSURlbGVnYXRlQ2F0YWxvZyBwdWJsaWNEZWxlZ2F0ZSA9IChJRGVsZWdhdGVDYXRhbG9nKXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSURlbGVnYXRlQ2F0YWxvZy5ERUxFR0FURV9UWVBFX1BVQkxJQyk7Ci0KLQkJLy8gSXJvbmljYWxseSwgd2UgZG9uJ3QgdXNlIFdUUCdzIFJlc29sdmVyIHdoZW4gbG9hZGluZyB0aGUgY2F0YWxvZyBYTUwuCi0JCS8vIEFkZGluZyA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgWE1MIENhdGFsb2dzIFYxLjEvL0VOIiAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9kdGQvY2F0YWxvZy5kdGQiPgotCQkvLyB0byB0aGUgY2F0YWxvZyBiZWxvdyB3aWxsIG1ha2UgdGhlIGxvYWRpbmcgZmFpbC4uLiAKLQotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gbWFrZVRlbXBGaWxlKCJkZWxlZ2F0ZVB1YmxpYyIsICI8Y2F0YWxvZyB4bWxucz1cInVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2dcIlxyXG4iICsKLQkJCSIgICAgICAgcHJlZmVyPVwicHVibGljXCI+XHJcbiIgKyAKLQkJCSIgICAgPHB1YmxpYyBwdWJsaWNJZD1cIi0vL0V4YW1wbGUvL2FuIGV4YW1wbGUgVjEuMC4wLy9FTlwiXHJcbiIgKyAKLQkJCSIgICAgICAgICAgICB1cmk9XCJmaWxlOi8vL2V4YW1wbGUuZHRkXCIvPlxyXG4iICsgCi0JCQkiPC9jYXRhbG9nPiIpOwotCi0JCXB1YmxpY0RlbGVnYXRlLnNldFN0YXJ0U3RyaW5nKCItLy9FeGFtcGxlLy8iKTsKLQkJcHVibGljRGVsZWdhdGUuc2V0Q2F0YWxvZ0xvY2F0aW9uKGRlbGVnYXRlQ2F0LnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQocHVibGljRGVsZWdhdGUpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKCItLy9FeGFtcGxlLy9hbiBleGFtcGxlIFYxLjAuMC8vRU4iLCAiZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscygiZmlsZTovLy9leGFtcGxlLmR0ZCIsIHJlc29sdmVkKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQocHVibGljRGVsZWdhdGUpOwotCQl9Ci0JCWRlbGVnYXRlQ2F0LmRlbGV0ZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFEZWxlZ2F0ZVN5c3RlbSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlEZWxlZ2F0ZUNhdGFsb2cgc3lzdGVtRGVsZWdhdGUgPSAoSURlbGVnYXRlQ2F0YWxvZyl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElEZWxlZ2F0ZUNhdGFsb2cuREVMRUdBVEVfVFlQRV9TWVNURU0pOwotCi0JCUZpbGUgZGVsZWdhdGVDYXQgPSBtYWtlVGVtcEZpbGUoImRlbGVnYXRlU3lzdGVtIiwgIjxjYXRhbG9nIHhtbG5zPVwidXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZ1wiPlxyXG4iICsgCi0JCQkiICAgIDxzeXN0ZW0gc3lzdGVtSWQ9XCJodHRwOi8vZnVua3kub3JnL2RvZ1wiIHVyaT1cImZpbGU6Ly8vZnVua3ktZG9nLmR0ZFwiLz5cclxuIiArIAotCQkJIiAgICA8c3lzdGVtU3VmZml4IHN5c3RlbUlkU3VmZml4PVwiL2NhdC5kdGRcIiB1cmk9XCJmaWxlOi8vL3NtZWxseWNhdC54c2RcIi8+XHJcbiIgKyAKLQkJCSIgICAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz1cImh0dHA6Ly9mdW5reS5vcmcvcGFycm90cy9cIiByZXdyaXRlUHJlZml4PVwiZmlsZTovLy9kdGRzL3BhcnJvdHMvXCIvPlxyXG4iICsgCi0JCQkiPC9jYXRhbG9nPiIpOwotCi0JCXN5c3RlbURlbGVnYXRlLnNldFN0YXJ0U3RyaW5nKCJodHRwOi8vZnVua3kub3JnLyIpOwotCQlzeXN0ZW1EZWxlZ2F0ZS5zZXRDYXRhbG9nTG9jYXRpb24oZGVsZWdhdGVDYXQudG9VUkkoKS50b1N0cmluZygpKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1EZWxlZ2F0ZSk7Ci0JCXRyeSB7CQkJCi0JCQlhc3NlcnRFcXVhbHMoInRyeSBzeXN0ZW1JZCBlbnRyeSIsICJmaWxlOi8vL2Z1bmt5LWRvZy5kdGQiLCB4bWxDYXRhbG9nLnJlc29sdmVTeXN0ZW0oImh0dHA6Ly9mdW5reS5vcmcvZG9nIikpOwotCQkJYXNzZXJ0RXF1YWxzKCJ0cnkgc3lzdGVtU3VmZml4IGVudHJ5IiwgImZpbGU6Ly8vc21lbGx5Y2F0LnhzZCIsIHhtbENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL2Z1bmt5Lm9yZy9zb21lL2NhdC5kdGQiKSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRyeSByZXdyaXRlU3lzdGVtIGVudHJ5IiwgImZpbGU6Ly8vZHRkcy9wYXJyb3RzL21hY2F3LnhzZCIsIHhtbENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL2Z1bmt5Lm9yZy9wYXJyb3RzL21hY2F3LnhzZCIpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoc3lzdGVtRGVsZWdhdGUpOwotCQl9Ci0JCWRlbGVnYXRlQ2F0LmRlbGV0ZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFEZWxlZ2F0ZVVyaSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlEZWxlZ2F0ZUNhdGFsb2cgdXJpRGVsZWdhdGUgPSAoSURlbGVnYXRlQ2F0YWxvZyl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElEZWxlZ2F0ZUNhdGFsb2cuREVMRUdBVEVfVFlQRV9VUkkpOwotCi0JCUZpbGUgZGVsZWdhdGVDYXQgPSBtYWtlVGVtcEZpbGUoImRlbGVnYXRlVXJpIiwgIjxjYXRhbG9nIHhtbG5zPVwidXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZ1wiPlxyXG4iICsgCi0JCQkiICAgIDx1cmkgbmFtZT1cInVybjpmdW5reTpkb2dcIiB1cmk9XCJmaWxlOi8vL2Z1bmt5LWRvZy5kdGRcIi8+XHJcbiIgKyAKLQkJCSIgICAgPHVyaVN1ZmZpeCB1cmlTdWZmaXg9XCI6Y2F0XCIgdXJpPVwiZmlsZTovLy9zbWVsbHljYXQuZHRkXCIvPlxyXG4iICsgCi0JCQkiICAgIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPVwidXJuOmZ1bmt5OmZpc2g6XCIgcmV3cml0ZVByZWZpeD1cImZpbGU6Ly8vZHRkcy9cIi8+XHJcbiIgKyAKLQkJCSI8L2NhdGFsb2c+Iik7Ci0KLQkJdXJpRGVsZWdhdGUuc2V0U3RhcnRTdHJpbmcoInVybjpmdW5reToiKTsKLQkJdXJpRGVsZWdhdGUuc2V0Q2F0YWxvZ0xvY2F0aW9uKGRlbGVnYXRlQ2F0LnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpRGVsZWdhdGUpOwotCQl0cnkgewkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1cmkgZW50cnkiLCAiZmlsZTovLy9mdW5reS1kb2cuZHRkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlVVJJKCJ1cm46ZnVua3k6ZG9nIikpOwotCQkJYXNzZXJ0RXF1YWxzKCJ1cmlTdWZmaXggZW50cnkiLCAiZmlsZTovLy9zbWVsbHljYXQuZHRkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlVVJJKCJ1cm46ZnVua3k6d2hlcmUtaXMtbXk6Y2F0IikpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXdyaXRlVXJpIGVudHJ5IiwgImZpbGU6Ly8vZHRkcy9wYXJyb3QuZHRkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlVVJJKCJ1cm46ZnVua3k6ZmlzaDpwYXJyb3QuZHRkIikpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudCh1cmlEZWxlZ2F0ZSk7Ci0JCX0KLQkJZGVsZWdhdGVDYXQuZGVsZXRlKCk7Ci0JfQotCi0JcHJpdmF0ZSBGaWxlIG1ha2VUZW1wRmlsZShTdHJpbmcgbmFtZSwgU3RyaW5nIGNvbnRlbnRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoImNhdGFsb2dzIiwgbmFtZSwgImNhdCIpOwotCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZGVsZWdhdGVDYXQpOwotCQlmdy53cml0ZShjb250ZW50cyk7Ci0JCWZ3LmNsb3NlKCk7Ci0JCWRlbGVnYXRlQ2F0LmdldFBhcmVudEZpbGUoKS5kZWxldGVPbkV4aXQoKTsKLQkJcmV0dXJuIGRlbGVnYXRlQ2F0OwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9QVUJMSUNJRCwgcmVzb2x2ZWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNVGVzdChTdHJpbmcgRVhQRUNURURfUFVCTElDSUQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1BVQkxJQ0lELCBjb250ZW50TW9kZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNX2RpcmVjdFVSSVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KFN0cmluZyBFWFBFQ1RFRF9VUkksIGludCBjb3VudCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCQlpbnQgYWN0dWFsQ291bnQgPSBjb250ZW50TW9kZWwuZ2V0RWxlbWVudHMoKS5nZXRMZW5ndGgoKTsgCi0JCWFzc2VydEVxdWFscygiY291bnQgb2YgZWxlbWVudCBkZWNsYXJhdGlvbnMgZm91bmQgZm9yIGNvbnRlbnQgbW9kZWwgY3JlYXRlIGZyb20gIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsLmdldEVsZW1lbnRzKCkuZ2V0TGVuZ3RoKCksIGFjdHVhbENvdW50KTsJCQotCX0JCi0KLQlwcml2YXRlIHZvaWQgZG9VUklUZXN0KFN0cmluZyBFWFBFQ1RFRF9VUkkpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSShFWFBFQ1RFRF9VUkkpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9VUkksIHJlc29sdmVkKTsKLQotCX0KLQkgdm9pZCBkb1VSSV9DTVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkgCi0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVVUkkoRVhQRUNURURfVVJJKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gZmluZCAiICsgRVhQRUNURURfVVJJLCByZXNvbHZlZCk7Ci0JCQotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KHJlc29sdmVkLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gY3JlYXRlIGNvbnRlbnQgbW9kZWwgZm9yICIgKyBFWFBFQ1RFRF9VUkksIGNvbnRlbnRNb2RlbCk7Ci0KLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmM2VlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuTG9jYXRpb25LaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLQotcHVibGljIGNsYXNzIEZpbGVCdWZmZXJEb2N1bWVudFRlc3RlciBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsKLQkJSVBhdGggZnVsbFBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QoZnVsbFBhdGgsIExvY2F0aW9uS2luZC5JRklMRSwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZ1bGxQYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudDogIiArIChkb2N1bWVudCAhPSBudWxsID8gZG9jdW1lbnQuZ2V0Q2xhc3MoKSA6IG51bGwpLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgSURvY3VtZW50RXh0ZW5zaW9uMyIsIGRvY3VtZW50IGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIGFjdHVhbFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQ6ICIgKyBhY3R1YWxQYXJ0aXRpb25lciwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShhY3R1YWxQYXJ0aXRpb25lcikpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZnVsbFBhdGgsIExvY2F0aW9uS2luZC5JRklMRSwgbnVsbCk7Ci0KLS8vCQlkb1Rlc3RDcmVhdGVXaXRoRmFjYWRlKGZpbGUsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQkgCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcGFyYW0gZXhwZWN0ZWREb2N1bWVudENsYXNzCi0JICogQHBhcmFtIGV4cGVjdGVkUGFydGlvbmVyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotLy8JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoSUZpbGUgZmlsZSwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLS8vCQlEb2N1bWVudExvYWRlckZvclhNTCBkb2N1bWVudExvYWRlckZvclhNTCA9IG5ldyBEb2N1bWVudExvYWRlckZvclhNTCgpOwotLy8JCUlEb2N1bWVudCBkb2N1bWVudCA9IGRvY3VtZW50TG9hZGVyRm9yWE1MLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlLCBudWxsKTsKLS8vCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0vLwl9Ci0KLS8vCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVFbXB0eShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLS8vCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0vLwkJYXNzZXJ0VHJ1ZSgiVGVzdCBDYXNlIGluIGVycm9yLiBOb24tZXhpc3RlbnQgZmlsZSBleGlzdGVkISAiICsgZmlsZVBhdGgsIGZpbGUgPT0gbnVsbCk7Ci0vLwkJSVBhdGggbG9jYXRpb25QYXRoID0gbmV3IFBhdGgoZmlsZVBhdGgpOwotLy8JCUlGaWxlIG5vbkV4aXN0aW5nRmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGxvY2F0aW9uUGF0aCk7Ci0vLwkJbG9jYXRpb25QYXRoID0gbm9uRXhpc3RpbmdGaWxlLmdldEZ1bGxQYXRoKCk7Ci0vLwkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0vLwkJLy8gY2FuIG5vdCAiY29ubmVjdCIgdG8gbm9uLWV4aXN0YW50IGxvY2F0aW9uCi0vLwkJLy9idWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLS8vCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXJNYW5hZ2VyLmNyZWF0ZUVtcHR5RG9jdW1lbnQobG9jYXRpb25QYXRoLCBMb2NhdGlvbktpbmQuSUZJTEUpOwotLy8JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotLy8JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLS8vCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudDogIiArIGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKSwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCkpKTsKLS8vCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBMb2NhdGlvbktpbmQuSUZJTEUsIG51bGwpOwotLy8KLS8vCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUwoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0Q3JlYXRlRW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQkvKgotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JDU1MuY2xhc3MpOwotCX0KLQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0qLwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGMxZDQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi1wdWJsaWMgY2xhc3MgR2V0RG9jdW1lbnRSZWdpb25zVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gZkFscmVhZHlTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBmVGV4dCA9IG51bGw7Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIWZBbHJlYWR5U2V0dXApIHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gY3JlYXRlTW9kZWwoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCQlmRG9jID0gc01vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZlRleHQgPSAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiB0ZXh0IDwvYm9keT48L2h0bWw+IjsKLQkJCWZEb2Muc2V0KGZUZXh0KTsKLQkJCWZBbHJlYWR5U2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbGxSZWdpb25zKCkgewotCi0JCS8vIGFsbCByZWdpb25zCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCA3LCAiPGh0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RXhjbHVkZUVuZHMoKSB7Ci0JCQotCQkvLyBsZWF2ZSBvZmYgdGhlIGVuZCByZWdpb25zCi0JCS8vIDxodG1sPls8aGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+XTwvaHRtbD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoNixmVGV4dC5sZW5ndGgoKSAtICg2KzcpKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDUsICI8aGVhZD4iLCAiPC9ib2R5PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbmNsdWRlRW5kcygpIHsKLQkJCi0JCS8vIGluY2x1ZGUgZW5kIHJlZ2lvbnMKLQkJLy8gPGh0W21sPjxoZWFkPjwvaGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+PC9odF1tbD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoMyxmVGV4dC5sZW5ndGgoKS0gKDMrMykpOwotCQlhc3NlcnRFcXVhbHMoNywgcmVnaW9ucy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaXJzdFR3bygpIHsKLQkJLy8gZmlyc3QgMiByZWdpb25zCi0JCS8vIDxoW3RtbD48aF1lYWQ+PC9oZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygyLDYpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMiwgIjxodG1sPiIsICI8aGVhZD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmlnaHRTZWFtKCkgewotCQkvLyByaWdodCBzZWFtCi0JCS8vIFs8aHRtbD48aGVhZD5dPC9oZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygwLDEyKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDIsICI8aHRtbD4iLCAiPGhlYWQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExlZnRTZWFtKCkgewotCQkvLyBsZWZ0IHNlYW0KLQkJLy8gPC9ib2R5Pls8L2h0bWw+XQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyhmVGV4dC5sZW5ndGgoKS03LCA3KTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDEsICI8L2h0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGFzdCgpIHsKLQkJLy8gbGFzdCByZWdpb24gb25seQotCQkvLyA8L2JvZHk+PC9odG1sPnwKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoZlRleHQubGVuZ3RoKCksIDApOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjwvaHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGaXJzdCgpIHsKLQkJLy8gZmlyc3QgcmVnaW9uIG9ubHkKLQkJLy8gfDxodG1sPjxoZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygwLDApOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjxodG1sPiIsICI8aHRtbD4iKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zLCBpbnQgZXhwZWN0ZWRMZW5ndGgsIFN0cmluZyBmaXJzdFRleHQsIFN0cmluZyBsYXN0VGV4dCkgewotCQkKLQkJLy9mb3IgKGludCBpID0gMDsgaSA8IHJlZ2lvbnMubGVuZ3RoOyBpKyspIAotCQkvLwlTeXN0ZW0ub3V0LnByaW50bG4ocmVnaW9uc1tpXS5nZXRUZXh0KCkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTGVuZ3RoLCByZWdpb25zLmxlbmd0aCk7Ci0JCQotCQlTdHJpbmcgdGV4dCA9IHJlZ2lvbnNbMF0uZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGV4dCwgZmlyc3RUZXh0KTsKLQkJCi0JCXRleHQgPSByZWdpb25zW3JlZ2lvbnMubGVuZ3RoLTFdLmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRleHQsIGxhc3RUZXh0KTsKLQl9Ci0JCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGNyZWF0ZU1vZGVsKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCS8vIGNyZWF0ZSBhbiBlbXB0eSBtb2RlbCB3aXRoIGl0cyBkZWZhdWx0IGZhY3RvcmllcwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGVJRCk7Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNDE3MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFN0cnVjdHVyZWREb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb240OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQljbGFzcyBUZXN0TGlzdGVuZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCi0JCWJvb2xlYW4gbmV3TW9kZWxDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiBub0NoYW5nZUNhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIG5vZGVzUmVwbGFjZWRDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiByZWdpb25DaGFuZ2VkQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gcmVnaW9uc1JlcGxhY2VkQ2FsbGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbmV3TW9kZWxDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9DaGFuZ2VDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9kZXNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJcmVnaW9uQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25zUmVwbGFjZWQoUmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCXJlZ2lvbnNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZERvY3VtZW50KCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHVyZWREb2N1bWVudCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCQotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICovCi0JSVN0cnVjdHVyZWRNb2RlbCBnZXRUZXN0TW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZlByb2plY3ROYW1lKTsKLQkJSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHByb2plY3QuZmluZE1lbWJlcigiL2ZpbGVzL3NpbXBsZS54bWwiKTsKLQkJLy8gZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIgotCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoaUZpbGUpOwotCi0KLQkJcmV0dXJuIG1vZGVsOwotCi0JfQotCi0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gVE9ETzogbWF5IG5lZWQgdG8gZmFrZSBldmVudHMgdG8gcmVhbGx5IHRlc3RzIHRoaXMKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RMaXN0ZW5lcigpOwotCi0JCQlzRG9jLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0KCk7Ci0JCQlzRG9jLnJlcGxhY2UoMCwgdGV4dC5sZW5ndGgoKSwgdGV4dCk7Ci0KLQkJCXNEb2MucmVtb3ZlRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZE9ubHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldCgpOwotCi0JCQlzRG9jLmNsZWFyUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSk7Ci0JCQlhc3NlcnRGYWxzZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSkpOwotCi0JCQlzRG9jLm1ha2VSZWFkT25seSgwLCAxMCk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSg5LCAxKSk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0KLQkJCXNEb2MuY2xlYXJSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKTsKLQkJCWFzc2VydEZhbHNlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSBzRG9jLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDApOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHJlZ2lvbiBhdCBvZmZzZXQ6IDAiLCByKTsKLQotCQkJciA9IHNEb2MuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoc0RvYy5nZXRMZW5ndGgoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgcmVnaW9uIGF0IG9mZnNldDogIiArIHNEb2MuZ2V0TGVuZ3RoKCksIHIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkxpc3QoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbnMgPSBzRG9jLmdldFJlZ2lvbkxpc3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCByZWdpb24gbGlzdCIsIHJlZ2lvbnMpOwotCQkJYXNzZXJ0RXF1YWxzKDE3LCByZWdpb25zLmdldExlbmd0aCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldFRleHQoKTsKLQkJCVN0cmluZyBleHBlY3RlZFRleHQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cclxuPGxpc3Q+XHJcblx0PGl0ZW0xIGF0dHIxPVwiYXR0cjFcIiBhdHRyMj1cImF0dHIyXCIgYXR0cjM9XCJhdHRyM1wiPlxyXG5cdFx0b25lXHJcblx0PC9pdGVtMT5cclxuXHQ8aXRlbTIgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCIgPlxyXG5cdFx0dHdvXHJcblx0PC9pdGVtMj5cclxuXHQ8aXRlbTMgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCI+XHJcblx0XHR0aHJlZVxyXG5cdDwvaXRlbTM+XHJcbjwvbGlzdD4iOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0luc3RhbmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IG5ld0RvYyA9IHNEb2MubmV3SW5zdGFuY2UoKTsKLQkJCWFzc2VydE5vdFNhbWUoImRvY3VtZW50IGluc3RhbmNlcyBzaG91bGQgYmUgZGlmZmVyZW50Iiwgc0RvYywgbmV3RG9jKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2UoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJc0RvYy5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVdpdGhNb2RpZmljYXRpb25TdGFtcCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCUlEb2N1bWVudEV4dGVuc2lvbjQgZXh0NCA9IChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2M7Ci0JCQkJbG9uZyBtb2RpZmljYXRpb25TdGFtcCA9IGV4dDQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQkJCi0JCQkJZXh0NC5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIsIG1vZGlmaWNhdGlvblN0YW1wKTsKLQkJCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJCWFzc2VydEVxdWFscygicmVwbGFjZWQiLCB0ZXh0KTsKLQkJCQkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wID09KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlVGV4dCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWxvbmcgbW9kaWZpY2F0aW9uU3RhbXAgPSAtMTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCW1vZGlmaWNhdGlvblN0YW1wID0gKChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCQl9Ci0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZVJlYWRPbmx5UmVwbGFjZVRleHQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2MubWFrZVJlYWRPbmx5KDAsIDEpOwotCQkJCi0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJCi0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCQkJYXNzZXJ0Tm90U2FtZSgidGV4dCBzaG91bGQgbm90IGhhdmUgYmVlbiByZXBsYWNhYmxlIChyZWFkIG9ubHkpIiwgInJlcGxhY2VkIiwgc0RvYy5nZXRUZXh0KCkpOwotCQkJCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIChyZWFkIG9ubHkpIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJCi0JCQltb2RpZmljYXRpb25TdGFtcCA9IC0xOwotCQkJaWYgKHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb240KSB7Ci0JCQkJbW9kaWZpY2F0aW9uU3RhbXAgPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQl9Ci0JCQkKLQkJCXNEb2MucmVwbGFjZVRleHQodGhpcywgMCwgc0RvYy5nZXRMZW5ndGgoKSwgInJlcGxhY2VkIiwgdHJ1ZSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRleHQgc2hvdWxkIGhhdmUgYmVlbiBmb3JjZWQgcmVwbGFjZWQiLCAicmVwbGFjZWQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQkKLQkJCWlmIChtb2RpZmljYXRpb25TdGFtcCA+IC0xKQotCQkJCWFzc2VydFRydWUoInJlcGxhY2UgdGV4dCBtb2RpZmljYXRpb24gc3RhbXAgZmFpbGVkIiwgbW9kaWZpY2F0aW9uU3RhbXAgIT0oKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWxvbmcgbW9kaWZpY2F0aW9uU3RhbXAgPSAtMTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCW1vZGlmaWNhdGlvblN0YW1wID0gKChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCQl9Ci0JCQlzRG9jLnNldCgic2V0IHRleHQiKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJzZXQgdGV4dCBtb2RpZmljYXRpb24gc3RhbXAgZmFpbGVkIiwgbW9kaWZpY2F0aW9uU3RhbXAgIT0oKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRXaXRoTW9kaWZpY2F0aW9uU3RhbXAoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCUlEb2N1bWVudEV4dGVuc2lvbjQgZXh0NCA9IChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2M7Ci0JCQkJbG9uZyBtb2RpZmljYXRpb25TdGFtcCA9IGV4dDQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQkJZXh0NC5zZXQoInNldCB0ZXh0IiwgbW9kaWZpY2F0aW9uU3RhbXApOwotCi0JCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic2V0IHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wID09KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRUZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJc0RvYy5zZXRUZXh0KHRoaXMsICJzZXQgdGV4dCIpOwotCi0JCQlhc3NlcnRFcXVhbHMoInNldCB0ZXh0IGZhaWxlZCIsICJzZXQgdGV4dCIsIHNEb2MuZ2V0VGV4dCgpKTsKLQkJCWlmIChtb2RpZmljYXRpb25TdGFtcCA+IC0xKQotCQkJCWFzc2VydFRydWUoInNldCB0ZXh0IG1vZGlmaWNhdGlvbiBzdGFtcCBmYWlsZWQiLCBtb2RpZmljYXRpb25TdGFtcCAhPSgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RW5jb2RpbmdNZW1lbnRvKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbnVsbDsKLQkJCXNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gc0RvYy5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBlbmNvZGluZyBtZW1lbnRvIiwgbWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBWZXJpZnkgdGhhdCB0aGUgZmlyc3QgZGVsaW1pdGVyIGlzIFxyXG4gcmVnYXJkbGVzcyBvZgotCSAqIHByZWZlcmVuY2VzIG9yIHBsYXRmb3JtCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERldGVjdGVkTGluZURlbGltaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0TGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBwcmVmZXJyZWQgbGluZSBkZWxtaXRlciIsICJcclxuIiwgZGVsaW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRFbmNvZGluZ01lbWVudG8oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gbmV3IEVuY29kaW5nTWVtZW50bygpOwotCQkJc0RvYy5zZXRFbmNvZGluZ01lbWVudG8obWVtZW50byk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZ290dGVuTWVtZW50byA9IHNEb2MuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIm1lbWVudG9zIGRvbid0IG1hdGNoIiwgbWVtZW50bywgZ290dGVuTWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCBzZXREZXRlY3RlZExpbmVEZWxpbWl0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2Muc2V0UHJlZmVycmVkTGluZURlbGltaXRlcigiXG4iKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgbGluZSBkZWxpbWl0ZXIgZmFpbGVkIiwgIlxuIiwgZGVsaW0pOwotCi0JCQlzRG9jLnNldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoIlxyXG4iKTsKLQkJCWRlbGltID0gc0RvYy5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0JCQlhc3NlcnRFcXVhbHMoInNldCBsaW5lIGRlbGltaXRlciBmYWlsZWQiLCAiXHJcbiIsIGRlbGltKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nTWF0Y2hlcygpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIGEgdGVzdCB3aGVuIHRoaXMgQVBJIGlzIGNyZWF0ZWQKLQkJLy8gSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQkvLyBJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUG9zaXRpb24oKSB0aHJvd3MgQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlQb3NpdGlvbiBwID0gbmV3IFBvc2l0aW9uKDAsIDEwKTsKLQkJCVN0cmluZ1tdIGNhdGVnb3JpZXMgPSBzRG9jLmdldFBvc2l0aW9uQ2F0ZWdvcmllcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJc0RvYy5hZGRQb3NpdGlvbihjYXRlZ29yaWVzW2ldLCBwKTsKLQkJCX0KLQkJCWludCBmb3VuZCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlQb3NpdGlvbltdIHBvc2l0aW9ucyA9IHNEb2MuZ2V0UG9zaXRpb25zKGNhdGVnb3JpZXNbaV0pOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgcG9zaXRpb25zLmxlbmd0aDsgaisrKSB7Ci0JCQkJCWlmIChwb3NpdGlvbnNbal0gPT0gcCkgewotCQkJCQkJZm91bmQrKzsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBvc2l0aW9ucyIsIGNhdGVnb3JpZXMubGVuZ3RoLCBmb3VuZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqIFRlc3RzIHRoYXQgd2hlbiBhIHRhZyBpcyByZWFkLW9ubHksIGl0cyBlbnRpcmV0eSBpcyByZWFkLW9ubHkuICovCi0JcHVibGljIHZvaWQgdGVzdFJlYWRPbmx5VGFnKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSURPTU5vZGUgbm9kZSA9IChJRE9NTm9kZSkgbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigyMyk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgbm9kZSIsIG5vZGUpOwotCQkJLy8gYWxsIGRlc2NlbmRhbnRzIGFyZSByZWFkLW9ubHkKLQkJCW5vZGUuc2V0Q2hpbGRFZGl0YWJsZShmYWxzZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnRUcnVlKGRvY3VtZW50LmNvbnRhaW5zUmVhZE9ubHkoODAsIDApKTsKLQkJCQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RYTUxEb2N1bWVudExvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1N2EwODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RYTUxEb2N1bWVudExvYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9IkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQkJCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCi0JCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3RW1wdHlTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB7Ci0KLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgRW1wdHkgZG9jdW1lbnQiLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGcm9tRmlsZSgpIHsKLQkJLy8gZnJvbSBhIGZpbGUJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSUZpbGUiLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGcm9tSW5wdXRTdHJlYW0oKSB7Ci0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSAiL2ZpbGVzL3NpbXBsZS54bWwiOwotCQlTdHJpbmcgYWJzb2x1dGVGaWxlTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCkgKyBmUHJvamVjdE5hbWUgKyBmaWxlTG9jYXRpb247Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoYWJzb2x1dGVGaWxlTG9jYXRpb24sIGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElucHV0U3RyZWFtIiwgZG9jdW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3RG9jdW1lbnRGcm9tUmVhZGVyV2l0aEVuY29kaW5nUnVsZSgpIHsKLQkJCi0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSAiL2ZpbGVzL3NpbXBsZS54bWwiOwotCQlTdHJpbmcgYWJzb2x1dGVGaWxlTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCkuZ2V0VVJMKCkuZ2V0UGF0aCgpLnRvU3RyaW5nKCkgKyBmUHJvamVjdE5hbWUgKyBmaWxlTG9jYXRpb247Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoYWJzb2x1dGVGaWxlTG9jYXRpb24sIGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElucHV0U3RyZWFtIHdpdGggRW5jb2RpbmdSdWxlIiwgZG9jdW1lbnQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1RyYW5zaXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWUxYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci0KLS8qKgotICogQGF1dGhvciBuc2QKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNpdGlvblRlc3RzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBUcmFuc2l0aW9uVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0U29mdFJldmVydCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiOyAvLyROT04tTkxTLTEkCi0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiVGVzdCBDYXNlIGluIGVycm9yLiBDb3VsZCBub3QgZmluZCBmaWxlICIgKyBmaWxlUGF0aCwgZmlsZSk7IC8vJE5PTi1OTFMtMSQKLQkJSVBhdGggbG9jYXRpb25QYXRoID0gZmlsZS5nZXRMb2NhdGlvbigpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGxvY2F0aW9uUGF0aCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBkb2N1bWVudCBpbnN0YW5jZW9mIEJhc2ljU3RydWN0dXJlZERvY3VtZW50KTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTCk7IC8vJE5PTi1OTFMtMSQKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiX18iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoMiwgMCwgIjxhIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDQsIDAsICI+Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDUsIDAsICIgICIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWFzc2VydE51bGwoZSk7Ci0JCQl9Ci0JCQlkb2N1bWVudC5zZXQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQotCQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDdjYTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLlNTRU1vZGVsWE1MVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotCi0vKiAKLSAqIE1hZGUgYWJzdHJhY3QsIHNvIHdvbid0IGJlIGF1dG9tYXRpY2FsbHkgcGlja2VkIHVwIGFzIHRlc3QgKHNpbmNlIGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQpLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVW56aXBwZWRQcm9qZWN0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5uZXd0ZXN0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnRlc3RzIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0gCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vQXR0ckltcGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjYzN2EwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotcHVibGljIGNsYXNzIEF0dHJJbXBsVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29udGVudHMgPSAiPGVsZW1lbnROYW1lIGF0dHJQcmVmaXg6bG9jYWw9J2xvcmVtJyAvPiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgeG1sTmFtZXNwYWNlQ29udGVudHMgPSAiPGVsZW1lbnROYW1lIHhtbDpzcGFjZT1cInByZXNlcnZlXCIvPiI7Ci0KLQlwdWJsaWMgQXR0ckltcGxUZXN0cygpIHsKLQl9Ci0KLQlwdWJsaWMgQXR0ckltcGxUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0ckltcGxQcmVmaXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCQkKLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBkb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJubyBhdHRyaWJ1dGVzIGZvdW5kIiwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA+IDApOwotCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIHByZWZpeCB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImF0dHJQcmVmaXgiLCBhdHRyaWJ1dGUuZ2V0UHJlZml4KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRySW1wbExvY2FsTmFtZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBkb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJubyBhdHRyaWJ1dGVzIGZvdW5kIiwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA+IDApOwotCQlBdHRyIGF0dHJpYnV0ZSA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIGxvY2FsIG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJsb2NhbCIsIGF0dHJpYnV0ZS5nZXRMb2NhbE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZVVSSU9uQ3JlYXRpb24oKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUF0dHIgYXR0ciA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlQXR0cmlidXRlKCJzaW1wbGUiKTsKLQkJYXNzZXJ0TnVsbCgibmFtZXNwYWNlIHdhcyBmb3VuZCIsIGF0dHIuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQkKLQkJQXR0ciBhdHRyMiA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlQXR0cmlidXRlTlMoImh0dHA6Ly9sb3JlbS5pcHN1bSIsICJjb21wbGV4Iik7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIG5hbWVzcGFjZSBVUkkgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJodHRwOi8vbG9yZW0uaXBzdW0iLCBhdHRyMi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCUF0dHIgYXR0cjMgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUF0dHJpYnV0ZU5TKG51bGwsICJjb21wbGV4Iik7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIG5hbWVzcGFjZSBVUkkgd2FzIG5vdCBhcyBleHBlY3RlZCIsIG51bGwsIGF0dHIzLmdldE5hbWVzcGFjZVVSSSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TnVsbEF0dHJpYnV0ZVZhbHVlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJQXR0ciBhdHRyaWJ1dGUgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUF0dHJpYnV0ZSgiYXR0ciIpOwotCQl0cnkgewotCQkJYXR0cmlidXRlLnNldE5vZGVWYWx1ZShudWxsKTsKLQkJfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7Ci0JCQlmYWlsKCJTZXR0aW5nIGEgbnVsbCBub2RlIHZhbHVlIGNhdXNlZCBhIE51bGxQb2ludGVyRXhjZXB0aW9uLiIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEF0dHJpYnV0ZU5TRm9yWE1MTmFtZXNwYWNlKCkgewotCQlmaW5hbCBTdHJpbmcgeG1sbnMgPSAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIjsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCh4bWxOYW1lc3BhY2VDb250ZW50cyk7Ci0KLQkJRWxlbWVudCBlbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJU3RyaW5nIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyh4bWxucywgInNwYWNlIik7Ci0JCWFzc2VydEVxdWFscygiRGlkIG5vdCBmaW5kIHNwYWNlIGF0dHJpYnV0ZSBmb3IgWE1MIE5hbWVzcGFjZSIsICJwcmVzZXJ2ZSIsIHZhbHVlKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9FbGVtZW50SW1wbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vRWxlbWVudEltcGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODVlNTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9FbGVtZW50SW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50SW1wbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnRlbnRzID0gIjxlbGVtZW50UHJlZml4OmxvY2FsTmFtZSBhdHRyUHJlZml4OmxvY2FsPSdsb3JlbScgeG1sbnM6ZWxlbWVudFByZWZpeD0ndXJuOnByZWZpeCcgeG1sbnM6YXR0cmlidXRlUHJlZml4PSd1cm46YXR0cmlidXRlOnByZWZpeCcgLz4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGRlY2wgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBFbGVtZW50SW1wbFRlc3RzKCkgewotCX0KLQotCXB1YmxpYyBFbGVtZW50SW1wbFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbGVtZW50SW1wbFByZWZpeCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgcHJlZml4IHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiZWxlbWVudFByZWZpeCIsIGRvY3VtZW50RWxlbWVudC5nZXRQcmVmaXgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVsZW1lbnRJbXBsTG9jYWxOYW1lKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50IGVsZW1lbnQgZm91bmQiLCBkb2N1bWVudEVsZW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBsb2NhbCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAibG9jYWxOYW1lIiwgZG9jdW1lbnRFbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0ckJhc2VkRWxlbWVudE5hbWVzcGFjZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJYXNzZXJ0Tm90TnVsbCgiTmFtZXNwYWNlIHdhcyBub3QgZm91bmQuIiwgZG9jdW1lbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKTsKLQkJU3RyaW5nIG5hbWVzcGFjZSA9IGRvY3VtZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbG9jYWwgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgInVybjpwcmVmaXgiLCBuYW1lc3BhY2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROYW1lc3BhY2VVUklPbkNyZWF0aW9uKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoInNpbXBsZSIpOwotCQlhc3NlcnROdWxsKCJuYW1lc3BhY2Ugd2FzIGZvdW5kIiwgZWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLQkJRWxlbWVudCBlbGVtZW50MiA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vbG9yZW0uaXBzdW0iLCAiY29tcGxleCIpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJJIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiaHR0cDovL2xvcmVtLmlwc3VtIiwgZWxlbWVudDIuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQlFbGVtZW50IGVsZW1lbnQzID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50TlMobnVsbCwgImNvbXBsZXgiKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbmFtZXNwYWNlIFVSSSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgbnVsbCwgZWxlbWVudDMuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZU5vQ2hpbGRyZW4oKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyb290Iik7Ci0JCWRvY3VtZW50LmFwcGVuZENoaWxkKHJvb3QpOwotCi0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotCQlhc3NlcnRFcXVhbHMoMCwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZUNoaWxkcmVuKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGRlY2wpOwotCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicm9vdCIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQotCQlOb2RlTGlzdCBjaGlsZHJlbiA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGNoaWxkcmVuLmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVDaGlsZHJlbkJ5U2FtZU5hbWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjaGlsZCIpKTsKLQotCQlOb2RlTGlzdCBjaGlsZHJlbiA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNoaWxkIik7Ci0JCWFzc2VydEVxdWFscygyLCBjaGlsZHJlbi5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OnJvb3QiKTsKLQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRlc3QiLCAiaHR0cDovL3Rlc3QiKTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7Ci0JCXJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDpjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OmNoaWxkIikpOwotCi0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vdGVzdCIsICIqIik7Ci0JCWFzc2VydEVxdWFscygyLCBjaGlsZHJlbi5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEVsZW1lbnRzQnlUYWdOYW1lTlNUZXN0TlMoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoZGVjbCk7Ci0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OnJvb3QiKTsKLQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRlc3QiLCAiaHR0cDovL3Rlc3QiKTsKLQkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOnRlc3QyIiwgImh0dHA6Ly90ZXN0MiIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OmNoaWxkIikpOwotCQlyb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q6Y2hpbGQiKSk7Ci0JCXJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDI6Y2hpbGQiKSk7Ci0KLQkJTm9kZUxpc3QgY2hpbGRyZW4gPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly90ZXN0IiwgIioiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGNoaWxkcmVuLmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVOU0FueU5TKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGRlY2wpOwotCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDpyb290Iik7Ci0JCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp0ZXN0IiwgImh0dHA6Ly90ZXN0Iik7Ci0JCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczp0ZXN0MiIsICJodHRwOi8vdGVzdDIiKTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7Ci0JCXJvb3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDpjaGlsZCIpKTsKLQkJcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0OmNoaWxkIikpOwotCQlyb290LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyOmNoaWxkIikpOwotCi0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgIioiKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGNoaWxkcmVuLmdldExlbmd0aCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTmFtZVZhbGlkYXRvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhjNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5OYW1lVmFsaWRhdG9yOwotCi1wdWJsaWMgY2xhc3MgTmFtZVZhbGlkYXRvclRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBpbnQgblRyaWFscyA9IDEwMDsKLQotCXB1YmxpYyBOYW1lVmFsaWRhdG9yVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdChpbnQgdGVzdE51bWJlciwgU3RyaW5nIHRlc3RTdHJpbmcsIEJvb2xlYW4gZXhwZWN0ZWRWYWxpZGl0eSkgewotLy8JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlib29sZWFuIGlzVmFsaWQgPSBOYW1lVmFsaWRhdG9yLmlzVmFsaWQodGVzdFN0cmluZyk7Ci0JCWFzc2VydEVxdWFscygidGVzdE51bWJlcjogIiArIHRlc3ROdW1iZXIsIGV4cGVjdGVkVmFsaWRpdHkuYm9vbGVhblZhbHVlKCksIGlzVmFsaWQpOwotLy8JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKLQkJT2JqZWN0W11bXSB0ZXN0ZWVzID0gbmV3IE9iamVjdFtdW117Ci0JCQkJCXsiaW5pdGlhbCIsQm9vbGVhbi5UUlVFfSwgLy8wCi0JCQkJCXsiZm9vIixCb29sZWFuLlRSVUV9LAkgIC8vMQotCQkJCQl7IjQiLEJvb2xlYW4uRkFMU0V9LAkgIC8vMgotCQkJCQl7Ijk5OTkiLCBCb29sZWFuLkZBTFNFfSwgIC8vMwotCQkJCQl7ImY5OTk5IiwgQm9vbGVhbi5UUlVFfSwgIC8vNAotCQkJCQl7IiIsIEJvb2xlYW4uRkFMU0V9LCAgICAgIC8vNQotCQkJCQl7ImdvdCBzcGFjZSIsIEJvb2xlYW4uRkFMU0V9LCAvLzYKLQkJCQkJeyIgc3BhY2ViZWZvcmUiLCBCb29sZWFuLkZBTFNFfSwgLy83Ci0JCQkJCXsic3BhY2VhZnRlciAiLCBCb29sZWFuLkZBTFNFfSwgIC8vOAotCQkJCQl7Im5zOm5hbWVzcGFjZSIsIEJvb2xlYW4uVFJVRX0sICAvLzkKLQkJCQkJeyI6ZnVubnlucyIsIEJvb2xlYW4uVFJVRX0sICAgICAvLzEwCi0JCQkJCS8qIElTU1VFOiBpcyAiZW5kbnM6IiByZWFsbHkgdmFsaWQgbmFtZSAqLwotCQkJCQl7ImVuZG5zOiIsIEJvb2xlYW4uVFJVRX0sICAgLy8xMQotCQkJCQl7InVzX3VuZGVyc2NvcmUiLCBCb29sZWFuLlRSVUV9LCAgLy8xMgotCQkJCQl7Il91bmRlcnNjb3JlIiwgQm9vbGVhbi5UUlVFfSwgICAvLzEzCi0JCQkJCXsidW5kZXJzY29yZV8iLCBCb29sZWFuLlRSVUV9LCAgICAvLzE0Ci0JCQkJCXsiYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplYXZlcnlsb25nbmFtZXRoYXRzaG91bGRnb292ZXJidWZmZXJzaXplIiwgQm9vbGVhbi5UUlVFfSwgLy8xNQotCQkJCQl7IjxicmFja2V0IiwgQm9vbGVhbi5GQUxTRX0sIC8vMTYKLQkJCQkJeyJicmFja2V0PCIsIEJvb2xlYW4uRkFMU0V9LCAvLzE3Ci0JCQkJCXsiYnJhY2tldCIsIEJvb2xlYW4uVFJVRX0sIC8vMTgKLQkJCQkJeyJwZXIuaW9kIiwgQm9vbGVhbi5UUlVFfSwgLy8xOQotCQkJCQl9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRlc3RlZXMubGVuZ3RoOyBpKyspIHsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJZG9UZXN0KGksIChTdHJpbmcpdGVzdGVlc1tpXVswXSwgKEJvb2xlYW4pIHRlc3RlZXNbaV1bMV0pOwotCQkJfQotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUNvbnRhaW5lclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUNvbnRhaW5lclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NTA5NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVDb250YWluZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBOb2RlQ29udGFpbmVyVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVF8xID0gIjxyb290PjxhIGlkPSdhJz48L2E+PC9yb290PiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfMiA9ICI8cm9vdD48YSBpZD0nYSc+PGIgaWQ9J2InPjwvYj48L2E+PC9yb290PiI7Ci0KLQkvKioKLQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIE5vZGVDb250YWluZXJUZXN0cygpIHsKLQkJc3VwZXIoIlRlc3QgTm9kZUNvbnRhaW5lciIpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yCi0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhpcyB0ZXN0IHJ1bgotCSAqLwotCXB1YmxpYyBOb2RlQ29udGFpbmVyVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFwcGVuZFZhbGlkQ2hpbGQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoQ09OVEVOVF8xKTsKLQotCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGEgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkICdhJyBpbiAiICsgQ09OVEVOVF8xLCBhKTsKLQotCQlFbGVtZW50IGIgPSBkb2MuY3JlYXRlRWxlbWVudCgiYiIpOwotCQliLnNldEF0dHJpYnV0ZSgiaWQiLCAiYiIpOwotCi0JCXRyeSB7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCQl9IGNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJZmFpbCgiU2hvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGFwcGVuZCAiICsgYiArICIgYXMgYSBjaGlsZCBvZiAiICsgYSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kUGFyZW50QXNDaGlsZE9mQ2hpbGQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoQ09OVEVOVF8yKTsKLQotCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGEgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkICdhJyBpbiAiICsgQ09OVEVOVF8yLCBhKTsKLQotCQlFbGVtZW50IGIgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoImIiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGZpbmQgZWxlbWVudCB3aXRoIGlkICdiJyBpbiAiICsgQ09OVEVOVF8yLCBiKTsKLQotCQlib29sZWFuIHRocmV3RXhjZXB0aW9uID0gZmFsc2U7Ci0JCXRyeSB7Ci0JCQliLmFwcGVuZENoaWxkKGEpOwotCQl9IGNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0RXF1YWxzKCJXcm9uZyB0eXBlIG9mIGV4Y2VwdGlvbiB3YXMgdGhyb3duOiAiICsgZSwgRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUiwgZS5jb2RlKTsKLQkJCXRocmV3RXhjZXB0aW9uID0gdHJ1ZTsKLQkJfQotCi0JCWFzc2VydFRydWUoIkEgRE9NRXhjZXB0aW9uIHdpdGggY29kZSBISUVSQVJDSFlfUkVRVUVTVF9FUlIgc2hvdWxkIGhhdmUgYmVlbiB0aHJvd24gd2hlbiBhcHBlbmRpbmcgYSBwYXJlbnQgdG8gaXRzIG93biBjaGlsZCIsIHRocmV3RXhjZXB0aW9uKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9Ob2RlTGlzdEltcGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVMaXN0SW1wbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZWM2Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVMaXN0SW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuTm9kZUxpc3RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIE5vZGVMaXN0SW1wbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQWNjZXNzb3JOb2RlTGlzdCBleHRlbmRzIE5vZGVMaXN0SW1wbCB7Ci0JCXB1YmxpYyBOb2RlIGFwcGVuZE5vZGUoTm9kZSBub2RlKSB7Ci0JCQlyZXR1cm4gc3VwZXIuYXBwZW5kTm9kZShub2RlKTsKLQkJfQotCi0JCXB1YmxpYyBOb2RlIGluc2VydE5vZGUoTm9kZSBub2RlLCBpbnQgaW5kZXgpIHsKLQkJCXJldHVybiBzdXBlci5pbnNlcnROb2RlKG5vZGUsIGluZGV4KTsKLQkJfQotCi0JCXB1YmxpYyBOb2RlIHJlbW92ZU5vZGUoaW50IGluZGV4KSB7Ci0JCQlyZXR1cm4gc3VwZXIucmVtb3ZlTm9kZShpbmRleCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBOb2RlTGlzdEltcGxUZXN0cygpIHsKLQl9Ci0KLQlwdWJsaWMgTm9kZUxpc3RJbXBsVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydEF0SW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlhc3NlcnRFcXVhbHMoIm5vbi16ZXJvIGxlbmd0aCBhdCBzdGFydCIsIDAsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MCIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QxIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDIiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q0IikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDUiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NiIpKTsKLQotCQlsaXN0Lmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdCIpLCAzKTsKLQkJCi0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgOCwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoInRlc3QwIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDAiLCBsaXN0Lml0ZW0oMCkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QxIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDEiLCBsaXN0Lml0ZW0oMSkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QyIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDIiLCBsaXN0Lml0ZW0oMikuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Qgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICAidGVzdCIsICBsaXN0Lml0ZW0oMykuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QzIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDMiLCBsaXN0Lml0ZW0oNCkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q0IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDQiLCBsaXN0Lml0ZW0oNSkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q1IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDUiLCBsaXN0Lml0ZW0oNikuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q2IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDYiLCBsaXN0Lml0ZW0oNykuZ2V0TG9jYWxOYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGcm9tSW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDAiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MSIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDMiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NCIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q1IikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHNldHVwIiwgNywgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJTm9kZSBleGNpc2VkID0gbGlzdC5yZW1vdmVOb2RlKDMpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QzIHdhcyBub3QgdGhlIG9uZSByZW1vdmVkIiwgInRlc3QzIiwgZXhjaXNlZC5nZXRMb2NhbE5hbWUoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgcmVtb3ZhbCIsIDYsIGxpc3QuZ2V0TGVuZ3RoKCkpOwkJCi0JCWFzc2VydEVxdWFscygidGVzdDAgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MCIsIGxpc3QuaXRlbSgwKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDEgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MSIsIGxpc3QuaXRlbSgxKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDIgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MiIsIGxpc3QuaXRlbSgyKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDQgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NCIsIGxpc3QuaXRlbSgzKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDUgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NSIsIGxpc3QuaXRlbSg0KS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDYgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NiIsIGxpc3QuaXRlbSg1KS5nZXRMb2NhbE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydEF0TmVnYXRpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCS8vIGFwcGVuZHMgb24gYmFkIHZhbHVlCi0JCWxpc3QuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0LTEiKSwtMSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIGluc2VydCBhdCBuZWdhdGl2ZSBpbmRleCIsIDEsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGcm9tTmVnYXRpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0LTEiKSk7Ci0JCS8vIGlnbm9yZXMgYmFkIGluZGV4Ci0JCWxpc3QucmVtb3ZlTm9kZSgtMSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHJlbW92YWwgYXQgbmVnYXRpdmUgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0QXRFeGNlc3NpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCS8vIGFwcGVuZHMgb24gYmFkIHZhbHVlCi0JCWxpc3QuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpLCAzKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgaW5zZXJ0IGF0IG91dCBvZiBib3VuZHMgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRnJvbUV4Y2Vzc2l2ZUluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QwIikpOwotCQkvLyBpZ25vcmVzIGJhZCBpbmRleAotCQlsaXN0LnJlbW92ZU5vZGUoMyk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHJlbW92YWwgYXQgbm9uZXhpc3RlbnQgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJub24temVybyBsZW5ndGggYXQgc3RhcnQiLCAwLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDEiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyIikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDIsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCAzLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlOb2RlIGVsZW1lbnQ0ID0gbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q0IikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDQsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q0IG5vdCByZXR1cm5lZCBmcm9tIGFwcGVuZCIsICJ0ZXN0NCIsIGVsZW1lbnQ0LmdldExvY2FsTmFtZSgpKTsKLQkJCi0JCU5vZGUgZWxlbWVudDUgPSBsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDUiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgNSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDUgbm90IHJldHVybmVkIGZyb20gYXBwZW5kIiwgInRlc3Q1IiwgZWxlbWVudDUuZ2V0TG9jYWxOYW1lKCkpOwotCQkKLQkJTm9kZSBlbGVtZW50NiA9IGxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCA2LCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NiBub3QgcmV0dXJuZWQgZnJvbSBhcHBlbmQiLCAidGVzdDYiLCBlbGVtZW50Ni5nZXRMb2NhbE5hbWUoKSk7Ci0JCQotCQlOb2RlIGVsZW1lbnQ3ID0gbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q3IikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDcsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q3IG5vdCByZXR1cm5lZCBmcm9tIGFwcGVuZCIsICJ0ZXN0NyIsIGVsZW1lbnQ3LmdldExvY2FsTmFtZSgpKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9SZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVjZjNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9SZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudXRpbC5OdWxsSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRlc3RzIHBlcmZvcm1hbmNlIG1pbmltaXphdGlvbiBvZiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgZm9yIFJlZ2lvbkNoYW5nZWQKLSAqIGV2ZW50cywgd2hpY2ggd291bGQgYWZmZWN0IGFyZWFzIGxpa2UgZm9ybWF0dGluZyBwZXJmb3JtYW5jZQotICovCi1wdWJsaWMgY2xhc3MgUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cygpIHsKLQkJdGhpcygiUmVnaW9uQ2hhbmdlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiB0ZXN0cyIpOwotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kV2hpdGVzcGFjZVRvQXR0cmlidXRlTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMCwgIiAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0JCQkKLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYiA9IGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBcHBlbmRXaGl0ZXNwYWNlVG9FcXVhbFNpZ24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChnZXROYW1lKCkgKyAiLnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTF9OwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgSU5vZGVBZGFwdGVyKCkgewotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQkJCQljaGFuZ2VkWzBdID0gZXZlbnRUeXBlOwotCQkJCX0KLQkJCX07Ci0JCQkoKElOb2RlTm90aWZpZXIpIGJlZm9yZSkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgIiAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGI9ICBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXBwZW5kV2hpdGVzcGFjZVRvVGFnTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJKChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudCkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDIsIDAsICIgIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkKLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhICBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFwcGVuZFdoaXRlc3BhY2VUb0F0dHJpYnV0ZVZhbHVlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiPSBjPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0KLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDcsIDAsICIgIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPSBjID48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VBdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0JCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTEsIC0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwcml2YXRlIGludCBlQ291bnQgPSAwOwotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQkKLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgiUmVjZWl2ZWQgbW9yZSB0aGFuIDIgZXZlbnRzLiIsIGVDb3VudCA8IDIpOwotCQkJCQljaGFuZ2VkW2VDb3VudCsrXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAwLCAiZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQkKLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgUmVtb3ZlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiBldmVudCBub3Qgc2VudCAiICsgY2hhbmdlZFswXSArICIgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgSU5vZGVOb3RpZmllci5SRU1PVkUsIGNoYW5nZWRbMF0pOwotCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBBZGRlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiBldmVudCBub3Qgc2VudCAiICsgY2hhbmdlZFsxXSArICIgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgSU5vZGVOb3RpZmllci5BREQsIGNoYW5nZWRbMV0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiZD0gYz48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VBdHRyaWJ1dGVWYWx1ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgImQiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygiUHJvcGVydHkgQ2hhbmdlZCBBZGFwdGVyIE5vdGlmaWNhdGlvbiBldmVudCBub3Qgc2VudCAiICsgY2hhbmdlZFswXSArICIgIiArc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCBJTm9kZU5vdGlmaWVyLkNIQU5HRSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGI9IGRjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0JcHVibGljIHZvaWQgdGVzdENoYW5nZVRhZ05hbWUxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0JCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTF9OwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgSU5vZGVBZGFwdGVyKCkgewotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQkKLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudCkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDEsIDAsICJkIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkKLQkJCWFzc2VydE5vdFNhbWUoIkRPTSBOb2RlIG5vdCByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoIlN0cnVjdHVyZSBDaGFuZ2VkIG5vdGlmaWNhdGlvbiBub3Qgc2VudCB0byBhZGFwdGVyICIgKyBjaGFuZ2VkWzBdICsgIiB0byBwYXJlbnQgIiArc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCBJTm9kZU5vdGlmaWVyLlNUUlVDVFVSRV9DSEFOR0VELCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGRhIGI9IGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VUYWdOYW1lMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgZG9jdW1lbnQpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyLCAwLCAiZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQkKLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCi0JCQlhc3NlcnROb3RTYW1lKCJET00gTm9kZSBub3QgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJTdHJ1Y3R1cmUgQ2hhbmdlZCBub3RpZmljYXRpb24gbm90IHNlbnQgdG8gYWRhcHRlciAiICsgY2hhbmdlZFswXSArICIgdG8gcGFyZW50ICIgK3N0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgSU5vZGVOb3RpZmllci5TVFJVQ1RVUkVfQ0hBTkdFRCwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhZCBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlUXVvdGVkQXR0cmlidXRlVmFsdWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChnZXROYW1lKCkgKyAiLnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IFwiY1wiPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0KLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDcsIDAsICJkIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJQcm9wZXJ0eSBDaGFuZ2VkIEFkYXB0ZXIgTm90aWZpY2F0aW9uIGV2ZW50IG5vdCBzZW50ICIgKyBjaGFuZ2VkWzBdICsgIiAiICtzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIElOb2RlTm90aWZpZXIuQ0hBTkdFLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYj0gXCJkY1wiPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlcGVuZFNwYWNlVG9BdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiPSBjPjwvYT4iKTsKLQkKLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCQotCQkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQkJCQljaGFuZ2VkWzBdID0gZXZlbnRUeXBlOwotCQkJCX0KLQkJCX07Ci0JCQkoKElOb2RlTm90aWZpZXIpIGJlZm9yZSkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDMsIDAsICIgIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkKLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhICBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlcGVuZFNwYWNlVG9FcXVhbFNpZ24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChnZXROYW1lKCkgKyAiLnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0JCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMCwgIiAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYiA9IGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVwZW5kU3BhY2VUb0F0dHJpYnV0ZVZhbHVlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA2LCAwLCAiICIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQotCQkJTm9kZSBhZnRlciA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYj0gIGM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVUcmFpbGluZ1NwYWNlRnJvbUVxdWFsU2lnbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAxLCAiIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPWM+PC9hPiIsIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21BdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiID0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAxLCAiIik7Ci0JCQlhc3NlcnRUcnVlKCJSZWdpb24gaW5zdGFuY2VzIGNoYW5nZWQiLCBBcnJheXMuZXF1YWxzKG9yaWdpbmFsUmVnaW9ucywgc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKSkpOwotCi0JCQlhc3NlcnRUcnVlKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpOwotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21BdHRyaWJ1dGVWYWx1ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYiA9IGMgPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0KLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDgsIDEsICIiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGIgPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21UYWdOYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSAgYj0gYz48L2E+Iik7Ci0JCi0JCQlOb2RlIGJlZm9yZSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWZpbmFsIGludFtdIGNoYW5nZWQgPSBuZXcgaW50W117LTF9OwotCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBuZXcgSU5vZGVBZGFwdGVyKCkgewotCQkJCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJCQkJcmV0dXJuIHR5cGUuZXF1YWxzKFJlZ2lvbkNoYW5nZWRBZGFwdGVyTm90aWZpY2F0aW9uVGVzdHMuY2xhc3MpOwotCQkJCX0KLQkKLQkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJCQkJY2hhbmdlZFswXSA9IGV2ZW50VHlwZTsKLQkJCQl9Ci0JCQl9OwotCQkJKChJTm9kZU5vdGlmaWVyKSBiZWZvcmUpLmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCQkoKElOb2RlTm90aWZpZXIpIGRvY3VtZW50KS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQotCQkJT2JqZWN0W10gb3JpZ2luYWxSZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkuZ2V0UmVnaW9ucygpLnRvQXJyYXkoKTsKLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMiwgMSwgIiIpOwotCQkJYXNzZXJ0VHJ1ZSgiUmVnaW9uIGluc3RhbmNlcyBjaGFuZ2VkIiwgQXJyYXlzLmVxdWFscyhvcmlnaW5hbFJlZ2lvbnMsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCkpKTsKLQotCQkJYXNzZXJ0VHJ1ZShmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KTsKLQkKLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCi0JCQlhc3NlcnRFcXVhbHMoIk5vZGUgcmVwbGFjZWQiLCBiZWZvcmUsIGFmdGVyKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGFkYXB0ZXIgbm90aWZpY2F0aW9uIGV2ZW50IHNlbnQgIiArIHN0cnVjdHVyZWREb2N1bWVudC5nZXQoKSwgLTEsIGNoYW5nZWRbMF0pOwotCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnQgY29udGVudCIsICI8YSBiPSBjPjwvYT4iLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlVHJhaWxpbmdTcGFjZUZyb21UYWdOYW1lMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGdldE5hbWUoKSArICIueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgIGI9IGM+PC9hPiIpOwotCQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmaW5hbCBpbnRbXSBjaGFuZ2VkID0gbmV3IGludFtdey0xfTsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbmV3IElOb2RlQWRhcHRlcigpIHsKLQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQkJCXJldHVybiB0eXBlLmVxdWFscyhSZWdpb25DaGFuZ2VkQWRhcHRlck5vdGlmaWNhdGlvblRlc3RzLmNsYXNzKTsKLQkJCQl9Ci0JCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCQkJKChJTm9kZU5vdGlmaWVyKSBkb2N1bWVudCkuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkKLQkJCU9iamVjdFtdIG9yaWdpbmFsUmVnaW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpLmdldFJlZ2lvbnMoKS50b0FycmF5KCk7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDMsIDEsICIiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0JCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQotCQkJYXNzZXJ0RXF1YWxzKCJOb2RlIHJlcGxhY2VkIiwgYmVmb3JlLCBhZnRlcik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBhZGFwdGVyIG5vdGlmaWNhdGlvbiBldmVudCBzZW50ICIgKyBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KCksIC0xLCBjaGFuZ2VkWzBdKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50IGNvbnRlbnQiLCAiPGEgYj0gYz48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2VUcmFpbGluZ1NwYWNlb2ZFcXVhbFNpZ25XaXRoVHdvU3BhY2VzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZ2V0TmFtZSgpICsgIi54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZmluYWwgaW50W10gY2hhbmdlZCA9IG5ldyBpbnRbXXstMX07Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBJTm9kZUFkYXB0ZXIoKSB7Ci0JCQkJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJCQlyZXR1cm4gdHlwZS5lcXVhbHMoUmVnaW9uQ2hhbmdlZEFkYXB0ZXJOb3RpZmljYXRpb25UZXN0cy5jbGFzcyk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCQkJCWNoYW5nZWRbMF0gPSBldmVudFR5cGU7Ci0JCQkJfQotCQkJfTsKLQkJCSgoSU5vZGVOb3RpZmllcikgYmVmb3JlKS5hZGRBZGFwdGVyKGFkYXB0ZXIpOwotCi0JCQlPYmplY3RbXSBvcmlnaW5hbFJlZ2lvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpOwotCQkJU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZm1FdmVudCA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAwLCAiICAiKTsKLQkJCWFzc2VydFRydWUoIlJlZ2lvbiBpbnN0YW5jZXMgY2hhbmdlZCIsIEFycmF5cy5lcXVhbHMob3JpZ2luYWxSZWdpb25zLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKS5nZXRSZWdpb25zKCkudG9BcnJheSgpKSk7Ci0KLQkJCWFzc2VydFRydWUoZm1FdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCk7Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWFzc2VydEVxdWFscygiTm9kZSByZXBsYWNlZCIsIGJlZm9yZSwgYWZ0ZXIpOwotCQkJCi0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgYWRhcHRlciBub3RpZmljYXRpb24gZXZlbnQgc2VudCAiICsgc3RydWN0dXJlZERvY3VtZW50LmdldCgpLCAtMSwgY2hhbmdlZFswXSk7Ci0KLQkJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudCBjb250ZW50IiwgIjxhIGI9ICAgYz48L2E+Iiwgc3RydWN0dXJlZERvY3VtZW50LmdldCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZDFhMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IEVjbGlwc2UgRm91bmRhdGlvbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBN+GxsZXIgLSBqZXNwZXJAc2Vsc2thYmV0Lm9yZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LkFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5TdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci0KLS8qKgotICogQGRlcHJlY2F0ZWQgVXNlIFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwgaW5zdGVhZAotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNQTElUX01VTFRJX0FUVFJTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gIlx0IjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ0xFQVJfQUxMX0JMQU5LX0xJTkVTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVfV0lEVEggPSA3MjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0KLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQotCXB1YmxpYyBUZXN0Rm9ybWF0UHJvY2Vzc29yWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvcjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBib29sZWFuIHJlc2V0UHJlZmVyZW5jZXMpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWlmIChyZXNldFByZWZlcmVuY2VzKQotCQkJCXJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKTsKLQotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoYmVmb3JlTW9kZWwpOwotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZvcm1hdHRlZEJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYmVmb3JlTW9kZWwuc2F2ZShmb3JtYXR0ZWRCeXRlcyk7IC8vICJiZWZvcmVNb2RlbCIgc2hvdWxkIG5vdyBiZQotCQkJLy8gYWZ0ZXIgdGhlIGZvcm1hdHRlcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGFmdGVyQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJU3RyaW5nIGFjdHVhbENvbnRlbnRzID0gbmV3IFN0cmluZyhmb3JtYXR0ZWRCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJGb3JtYXR0ZWQgZG9jdW1lbnQgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZC5cbkV4cGVjdGVkIENvbnRlbnRzOlxuIiArIGV4cGVjdGVkQ29udGVudHMgKyAiXG5BY3R1YWwgQ29udGVudHM6XG4iICsgYWN0dWFsQ29udGVudHMsIGZTdHJpbmdDb21wYXJlVXRpbC5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkQ29udGVudHMsIGFjdHVhbENvbnRlbnRzKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkKLQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChhZnRlck1vZGVsICE9IG51bGwpCi0JCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCkgewotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aChNQVhfTElORV9XSURUSCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhDTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoSU5ERU5UKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoU1BMSVRfTVVMVElfQVRUUlMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVYbWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sIiwgInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTU3MTYKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sIiwgInRlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVUZXh0Tm9kZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwiLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTTEZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzEwODA3NAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wiLCAidGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50aXR5Rm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTAyMDc2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9lbnRpdGllcy54bWwiLCAidGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlUENEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHODQ2ODgKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFByZXNlcnZlUENEQVRBQ29udGVudCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRQcmVzZXJ2ZVBDREFUQUNvbnRlbnQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sIiwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUNEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTYxMzMwCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sIik7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2VjZGF0YTIueG1sIiwgInRlc3RmaWxlcy94bWwvdXNlY2RhdGEyLWZtdC54bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3BsaXRBdHRyaWJ1dGVzRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTEzNTg0Ci0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KGZhbHNlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQtbm9hbGlnbi1mbXQueG1sIiwgZmFsc2UpOwotCi0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRBbGlnbkVuZEJyYWNrZXQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LW5vYWxpZ24tZm10LnhtbCIsIGZhbHNlKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGlnbkVuZEJyYWNrZXRGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTM1ODQKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sIiwgZmFsc2UpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0UGFydGl0aW9uRm9ybWF0dGVyWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzN2Y3MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuTWFsZm9ybWVkVHJlZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LmVkaXRzLlRleHRFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5mb3JtYXR0ZXIuRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZm9ybWF0dGVyLlhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5TdHJpbmdDb21wYXJlVXRpbDsKLQotcHVibGljIGNsYXNzIFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlciBwYXJ0aXRpb25Gb3JtYXR0ZXI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlwYXJ0aXRpb25Gb3JtYXR0ZXIgPSBuZXcgRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlcigpOwotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCXRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNhbid0IGZpbGUgcmVzb3VyY2Ugc3RyZWFtICIgKyBmaWxlbmFtZSk7Ci0JCQlmaW5hbCBTdHJpbmcgYmFzZUZpbGUgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKGZpbGVuYW1lKS50b1N0cmluZygpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGJhc2VGaWxlLCBpblN0cmVhbSwgbmV3IFVSSVJlc29sdmVyKCkgewotCi0JCQkJU3RyaW5nIGZCYXNlID0gYmFzZUZpbGU7Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldEZpbGVCYXNlTG9jYXRpb24oKSB7Ci0JCQkJCXJldHVybiBmQmFzZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSkgewotCQkJCQlyZXR1cm4gZ2V0TG9jYXRpb25CeVVSSSh1cmksIGZCYXNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UpIHsKLQkJCQkJaW50IGxhc3RTbGFzaCA9IGJhc2VSZWZlcmVuY2UubGFzdEluZGV4T2YoIi8iKTsKLQkJCQkJaWYgKGxhc3RTbGFzaCA+IDApCi0JCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZS5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoICsgMSkgKyB1cmk7Ci0JCQkJCXJldHVybiBiYXNlUmVmZXJlbmNlOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpLCBTdHJpbmcgYmFzZVJlZmVyZW5jZSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBiYXNlUmVmZXJlbmNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElDb250YWluZXIgZ2V0Um9vdExvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0VVJJU3RyZWFtKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShnZXRMb2NhdGlvbkJ5VVJJKHVyaSkpOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHNldEZpbGVCYXNlTG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKSB7Ci0JCQkJCXRoaXMuZkJhc2UgPSBuZXdMb2NhdGlvbjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IG5ld1Byb2plY3QpIHsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgsIFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcykgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBiZWZvcmVNb2RlbCA9IG51bGwsIGFmdGVyTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJYmVmb3JlTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYmVmb3JlUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYmVmb3JlUGF0aCwgYmVmb3JlTW9kZWwpOwotCi0JCQlhZnRlck1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGFmdGVyUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYWZ0ZXJQYXRoLCBhZnRlck1vZGVsKTsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IGJlZm9yZU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCi0JCQlTdHJpbmcgbm9ybWFsaXplZENvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlub3JtYWxpemVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKG5vcm1hbGl6ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCW5vcm1hbGl6ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2Uobm9ybWFsaXplZENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCWRvY3VtZW50LnNldChub3JtYWxpemVkQ29udGVudHMpOwotCQkJCi0JCQlpZiAocHJlZnMgPT0gbnVsbCkKLQkJCQlwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJCVRleHRFZGl0IGVkaXQgPSBwYXJ0aXRpb25Gb3JtYXR0ZXIuZm9ybWF0KGJlZm9yZU1vZGVsLCAwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSwgcHJlZnMpOwotCQkJdHJ5IHsKLQkJCQllZGl0LmFwcGx5KGRvY3VtZW50KTsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRUcmVlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCVN0cmluZyBhY3R1YWxDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCi0JCQkvKiBNYWtlIHNvbWUgYWRqdXN0bWVudHMgdG8gaWdub3JlIGNyb3NzIHBsYXRmb3JtIGxpbmUgZGVsaW1pdGVyIGlzc3VlcyAqLwotCQkJZXhwZWN0ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCWV4cGVjdGVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGV4cGVjdGVkQ29udGVudHMsICJcciIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCQotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQuXG5FeHBlY3RlZCBDb250ZW50czpcbiIgKyBleHBlY3RlZENvbnRlbnRzICsgIlxuQWN0dWFsIENvbnRlbnRzOlxuIiArIGFjdHVhbENvbnRlbnRzLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihleHBlY3RlZENvbnRlbnRzLCBhY3R1YWxDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlWG1sKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaGl0ZXNwYWNlRm9ybWF0WFNEKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDE5NDY5OAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1uZXdmbXQueG1sIiwgcHJlZnMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTE1NzE2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lVGV4dE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyByZXN1bHRzIGFyZSBkaWZmZXJlbnQgdGhhbiBvbGQgZm9ybWF0dGVyCi0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXModHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwiLCAidGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sIiwgcHJlZnMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0xGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMDgwNzQKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsIiwgInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudGl0eUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJLy8gQlVHMTAyMDc2Ci0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sIiwgInRlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlc2VydmVQQ0RBVEFGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUc4NDY4OAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFBDRGF0YVdoaXRlc3BhY2VTdHJhdGVneShYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMuUFJFU0VSVkUpOwotCQlwcmVmcy5zZXRDbGVhckFsbEJsYW5rTGluZXModHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sIiwgcHJlZnMpOwotCi0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJcHJlZnMuc2V0UENEYXRhV2hpdGVzcGFjZVN0cmF0ZWd5KFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcy5DT0xMQVBTRSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlQ0RBVEFGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNjEzMzAKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLWZtdC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlQ0RBVEFGb3JtYXQyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwiLCAidGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTcGxpdEF0dHJpYnV0ZXNGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTM1ODQKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQkvLyB0aGUgYmVsb3cgdGVzdHMgYXJlIHNsaWdodHkgZGlmZmVyZW50IGZyb20gb2xkIGZvcm1hdHRlciB0ZXN0Ci0JCXByZWZzLnNldEluZGVudE11bHRpcGxlQXR0cmlidXRlcyh0cnVlKTsKLQkJcHJlZnMuc2V0QWxpZ25GaW5hbEJyYWNrZXQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLXllc3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCIsIHByZWZzKTsKLQotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXMoZmFsc2UpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldChmYWxzZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczItbm9zcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWxpZ25FbmRCcmFja2V0Rm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCVUcxMTM1ODQKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXMoZmFsc2UpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sIiwgcHJlZnMpOwotCi0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJcHJlZnMuc2V0SW5kZW50TXVsdGlwbGVBdHRyaWJ1dGVzKHRydWUpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQteWVzYWxpZ24tbmV3Zm10LnhtbCIsIHByZWZzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNwYWNlQmVmb3JlRW1wdHlDbG9zZVRhZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAxOTUyNjQKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRTcGFjZUJlZm9yZUVtcHR5Q2xvc2VUYWcoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5vbmUtbmV3Zm10LnhtbCIsIHByZWZzKTsKLQkJCi0JCXByZWZzLnNldFNwYWNlQmVmb3JlRW1wdHlDbG9zZVRhZyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1uZXdmbXQueG1sIiwgcHJlZnMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UHJvY2Vzc2luZ0luc3RydWN0aW9uKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgICAgLy8gQlVHMTk4Mjk3Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sIiwgInRlc3RmaWxlcy94bWwvcHJvY2Vzc2luZ2luc3RydWN0aW9uLWZtdC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDIyNjgyMQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbmV3Zm10LnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfc2hvcnRfTm9UZXh0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDI1ODUxMgotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtTm9UZXh0LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC1mb3JtYXRlZC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX3Nob3J0X0luYmV0d2VlblRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1JbmJldHdlZW5UZXh0LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUluYmV0d2VlblRleHQtZm9ybWF0ZWQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19zaG9ydF9TYW1lTGluZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1TYW1lTGluZVRleHQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtU2FtZUxpbmVUZXh0LWZvcm1hdGVkLnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfc2hvcnRfRXZlcnl3aGVyZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX2xvbmdfTm9UZXh0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDI1ODUxMgotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQtZm9ybWF0ZWQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19sb25nX0luYmV0d2VlblRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUluYmV0d2VlblRleHQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfbG9uZ19TYW1lTGluZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzX2xvbmdfRXZlcnl3aGVyZVRleHQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjU4NTEyCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUV2ZXJ5d2hlcmVUZXh0LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctRXZlcnl3aGVyZVRleHQtZm9ybWF0ZWQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RLZWVwRW1wdHlMaW5lcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjg0OTUKLQkJLy8gVGVzdCB0aGF0IGZvcm1hdHRpbmcga2VlcHMgZW1wdHkgbGluZXMKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENsZWFyQmxhbmtMaW5lcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjg0OTUKLQkJLy8gVGVzdCB0aGF0IGZvcm1hdHRpbmcgY2xlYXJzIGVtcHR5IGxpbmVzCi0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRNYWxmb3JtZWRFbmRUYWcoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjIxMjc5Ci0JCS8vIFRlc3QgdGhhdCBtYWxmb3JtZWQgZW5kIHRhZ3MgZG8gbm90IGNhdXNlIGEgTlBFIGFuZCBmb3JtYXQgdGhlIGRvY3VtZW50Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzktZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoRnJhY3R1cmVkWE1MQ29udGVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjkxMzUKLQkJLy8gVGVzdCB0aGF0IHRleHQgY29udGVudCB0aGF0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgZG9jdW1lbnQgcmVnaW9ucyBkb2VzIG5vdCBzdG9wIHRoZSBmb3JtYXR0ZXIKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLTIyOTEzNS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdENvbW1lbnRzSm9pbkxpbmVzRGlzYWJsZWQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldEpvaW5Db21tZW50TGluZXMoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0Q29tbWVudHNEaXNhYmxlZCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Rm9ybWF0Q29tbWVudFRleHQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1jb21tZW50cy1kaXNhYmxlZC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWNvbW1lbnRzLWRpc2FibGVkLWZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdERvY3VtZW50TGV2ZWxDb21tZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRKb2luQ29tbWVudExpbmVzKGZhbHNlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLWNvbW1lbnQtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0RG9jdW1lbnRMZXZlbFNob3J0Q29tbWVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1zaG9ydC1jb21tZW50LWZtdC54bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdE5lc3RlZEVuZFRhZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9uZXN0ZWQtZW5kdGFnLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL25lc3RlZC1lbmR0YWctZm10LnhtbCIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJlNjU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBbCi08IUVOVElUWSBFSUkgIjxlbXBoPmVsZW1lbnQgaW5mb3JtYXRpb24gaXRlbTwvZW1waD4iPgotXT4KLTxkb2N1bWVudD4KLQlUaGlzIGRvY3VtZW50IGNvbnRhaW5zIG5vIGNoaWxkCi0JJkVJSTtzLiBJdCBkb2VzIGNvbnRhaW4gYSBub24mRUlJOy4KLTwvZG9jdW1lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYzgwM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCFET0NUWVBFIGRvY3VtZW50IFsKLTwhRU5USVRZIEVJSSAiPGVtcGg+ZWxlbWVudCBpbmZvcm1hdGlvbiBpdGVtPC9lbXBoPiI+Ci1dPgotPGRvY3VtZW50PgotCVRoaXMgZG9jdW1lbnQgY29udGFpbnMgbm8gY2hpbGQgJkVJSTtzLgotCUl0IGRvZXMgY29udGFpbiBhIG5vbiZFSUk7LiAKLTwvZG9jdW1lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJkZWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCFET0NUWVBFIGRvY3VtZW50IFsKLTwhRU5USVRZIEVJSSAiPGVtcGg+ZWxlbWVudCBpbmZvcm1hdGlvbiBpdGVtPC9lbXBoPiI+Ci1dPgotPGRvY3VtZW50PgotVGhpcyBkb2N1bWVudCBjb250YWlucyBubyBjaGlsZCAmRUlJO3MuIEl0IGRvZXMgY29udGFpbiBhIG5vbiZFSUk7LgotPC9kb2N1bWVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC1ub2FsaWduLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC1ub2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTM5MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQtbm9hbGlnbi1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkgcmFkPSJkdWRlIiBpbnRlbnNlPSJtYW4iIGNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+Ci0JPC90b3RhbGx5PgotCTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+Ci0JCXllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZSB3aGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQotCTwvbGlrZT4KLQk8c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQteWVzYWxpZ24tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODk3YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQteWVzYWxpZ24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCi0JPgotCTwvdG90YWxseT4KLQk8bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPgotCQl5ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKLQk8L2xpa2U+Ci0JPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU2YjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCi0JPjwvdG90YWxseT4KLQk8bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPnllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZQotCQl3aGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZTwvbGlrZT4KLQk8c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LW5vYWxpZ24tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC1ub2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NTc1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LW5vYWxpZ24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5Ci0JCXJhZD0iZHVkZSIKLQkJaW50ZW5zZT0ibWFuIgotCQljcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPgotCTwvdG90YWxseT4KLQk8bGlrZQotCQlmZXI9InN1cmUiCi0JCW5vPSJ3YXkiPgotCQl5ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKLQk8L2xpa2U+Ci0JPHNlcmlvdXNseQotCQlubz0iam9rZSIKLQkJZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmU5NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseQotCQlyYWQ9ImR1ZGUiCi0JCWludGVuc2U9Im1hbiIKLQkJY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgotCT4KLQk8L3RvdGFsbHk+Ci0JPGxpa2UKLQkJZmVyPSJzdXJlIgotCQlubz0id2F5IgotCT4KLQkJeWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlIHdoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlCi0JPC9saWtlPgotCTxzZXJpb3VzbHkKLQkJbm89Impva2UiCi0JCWZvcj0icmVhbHMiCi0JLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGQyNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseQotCQlyYWQ9ImR1ZGUiCi0JCWludGVuc2U9Im1hbiIKLQkJY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgotCT48L3RvdGFsbHk+Ci0JPGxpa2UKLQkJZmVyPSJzdXJlIgotCQlubz0id2F5IgotCT55ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWU8L2xpa2U+Ci0JPHNlcmlvdXNseQotCQlubz0iam9rZSIKLQkJZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGU5YjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotPHRvdGFsbHkgcmFkPSJkdWRlIiBpbnRlbnNlPSJtYW4iIGNyYXp5PSJhbmQgaW5zYW5lIiBzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+PC90b3RhbGx5PgotPGxpa2UgZmVyPSJzdXJlIiBubz0id2F5Ij55ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWU8L2xpa2U+Ci08c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi1ub3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczItbm9zcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwY2EzOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi1ub3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkgcmFkPSJkdWRlIiBpbnRlbnNlPSJtYW4iIGNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+PC90b3RhbGx5PgotCTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlPC9saWtlPgotCTxzZXJpb3VzbHkgbm89Impva2UiIGZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLXllc3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIteWVzc3BsaXQtbm9hbGlnbi1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjI2NzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIteWVzc3BsaXQtbm9hbGlnbi1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkKLQkJcmFkPSJkdWRlIgotCQlpbnRlbnNlPSJtYW4iCi0JCWNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+PC90b3RhbGx5PgotCTxsaWtlCi0JCWZlcj0ic3VyZSIKLQkJbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlPC9saWtlPgotCTxzZXJpb3VzbHkKLQkJbm89Impva2UiCi0JCWZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTJkZWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIgc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPjwvdG90YWxseT4KLTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlPC9saWtlPgotPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL25lc3RlZC1lbmR0YWctZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL25lc3RlZC1lbmR0YWctZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjMjE4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9uZXN0ZWQtZW5kdGFnLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y29uZmlndXJhdGlvbj4KLQk8cGFyZW50PgotCQlhYWEKLQk8L3BhcmVudD4KLTwvY29uZmlndXJhdGlvbj4KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9uZXN0ZWQtZW5kdGFnLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL25lc3RlZC1lbmR0YWcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWExNjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL25lc3RlZC1lbmR0YWcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbmZpZ3VyYXRpb24+Ci08cGFyZW50PgotYWFhCi08L3BhcmVudD4KLTwvY29uZmlndXJhdGlvbj4KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYWExOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9uZT4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48b25lPjx0d28+PC90d28+PHRocmVlPjxmb3VyPjwvZm91cj48L3RocmVlPjwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MDk1NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b25lIGF0dHI9IjEiIGF0dHIyPSIyIj4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDBkZjA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9uZSBhdHRyPSIxIiBhdHRyMj0iMiI+Ci0JPHR3bz48L3R3bz4KLQk8dGhyZWU+Ci0JCTxmb3VyPgotCQk8L2ZvdXI+Ci0JPC90aHJlZT4KLTwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTEzZjZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjxvbmUgYXR0cj0iMSIJCWF0dHIyPSIyIj4JCTx0d28+PC90d28+PHRocmVlPjxmb3VyPgkJPC9mb3VyPjwvdGhyZWU+PC9vbmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvcHJvY2Vzc2luZ2luc3RydWN0aW9uLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24tZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyOGZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08dGVzdGRvYz48P3Rlc3RpbmcgdGVzdD0ieWF5Ij8+Ci08L3Rlc3Rkb2M+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvcHJvY2Vzc2luZ2luc3RydWN0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyOGZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx0ZXN0ZG9jPjw/dGVzdGluZyB0ZXN0PSJ5YXkiPz4KLTwvdGVzdGRvYz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWJiNjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCVRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0Ci0KLQlvZiB0aGUgZm9ybWF0dGVyCi0KLQl3aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotCTxkYXRhLXN0dWZmIGF0dHIxPSJzaG9ydC12YWx1ZSIgYTA9IiIgYTE9JyAnIGEyPSIgICIgYTM9JyAgICcKLQkJYTQ9IiAgICAiIGE1PScgICAgICcgYTY9IiAgICAgICAiIGF0dHIyPSJzaG9ydC12YWx1ZSIKLQkJYXR0ci13aGljaC1pcy1yZWFsbHktcmVhbGx5LW9oLXNvLWhvcnJpYmx5LWxvbmcteWVzLXNpci0xPSJhbHNvIHF1aXRlIGZhbnRhc3RpY2FsbHkgbG9uZyB2YWx1ZSB3aGljaCBtdXN0bid0IGJlICBicm9rZW4iCi0JCWF0dHIzPSJzaG9ydC12YWx1ZSI+Ci0KLQkJPGNkYXRhPgotCQkJPCFbQ0RBVEFbCi0gICBEYWEsIGRhYSwgZGEsIGRhIC0gZGEsIGRhIC0gZGEsIGRhCi0JCi0JCUNhbid0IHRvdWNoIHRoaXMhCi0gIChzcGFjZXMgaGVyZSkKLQkodGFiIGhlcmUpCi0JCV1dPgotCQk8L2NkYXRhPgotCQk8YT4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQkJPGI+YjwvYj48IS0tIENvbW1lbnQgaGVyZSAgZG9uJ3QgdHdpZGRsZSB3aXRoIHNwYWNlcyBpbiB0aGVtIC0tPgotCQkJPGI+YjwvYj4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQk8L2E+Ci0JCTw/dGFyZ2V0ICB3aHkgIGFtICBJICBoZXJlIAotICA/PgotCTwvZGF0YS1zdHVmZj4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2I3ZmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCVRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0IG9mIHRoZSBmb3JtYXR0ZXIgd2hpY2ggc2hvdWxkIGJlIGVhc3kgdG8KLQlwYXNzLgotCTxkYXRhLXN0dWZmIGF0dHIxPSJzaG9ydC12YWx1ZSIgYTA9IiIgYTE9JyAnIGEyPSIgICIgYTM9JyAgICcKLQkJYTQ9IiAgICAiIGE1PScgICAgICcgYTY9IiAgICAgICAiIGF0dHIyPSJzaG9ydC12YWx1ZSIKLQkJYXR0ci13aGljaC1pcy1yZWFsbHktcmVhbGx5LW9oLXNvLWhvcnJpYmx5LWxvbmcteWVzLXNpci0xPSJhbHNvIHF1aXRlIGZhbnRhc3RpY2FsbHkgbG9uZyB2YWx1ZSB3aGljaCBtdXN0bid0IGJlICBicm9rZW4iCi0JCWF0dHIzPSJzaG9ydC12YWx1ZSI+Ci0JCTxjZGF0YT4KLSA8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JCTwvY2RhdGE+Ci0JCTxhPgotCQkJPGI+YjwvYj4KLQkJCTxiPmIgPC9iPgotCQkJPGI+IGI8L2I+ICA8IS0tIENvbW1lbnQgaGVyZSBkb24ndCB0d2lkZGxlIHdpdGggc3BhY2VzIGluIHRoZW0gLS0+Ci0JCQk8Yj4gYiA8L2I+Ci0JCQk8Yj4gYiAKLQkJCTwvYj4KLQkJCTxiPmI8L2I+Ci0JCTwvYT48P3RhcmdldCAgd2h5ICBhbSAgSSAgaGVyZSAKLSAgPz4KLQk8L2RhdGEtc3R1ZmY+Ci08L21haW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjNlZjMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0gICAgIFRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0Ci0gIAotICAgb2YgdGhlIGZvcm1hdHRlcgotICAKLXdoaWNoIHNob3VsZCBiZSBlYXN5IHRvIHBhc3MuCi08ZGF0YS1zdHVmZiBhdHRyMT0ic2hvcnQtdmFsdWUiIGEwPSIiIGExPScgJyBhMj0iICAiIGEzPScgICAnIGE0PSIgICAgIiBhNT0nICAgICAnIGE2PSIgICAgICAgIiBhdHRyMj0ic2hvcnQtdmFsdWUiIGF0dHItd2hpY2gtaXMtcmVhbGx5LXJlYWxseS1vaC1zby1ob3JyaWJseS1sb25nLXllcy1zaXItMT0iYWxzbyBxdWl0ZSBmYW50YXN0aWNhbGx5IGxvbmcgdmFsdWUgd2hpY2ggbXVzdG4ndCBiZSAgYnJva2VuIiBhdHRyMz0ic2hvcnQtdmFsdWUiCi0gID4KLSAgCi0JPGNkYXRhPgotIDwhW0NEQVRBWwotICAgRGFhLCBkYWEsIGRhLCBkYSAtIGRhLCBkYSAtIGRhLCBkYQotCQotCQlDYW4ndCB0b3VjaCB0aGlzIQotICAoc3BhY2VzIGhlcmUpCi0JKHRhYiBoZXJlKQotCQldXT4KLQk8L2NkYXRhPgotCTxhPgotCTxiPmI8L2I+Ci0JPGI+YiA8L2I+Ci0JPGI+IGI8L2I+ICA8IS0tIENvbW1lbnQgaGVyZSAgZG9uJ3QgdHdpZGRsZSB3aXRoIHNwYWNlcyBpbiB0aGVtIC0tPiAgICAgIAk8Yj4gYiA8L2I+Ci0JPGI+Ci0JYgotCTwvYj4KLQk8Yj5iPC9iPgotCTwvYT48P3RhcmdldCAgd2h5ICBhbSAgSSAgaGVyZSAKLSAgPz4KLTwvZGF0YS1zdHVmZj4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3RhZ3N3aXRoZW1wdHljb250ZW50LmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3RhZ3N3aXRoZW1wdHljb250ZW50LmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyMTdhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCFFTEVNRU5UIHRvcG1vc3QgKGVtcHR5LGVtcHR5d2l0aGF0dHJpYnV0ZSk+Ci08IUVMRU1FTlQgZW1wdHkgRU1QVFk+Ci08IUVMRU1FTlQgZW1wdHl3aXRoYXR0cmlidXRlIEVNUFRZPgotPCFBVFRMSVNUIGVtcHR5d2l0aGF0dHJpYnV0ZQotCW15YXR0cmlidXRlMSBDREFUQSAjSU1QTElFRAotCW15YXR0cmlidXRlMiBDREFUQSAjSU1QTElFRD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmU0M2UxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxtYW55dGFncz4KLQk8c29tZXRhZyBzb21lYXR0cj0ic29tZWF0dHJ2YWx1ZSI+PCFbQ0RBVEFbCi0gIGJsYWggYmxhaCBibGFoIAotICAJCQlub3RoaW5nCi0gIAljaGFuZ2VzCi0gIGluCi1oZXJlCi1dXT48L3NvbWV0YWc+Ci08L21hbnl0YWdzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJjMTc2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxtYW55dGFncz4JPHNvbWV0YWcgc29tZWF0dHI9InNvbWVhdHRydmFsdWUiPjwhW0NEQVRBWwotICBibGFoIGJsYWggYmxhaCAKLSAgCQkJbm90aGluZwotICAJY2hhbmdlcwotICBpbgotaGVyZQotXV0+PC9zb21ldGFnPgotPC9tYW55dGFncz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTRhM2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPHNjcmlwdD4KLQlub3NwYWNlYmV0d2Vlbm1lYW5kY2RhdGE8IVtDREFUQVsKLWZ1bmN0aW9uIG1hdGNod28oYSxiKQotewotaWYgKGEgPCBiICYmIGEgPCAwKSB0aGVuCi0gICB7Ci0gICByZXR1cm4gMQotICAgfQotZWxzZQotICAgewotICAgcmV0dXJuIDAKLSAgIH0KLX0KLV1dPm5vc3BhY2ViZXR3ZWVubWVhbmRjZGF0YQotPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjRlYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxzY3JpcHQ+Ci1ub3NwYWNlYmV0d2Vlbm1lYW5kY2RhdGE8IVtDREFUQVsKLWZ1bmN0aW9uIG1hdGNod28oYSxiKQotewotaWYgKGEgPCBiICYmIGEgPCAwKSB0aGVuCi0gICB7Ci0gICByZXR1cm4gMQotICAgfQotZWxzZQotICAgewotICAgcmV0dXJuIDAKLSAgIH0KLX0KLV1dPm5vc3BhY2ViZXR3ZWVubWVhbmRjZGF0YQotPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNldGFnc3dpdGhlbXB0eWNvbnRlbnQtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYzJlZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNldGFnc3dpdGhlbXB0eWNvbnRlbnQtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSB0b3Btb3N0IFNZU1RFTSAidGFnc3dpdGhlbXB0eWNvbnRlbnQuZHRkIiA+Ci08dG9wbW9zdD4KLQk8ZW1wdHk+PC9lbXB0eT4KLQk8ZW1wdHl3aXRoYXR0cmlidXRlCi0JCW15YXR0cmlidXRlMT0iIgotCQlteWF0dHJpYnV0ZTI9IiI+PC9lbXB0eXdpdGhhdHRyaWJ1dGU+Ci08L3RvcG1vc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNldGFnc3dpdGhlbXB0eWNvbnRlbnQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNldGFnc3dpdGhlbXB0eWNvbnRlbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjk5Y2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSB0b3Btb3N0IFNZU1RFTSAidGFnc3dpdGhlbXB0eWNvbnRlbnQuZHRkIiA+Ci08dG9wbW9zdD4KLSAgPGVtcHR5PjwvZW1wdHk+Ci0gIDxlbXB0eXdpdGhhdHRyaWJ1dGUgbXlhdHRyaWJ1dGUxPSIiIG15YXR0cmlidXRlMj0iIj48L2VtcHR5d2l0aGF0dHJpYnV0ZT4KLTwvdG9wbW9zdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmZjMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxpYnJhcnk+Ci0JPGJvb2tzPgotCQk8Ym9vaz4KLQkJCTx0aXRsZT5UaXRsZTwvdGl0bGU+Ci0JCQk8YXV0aG9yPkF1dGhvcjwvYXV0aG9yPgotCQk8L2Jvb2sgCi0JPC9ib29rcz4KLTwvbGlicmFyeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTMwYjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzkueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxpYnJhcnk+Ci08Ym9va3M+Ci08Ym9vaz4KLTx0aXRsZT5UaXRsZTwvdGl0bGU+Ci08YXV0aG9yPkF1dGhvcjwvYXV0aG9yPgotCTwvYm9vayA8L2Jvb2tzPgotPC9saWJyYXJ5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhNTcxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGJvb2s+Ci0JPHRpdGxlPlRoaXMgJmFtcDsgVGhhdDwvdGl0bGU+Ci0JPGF1dGhvcj5Tb21lIHBlcnNvbjwvYXV0aG9yPgotCTxyZXZpZXdzPgotCQk8cmV2aWV3IGlkPSIwIj4gJnF1b3Q7QSB3b25kZXJmdWwgYW5kIGdyaXBwaW5nIGVwaWMgc3RvcnkuJnF1b3Q7IDwvcmV2aWV3PgotCQk8cmV2aWV3IGlkPSIxIj4mcXVvdDtJIGxpa2VkIGl0LiZxdW90OzwvcmV2aWV3PgotCTwvcmV2aWV3cz4KLQk8cHJldmlldz4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuPC9wcmV2aWV3PgotCTxyZWxlYXNlRGF0ZT4KLQkJPHBhdHRlcm4+JXl5eXktJW1tLSVkZDwvcGF0dGVybj4KLQkJPGRhdGU+MjAwOS0wNC0xMzwvZGF0ZT4KLQk8L3JlbGVhc2VEYXRlPgotPC9ib29rPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyOTEzNS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlZmEyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Ym9vaz4KLQk8dGl0bGU+VGhpcyAmYW1wOyBUaGF0PC90aXRsZT4KLTxhdXRob3I+U29tZSBwZXJzb248L2F1dGhvcj4KLTxyZXZpZXdzPgotCQkJPHJldmlldyBpZD0iMCI+ICZxdW90O0Egd29uZGVyZnVsIGFuZCBncmlwcGluZyBlcGljIHN0b3J5LiZxdW90OyA8L3Jldmlldz4KLTxyZXZpZXcgaWQ9IjEiPiZxdW90O0kgbGlrZWQgaXQuJnF1b3Q7PC9yZXZpZXc+Ci08L3Jldmlld3M+Ci0JCQk8cHJldmlldz4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuPC9wcmV2aWV3PgotCQkJPHJlbGVhc2VEYXRlPgotPHBhdHRlcm4+JXl5eXktJW1tLSVkZDwvcGF0dGVybj4KLTxkYXRlPjIwMDktMDQtMTM8L2RhdGU+Ci0JCQk8L3JlbGVhc2VEYXRlPgotPC9ib29rPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY2xlYXItYmxhbmstbGluZXMtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4MTdhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY2xlYXItYmxhbmstbGluZXMtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8IS0tIENvbW1lbnQgbm9kZSAtLT4KLQk8bm9jb250ZW50Pjwvbm9jb250ZW50PgotCTxtaXhlZGNvbnRlbnQ+Ci0JCVRleHRub2RlIHdpdGggc29tZSB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gc2hvdWxkIGJlIGNvbGxhcHNlZCBhbmQgc29tZQotCQlvZiB0aGUgdGV4dCBzaG91bGQgYmUgd3JhcHBlZAotCQk8bWl4ZWQ+QWxsIHRleHQ8L21peGVkPgotCTwvbWl4ZWRjb250ZW50PgotCTxub2NvbnRlbnQ+Ci0JPC9ub2NvbnRlbnQ+Ci0JPHNvbWVtb3Jlbm9jb250ZW50PgotCQk8aW5kZW50bW9yZT4KLQkJCTxldmVubW9yZT4KLQkJCTwvZXZlbm1vcmU+Ci0JCTwvaW5kZW50bW9yZT4KLQk8L3NvbWVtb3Jlbm9jb250ZW50PgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUV2ZXJ5d2hlcmVUZXh0LWZvcm1hdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhODNkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUV2ZXJ5d2hlcmVUZXh0LWZvcm1hdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCXRlc3QKLQotCXRlc3Q8IS0tIGNvbW1lbnQgMTYgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JdGVzdAotCi0JdGVzdAk8IS0tIGNvbW1lbnQgMTcgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JdGVzdAotCi0JdGVzdCA8IS0tIGNvbW1lbnQgMTggYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JdGVzdAotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1FdmVyeXdoZXJlVGV4dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUV2ZXJ5d2hlcmVUZXh0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIwOTVlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUV2ZXJ5d2hlcmVUZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQkKLXRlc3QKLQkJCQotdGVzdDwhLS0gY29tbWVudCAxNiBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCQkJCXRlc3QKLQotCXRlc3QJPCEtLSBjb21tZW50IDE3IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCQotCXRlc3QKLQkJCQkKLQkJCXRlc3QgPCEtLSBjb21tZW50IDE4IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi10ZXN0Ci0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUluYmV0d2VlblRleHQtZm9ybWF0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBiMzFhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLUluYmV0d2VlblRleHQtZm9ybWF0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0KLQl0ZXN0Ci0JPCEtLSBjb21tZW50IDYgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCXRlc3QKLQk8IS0tIGNvbW1lbnQgNyBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiAKLQkJYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JdGVzdAotCTwhLS0gY29tbWVudCA4IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCXRlc3QKLQotCi0JPCEtLSBjb21tZW50IDkgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JdGVzdAotCi0KLQk8IS0tIGNvbW1lbnQgMTAgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0KLQl0ZXN0Ci0KLQk8IS0tIGNvbW1lbnQgMTIgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctSW5iZXR3ZWVuVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzYzZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1JbmJldHdlZW5UZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCQkJCi10ZXN0Ci08IS0tIGNvbW1lbnQgNiBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLXRlc3QKLQk8IS0tIGNvbW1lbnQgNyBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLXRlc3QKLQkJCTwhLS0gY29tbWVudCA4IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCQkJCi10ZXN0Ci0KLQotPCEtLSBjb21tZW50IDkgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0KLQl0ZXN0Ci0KLQotCTwhLS0gY29tbWVudCAxMCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkKLQkKLQkJCQl0ZXN0Ci0KLQkJCTwhLS0gY29tbWVudCAxMiBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkJCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQtZm9ybWF0ZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQtZm9ybWF0ZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDc3NTlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctTm9UZXh0LWZvcm1hdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCTwhLS0gY29tbWVudCAwIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQk8IS0tIGNvbW1lbnQgMSBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiAKLQkJYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JPCEtLSBjb21tZW50IDIgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JPCEtLSBjb21tZW50IDMgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JPCEtLSBjb21tZW50IDQgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JPCEtLSBjb21tZW50IDUgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLU5vVGV4dC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLU5vVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjE2MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1Ob1RleHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi08IS0tIGNvbW1lbnQgMCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQk8IS0tIGNvbW1lbnQgMSBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkJCTwhLS0gY29tbWVudCAyIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi08IS0tIGNvbW1lbnQgMyBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQotCTwhLS0gY29tbWVudCA0IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi0JCQk8IS0tIGNvbW1lbnQgNSBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiBhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQkJCi0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1sb25nLVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYjMwZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1TYW1lTGluZVRleHQtZm9ybWF0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0KLQl0ZXN0PCEtLSBjb21tZW50IDEzIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIAotCQlhc2RpZmphdm5lIGFkamtmYWVuIGF2aGF1aW9laGFqZG5mIGFkb2ZqbmFudmFlaXV3IGFkbmZhaWplbiAtLT4KLQl0ZXN0CTwhLS0gY29tbWVudCAxNCBhbGtkamZhbGk7amZla2xhaiBhbGtkZmphIGFrbGRqZm9pZSBkaGdmbGlhaGdlIGRrZmlvZWFmbiAKLQkJYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0JdGVzdCA8IS0tIGNvbW1lbnQgMTUgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gCi0JCWFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1TYW1lTGluZVRleHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbG9uZy1TYW1lTGluZVRleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmUwY2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LWxvbmctU2FtZUxpbmVUZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCQkKLQkJCi10ZXN0PCEtLSBjb21tZW50IDEzIGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCXRlc3QJPCEtLSBjb21tZW50IDE0IGFsa2RqZmFsaTtqZmVrbGFqIGFsa2RmamEgYWtsZGpmb2llIGRoZ2ZsaWFoZ2UgZGtmaW9lYWZuIGFzZGlmamF2bmUgYWRqa2ZhZW4gYXZoYXVpb2VoYWpkbmYgYWRvZmpuYW52YWVpdXcgYWRuZmFpamVuIC0tPgotCQkJdGVzdCA8IS0tIGNvbW1lbnQgMTUgYWxrZGpmYWxpO2pmZWtsYWogYWxrZGZqYSBha2xkamZvaWUgZGhnZmxpYWhnZSBka2Zpb2VhZm4gYXNkaWZqYXZuZSBhZGprZmFlbiBhdmhhdWlvZWhhamRuZiBhZG9mam5hbnZhZWl1dyBhZG5mYWlqZW4gLS0+Ci0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdkYTMzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxub2RlPgotCTxpbm5lcj4KLQkJPGFub3RoZXI+Ci0JCQk8ZWxzZT4gPCEtLSBEb24ndCB3cmFwIC0tPgotCQkJPC9lbHNlPjwhLS0gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIAotCQkJCU1hZWNlbmFzIGVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4gCi0JCQkJTnVsbGEgZXUgZGlhbSBhYyBudWxsYSBwbGFjZXJhdCB0aW5jaWR1bnQuIEluIHZpdGFlIHRlbGx1cy4gU3VzcGVuZGlzc2UgcnV0cnVtLiAKLQkJCQlOdW5jIG1vbGxpcyB1cm5hIGF0IG1hdXJpcyBzdXNjaXBpdCBsYWNpbmlhLiBQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgCi0JCQkJbWF1cmlzIHMgLS0+Ci0JCQlTb21ldGV4dCBzdHVmZiBpbiB0aGUgZG9jdW1lbnQKLQkJCTxzb21ldGhpbmc+Ci0JCQkJPGVsc2UgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PCEtLQlMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gTWFlY2VuYXMJCWVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4JCQlOdWxsYSBldSBkaWFtIGFjIG51bGxhIHBsYWNlcmF0IHRpbmNpZHVudC4gSW4gdml0YWUgdGVsbHVzLgkJCQlTdXNwZW5kaXNzZSBydXRydW0uIE51bmMgbW9sbGlzIHVybmEgYXQgbWF1cmlzIHN1c2NpcGl0IGxhY2luaWEuIFByYWVzZW50IGluIGFudGUuIE1hZWNlbmFzIHRpbmNpZHVudCBtYXVyaXMgcy0tPjwvZWxzZT4KLQkJCTwvc29tZXRoaW5nPgotCQk8L2Fub3RoZXI+Ci0JPC9pbm5lcj4KLTwvbm9kZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUV2ZXJ5d2hlcmVUZXh0LWZvcm1hdGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUV2ZXJ5d2hlcmVUZXh0LWZvcm1hdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0NWFkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC1mb3JtYXRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQl0ZXN0Ci0KLQl0ZXN0PCEtLSBjb21tZW50IDE2IC0tPgotCi0JdGVzdAotCi0JdGVzdAk8IS0tIGNvbW1lbnQgMTcgLS0+Ci0KLQl0ZXN0Ci0KLQl0ZXN0IDwhLS0gY29tbWVudCAxOCAtLT4KLQotCXRlc3QKLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUV2ZXJ5d2hlcmVUZXh0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUV2ZXJ5d2hlcmVUZXh0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4NTUzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1FdmVyeXdoZXJlVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0JCi10ZXN0Ci0JCQkKLXRlc3Q8IS0tIGNvbW1lbnQgMTYgLS0+Ci0KLQkJCQl0ZXN0Ci0KLQl0ZXN0CTwhLS0gY29tbWVudCAxNyAtLT4KLQkKLQl0ZXN0Ci0JCQkJCi0JCQl0ZXN0IDwhLS0gY29tbWVudCAxOCAtLT4KLQotdGVzdAotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtSW5iZXR3ZWVuVGV4dC1mb3JtYXRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRhNDk0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1JbmJldHdlZW5UZXh0LWZvcm1hdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCi0JdGVzdAotCTwhLS0gY29tbWVudCA2IC0tPgotCXRlc3QKLQk8IS0tIGNvbW1lbnQgNyAtLT4KLQl0ZXN0Ci0JPCEtLSBjb21tZW50IDggLS0+Ci0KLQl0ZXN0Ci0KLQotCTwhLS0gY29tbWVudCA5IC0tPgotCi0JdGVzdAotCi0KLQk8IS0tIGNvbW1lbnQgMTAgLS0+Ci0KLQotCXRlc3QKLQotCTwhLS0gY29tbWVudCAxMiAtLT4KLQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LUluYmV0d2VlblRleHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtSW5iZXR3ZWVuVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjBhYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtSW5iZXR3ZWVuVGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQkJCQotdGVzdAotPCEtLSBjb21tZW50IDYgLS0+Ci10ZXN0Ci0JPCEtLSBjb21tZW50IDcgLS0+Ci10ZXN0Ci0JCQk8IS0tIGNvbW1lbnQgOCAtLT4KLQkJCQotdGVzdAotCi0KLTwhLS0gY29tbWVudCA5IC0tPgotCi0JdGVzdAotCi0KLQk8IS0tIGNvbW1lbnQgMTAgLS0+Ci0JCi0JCi0JCQkJdGVzdAotCi0JCQk8IS0tIGNvbW1lbnQgMTIgLS0+Ci0JCQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC1mb3JtYXRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1zaG9ydC1Ob1RleHQtZm9ybWF0ZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWZiNDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC1mb3JtYXRlZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQk8IS0tIGNvbW1lbnQgMCAtLT4KLQk8IS0tIGNvbW1lbnQgMSAtLT4KLQk8IS0tIGNvbW1lbnQgMiAtLT4KLQotCTwhLS0gY29tbWVudCAzIC0tPgotCi0JPCEtLSBjb21tZW50IDQgLS0+Ci0KLQk8IS0tIGNvbW1lbnQgNSAtLT4KLQotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtTm9UZXh0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LU5vVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjJlNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtTm9UZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotPCEtLSBjb21tZW50IDAgLS0+Ci0JPCEtLSBjb21tZW50IDEgLS0+Ci0JCQk8IS0tIGNvbW1lbnQgMiAtLT4KLQotPCEtLSBjb21tZW50IDMgLS0+Ci0KLQk8IS0tIGNvbW1lbnQgNCAtLT4KLQotCQkJPCEtLSBjb21tZW50IDUgLS0+Ci0JCQotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtU2FtZUxpbmVUZXh0LWZvcm1hdGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LVNhbWVMaW5lVGV4dC1mb3JtYXRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OTZjM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtU2FtZUxpbmVUZXh0LWZvcm1hdGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0KLQl0ZXN0PCEtLSBjb21tZW50IDEzIC0tPgotCXRlc3QJPCEtLSBjb21tZW50IDE0IC0tPgotCXRlc3QgPCEtLSBjb21tZW50IDE1IC0tPgotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtU2FtZUxpbmVUZXh0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jb21tZW50LXNob3J0LVNhbWVMaW5lVGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NzBjYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtc2hvcnQtU2FtZUxpbmVUZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCQkKLQkJCi10ZXN0PCEtLSBjb21tZW50IDEzIC0tPgotCXRlc3QJPCEtLSBjb21tZW50IDE0IC0tPgotCQkJdGVzdCA8IS0tIGNvbW1lbnQgMTUgLS0+Ci0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmVjN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxub2RlPgotCTxpbm5lcj4KLQkJPGFub3RoZXI+Ci0JCQk8ZWxzZT4gPCEtLSBEb24ndCB3cmFwIC0tPgotCQkJPC9lbHNlPjwhLS0JCQkJTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIE1hZWNlbmFzCQkJCWVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4JCQkJTnVsbGEgZXUgZGlhbSBhYyBudWxsYSBwbGFjZXJhdCB0aW5jaWR1bnQuIEluIHZpdGFlIHRlbGx1cy4JCQkJU3VzcGVuZGlzc2UgcnV0cnVtLiBOdW5jIG1vbGxpcyB1cm5hIGF0IG1hdXJpcyBzdXNjaXBpdCBsYWNpbmlhLiBQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgbWF1cmlzIHMtLT4KLQkJCVNvbWV0ZXh0IHN0dWZmIGluIHRoZSBkb2N1bWVudAotCTxzb21ldGhpbmc+Ci0JCQkJPGVsc2UgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PCEtLQlMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gTWFlY2VuYXMJCWVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4JCQlOdWxsYSBldSBkaWFtIGFjIG51bGxhIHBsYWNlcmF0IHRpbmNpZHVudC4gSW4gdml0YWUgdGVsbHVzLgkJCQlTdXNwZW5kaXNzZSBydXRydW0uIE51bmMgbW9sbGlzIHVybmEgYXQgbWF1cmlzIHN1c2NpcGl0IGxhY2luaWEuIFByYWVzZW50IGluIGFudGUuIE1hZWNlbmFzIHRpbmNpZHVudCBtYXVyaXMgcy0tPjwvZWxzZT4KLQk8L3NvbWV0aGluZz4KLQkJPC9hbm90aGVyPgotCTwvaW5uZXI+Ci08L25vZGU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOWFmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG1haW4+Ci0JPGEgdGFnPSJ3aXRoIj4gU29tZSBjb250ZW50IDwvYT4KLQk8bm9jb250ZW50d2l0aHNwYWNlIC8+Ci0JPG5vY29udGVudHdpdGhvdXRzcGFjZSAvPgotCTxub2NvbnRlbnQgd2l0aGF0dHI9InN0dWZmIiAvPgotCTxub2NvbnRlbnQgLz4KLQk8bWFueWxpbmVkY29udGVudCB3aXRoPSJhdHRyaWJ1dGVzIiAvPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1ub25lLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5vbmUtbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhlNjFkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5vbmUtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtYWluPgotCTxhIHRhZz0id2l0aCI+IFNvbWUgY29udGVudCA8L2E+Ci0JPG5vY29udGVudHdpdGhzcGFjZS8+Ci0JPG5vY29udGVudHdpdGhvdXRzcGFjZS8+Ci0JPG5vY29udGVudCB3aXRoYXR0cj0ic3R1ZmYiLz4KLQk8bm9jb250ZW50Lz4KLQk8bWFueWxpbmVkY29udGVudCB3aXRoPSJhdHRyaWJ1dGVzIi8+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmZhZmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtYWluPgotCTxhIHRhZz0id2l0aCI+IFNvbWUgY29udGVudCA8L2E+Ci0JPG5vY29udGVudHdpdGhzcGFjZSAvPgotCTxub2NvbnRlbnR3aXRob3V0c3BhY2UvPgotCTxub2NvbnRlbnQgd2l0aGF0dHI9InN0dWZmIi8+Ci0JPG5vY29udGVudCAgICAJCS8+Ci0JPG1hbnlsaW5lZGNvbnRlbnQgCi0JCi0JCXdpdGg9ImF0dHJpYnV0ZXMiCi0JCQkvPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1jb21tZW50cy1kaXNhYmxlZC1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1jb21tZW50cy1kaXNhYmxlZC1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2U3MDk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtY29tbWVudHMtZGlzYWJsZWQtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCTwhLS0gCi0JCVRoaXMgaXMgbXkgbm9kZSBoZWFkZXIuCi0JLS0+Ci0JPG5vZGU+Ci0JCVRleHQKLQk8L25vZGU+Ci0KLTwhLS0gVGhpcyBpcyBteSBub2RlIGZvb3Rlci4gVGhlIHRleHQgc2hvdWxkIGJlIGEgbGl0dGxlIHRvbyBsb25nIGZvciB0aGUgbGluZSwgYnV0IHRoYXQncyBvay4gSnVzdCBtYWtlIHN1cmUgaXQncyBub3QgZm9ybWF0dGVkLiAtLT4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWNvbW1lbnRzLWRpc2FibGVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtY29tbWVudHMtZGlzYWJsZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2U3MDk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtY29tbWVudHMtZGlzYWJsZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCi0JPCEtLSAKLQkJVGhpcyBpcyBteSBub2RlIGhlYWRlci4KLQktLT4KLQk8bm9kZT4KLQkJVGV4dAotCTwvbm9kZT4KLQotPCEtLSBUaGlzIGlzIG15IG5vZGUgZm9vdGVyLiBUaGUgdGV4dCBzaG91bGQgYmUgYSBsaXR0bGUgdG9vIGxvbmcgZm9yIHRoZSBsaW5lLCBidXQgdGhhdCdzIG9rLiBKdXN0IG1ha2Ugc3VyZSBpdCdzIG5vdCBmb3JtYXR0ZWQuIC0tPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1jb21tZW50LWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NTE4OWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1jb21tZW50LWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCVRoaXMgaXMgbXkgZG9jdW1lbnQtCi0JbGV2ZWwgY29tbWVudC4KLQlGb3JtYXQgdGhlIHJlc3QsIGJ1dCBkbyBub3QgaW5kZW50IG1lIGFueSBmdXJ0aGVyLgotLS0+Ci08cm9vdD4KLQk8bGVhZj48L2xlYWY+Ci0JPGxlYWY+PC9sZWFmPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLWNvbW1lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmNmMTIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtY29tbWVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotCVRoaXMgaXMgbXkgZG9jdW1lbnQtCi0JbGV2ZWwgY29tbWVudC4KLQlGb3JtYXQgdGhlIHJlc3QsIGJ1dCBkbyBub3QgaW5kZW50IG1lIGFueSBmdXJ0aGVyLiAKLS0tPgotPHJvb3Q+Ci08bGVhZj48L2xlYWY+Ci08bGVhZj48L2xlYWY+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWZvcm1hdC1kb2N1bWVudC1sZXZlbC1zaG9ydC1jb21tZW50LWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjNWM3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gVGVzdGZpbGUuIERvbid0IGluZGVudCB0aGlzIGNvbW1lbnQuIC0tPgotPHJvb3Q+Ci0JPHRlc3Q+PC90ZXN0PgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtc2hvcnQtY29tbWVudC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZm9ybWF0LWRvY3VtZW50LWxldmVsLXNob3J0LWNvbW1lbnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmFkODYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1mb3JtYXQtZG9jdW1lbnQtbGV2ZWwtc2hvcnQtY29tbWVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIFRlc3RmaWxlLiBEb24ndCBpbmRlbnQgdGhpcyBjb21tZW50LiAtLT4KLTxyb290PgotPHRlc3Q+PC90ZXN0PgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1qb2luLWxpbmVzLWRpc2FibGVkLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtam9pbi1saW5lcy1kaXNhYmxlZC1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWVhYWE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1qb2luLWxpbmVzLWRpc2FibGVkLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8IS0tCi0JCU15IGhlYWRlciBjb21tZW50LiBUaGlzIGZpbGUgc2hvdWxkIGJlIGZvcm1hdHRlZCwgYnV0Ci0JCXRoZSBmb3JtYXR0aW5nIG9mIHRoaXMgaGVhZGVyIGNvbW1lbnQKLQkJc2hvdWxkIHN0YXkgdGhlIHNhbWUuCi0JLS0+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWpvaW4tbGluZXMtZGlzYWJsZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDY3MDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1qb2luLWxpbmVzLWRpc2FibGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotPCEtLSAKLQlNeSBoZWFkZXIgY29tbWVudC4gVGhpcyBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQsIGJ1dAotCXRoZSBmb3JtYXR0aW5nIG9mIHRoaXMgaGVhZGVyIGNvbW1lbnQKLQlzaG91bGQgc3RheSB0aGUgc2FtZS4KLS0tPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1rZWVwLWJsYW5rLWxpbmVzLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwta2VlcC1ibGFuay1saW5lcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWQ1YWY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1rZWVwLWJsYW5rLWxpbmVzLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3Q+Ci0KLQk8IS0tIENvbW1lbnQgbm9kZSAtLT4KLQotCTxub2NvbnRlbnQ+PC9ub2NvbnRlbnQ+Ci0KLQk8bWl4ZWRjb250ZW50PgotCQlUZXh0bm9kZSB3aXRoIHNvbWUgdHJhaWxpbmcgd2hpdGVzcGFjZSAtIHNob3VsZCBiZQotCi0JCWNvbGxhcHNlZCBhbmQgc29tZSBvZiB0aGUgdGV4dCBzaG91bGQgYmUgd3JhcHBlZAotCi0JCTxtaXhlZD5BbGwgdGV4dDwvbWl4ZWQ+Ci0KLQk8L21peGVkY29udGVudD4KLQotCi0KLQotCTxub2NvbnRlbnQ+Ci0JPC9ub2NvbnRlbnQ+Ci0KLQk8c29tZW1vcmVub2NvbnRlbnQ+Ci0JCTxpbmRlbnRtb3JlPgotCQkJPGV2ZW5tb3JlPgotCi0JCQk8L2V2ZW5tb3JlPgotCQk8L2luZGVudG1vcmU+Ci0JPC9zb21lbW9yZW5vY29udGVudD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1rZWVwLWJsYW5rLWxpbmVzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1rZWVwLWJsYW5rLWxpbmVzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljYWQyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwta2VlcC1ibGFuay1saW5lcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCQk8cm9vdD4KLQkJCi0JCTwhLS0gQ29tbWVudCBub2RlIC0tPgotCQkKLQkJCQkJPG5vY29udGVudD48L25vY29udGVudD4KLQkJCi08bWl4ZWRjb250ZW50PgotVGV4dG5vZGUgd2l0aCAJCQlzb21lIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSBzaG91bGQgYmUKLQotY29sbGFwc2VkIGFuZCBzb21lIG9mIHRoZSB0ZXh0IHNob3VsZCBiZSB3cmFwcGVkCi0KLQkJCTxtaXhlZD5BbGwgdGV4dDwvbWl4ZWQ+Ci0KLTwvbWl4ZWRjb250ZW50PgotCi0KLQotCi0JCTxub2NvbnRlbnQ+CQkJPC9ub2NvbnRlbnQ+Ci0JCQotCQkJCTxzb21lbW9yZW5vY29udGVudD4KLQkJCQkJPGluZGVudG1vcmU+CQkJPGV2ZW5tb3JlPgotCQkJCQkKLQkJCQkJPC9ldmVubW9yZT4KLQkJPC9pbmRlbnRtb3JlPgotCQkJCQkJCQkJPC9zb21lbW9yZW5vY29udGVudD4KLQk8L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEtbm8tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDY4M2Y5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwY2RhdGFsaWNpb3VzIFNZU1RFTSAieG1sLXByZXNlcnZlcGNkYXRhLmR0ZCIgPgotPHBjZGF0YWxpY2lvdXM+Ci0JPGloYXZlcGNkYXRhPmkgaGF2ZSBwY2RhdGE8L2loYXZlcGNkYXRhPgotCTxpaGF2ZXBjZGF0YT4KLQkJaSBoYXZlCi0KLQotCi0JCXNwYWNlcwotCTwvaWhhdmVwY2RhdGE+Ci0JPGlkb250IC8+Ci0JPG5laXRoZXJkb2k+ZG8gaSBoYXZlIHBjZGF0YT8gaSdtIG5vdCBzdXJlLiBib28gaG9vLjwvbmVpdGhlcmRvaT4KLTwvcGNkYXRhbGljaW91cz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYWVhNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGNkYXRhbGljaW91cyBTWVNURU0gInhtbC1wcmVzZXJ2ZXBjZGF0YS5kdGQiID4KLTxwY2RhdGFsaWNpb3VzPgotCTxpaGF2ZXBjZGF0YT5pIGhhdmUgcGNkYXRhPC9paGF2ZXBjZGF0YT4KLQk8aWhhdmVwY2RhdGE+IGkgaGF2ZSBzcGFjZXMgCi0JPC9paGF2ZXBjZGF0YT4KLQk8aWRvbnQgLz4KLQk8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS15ZXMtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS15ZXMtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEwOWM4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBjZGF0YWxpY2lvdXMgU1lTVEVNICJ4bWwtcHJlc2VydmVwY2RhdGEuZHRkIiA+Ci08cGNkYXRhbGljaW91cz4KLQk8aWhhdmVwY2RhdGE+aSBoYXZlICAgICAgcGNkYXRhPC9paGF2ZXBjZGF0YT4KLQk8aWhhdmVwY2RhdGE+ICAgaSBoYXZlICAKLSAgCi0gIAotICAKLSAgICAgIHNwYWNlcyAgIDwvaWhhdmVwY2RhdGE+Ci0JPGlkb250IC8+Ci0JPG5laXRoZXJkb2k+ZG8gaSBoYXZlIHBjZGF0YT8gaSdtIG5vdCBzdXJlLiBib28gaG9vLjwvbmVpdGhlcmRvaT4KLTwvcGNkYXRhbGljaW91cz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA4NmRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCFFTEVNRU5UIHBjZGF0YWxpY2lvdXMgKGloYXZlcGNkYXRhKixpZG9udCosbmVpdGhlcmRvaSopPgotPCFFTEVNRU5UIGloYXZlcGNkYXRhICgjUENEQVRBKT4KLTwhRUxFTUVOVCBpZG9udCBFTVBUWT4KLTwhRUxFTUVOVCBuZWl0aGVyZG9pIEFOWT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODc0Zjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBjZGF0YWxpY2lvdXMgU1lTVEVNICJ4bWwtcHJlc2VydmVwY2RhdGEuZHRkIiA+Ci08cGNkYXRhbGljaW91cz4KLSAgPGloYXZlcGNkYXRhPmkgaGF2ZSAgICAgIHBjZGF0YTwvaWhhdmVwY2RhdGE+Ci0gIDxpaGF2ZXBjZGF0YT4gICBpIGhhdmUgIAotICAKLSAgCi0gIAotICAgICAgc3BhY2VzICAgPC9paGF2ZXBjZGF0YT4KLSAgPGlkb250Lz4KLSAgPG5laXRoZXJkb2k+ZG8gaSBoYXZlIHBjZGF0YT8gaSdtIG5vdCBzdXJlLiBib28gaG9vLjwvbmVpdGhlcmRvaT4KLTwvcGNkYXRhbGljaW91cz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtYWN0dWFsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtYWN0dWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwYzA0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWFjdHVhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBtYWluIFNZU1RFTSAieG1sLXNwYWNlLXByZXNlcnZlLmR0ZCI+Ci08bWFpbj4KLQk8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotICAgb2YgdGhlIGZvcm1hdHRlci4KLSAgIDxwcmVzZXJ2ZSB4bWw6c3BhY2U9ImRlZmF1bHQiPgotCQlUaGlzIHBhcnRpY3VsYXIgdGV4dCBjYW4KLQotCQlhbmQgc2hvdWxkIGJlIHJlZm9ybWF0dGVkLgotICAgPC9wcmVzZXJ2ZT4KLSAgIAotPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0PgotIE5vIG1hbgotIAotIGlzIGFuCi0gCi0gaXNsYW5kLCAuCi0gIC4KLSAgLgotIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAgcGxlYXNlIC0gd2FzdGUgb2YgICAgICAgICAgIHNwYWNlCi0gCTwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0gICA8cHJlc2VydmUyPgotVGhpcyBwYXJ0aWN1bGFyCi0gIHRleHQgbWF5IAotCi1ub3QgIHJlZm9ybWF0dGVkLjwvcHJlc2VydmUyPiAgPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08L21haW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzFlNmYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIG1haW4gU1lTVEVNICJ4bWwtc3BhY2UtcHJlc2VydmUuZHRkIj4KLTxtYWluPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLQk8cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gLgotICAuCi0gIC4KLSAgPC9wcmVzZXJ2ZT4KLQlvZiB0aGUgZm9ybWF0dGVyLgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9ImRlZmF1bHQiPgotCQlUaGlzIHBhcnRpY3VsYXIgdGV4dCBjYW4KLQotCQlhbmQgc2hvdWxkIGJlIHJlZm9ybWF0dGVkLgotCTwvcHJlc2VydmU+Ci0KLQk8cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQ+Ci0JCQlObyBtYW4KLQotCQkJaXMgYW4KLQotCQkJaXNsYW5kLCAuIC4gLiBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwCi0JCQlwbGVhc2UgLSB3YXN0ZSBvZiBzcGFjZQotICA8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2VmNTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIG1haW4gU1lTVEVNICJ4bWwtc3BhY2UtcHJlc2VydmUuZHRkIj4KLTxtYWluPgotCTxub3RoaW5nPiB0aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2UgCi0JPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotCW9mIHRoZSBmb3JtYXR0ZXIuCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCVRoaXMgcGFydGljdWxhciB0ZXh0IGNhbiBhbmQgc2hvdWxkIGJlIHJlZm9ybWF0dGVkLgotCTwvcHJlc2VydmU+Ci0JPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0PgotCQlObyBtYW4gaXMgYW4gaXNsYW5kLCAuIC4gLiBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwCi0JCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0JPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLQk8cHJlc2VydmUyPgotVGhpcyBwYXJ0aWN1bGFyCi0gIHRleHQgbWF5IAotCi1ub3QgIHJlZm9ybWF0dGVkLjwvcHJlc2VydmUyPgotCTxub3RoaW5nPiB0aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2UgCi0JPC9ub3RoaW5nPgotPC9tYWluPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YTJiNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBtYWluIFNZU1RFTSAieG1sLXNwYWNlLXByZXNlcnZlLmR0ZCI+Ci08bWFpbj4KLQk8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTxwcmVzZXJ2ZSAgICAgPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyLgotICAgPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci1UaGlzIHBhcnRpY3VsYXIgdGV4dCBjYW4gCi0KLWFuZCAgICAgc2hvdWxkIGJlIHJlZm9ybWF0dGVkLjwvcHJlc2VydmU+Ci0gICAKLTxwcmVzZXJ2ZSAgICAgPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0ID4KLSBObyBtYW4KLSAKLSBpcyBhbgotIAotIGlzbGFuZCwgLgotICAuCi0gIC4KLSBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwIHBsZWFzZSAtIHdhc3RlIG9mICAgICAgICAgICBzcGFjZQotIAk8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotICAgPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4gIDxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTE5M2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiBidXQtYXR0ci1jbGVhbi11cD0idHJ1ZSI+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gLgotICAuCi0gIC4KLSAgPC9wcmVzZXJ2ZT4KLQlvZiB0aGUgZm9ybWF0dGVyCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiIGJ1dC1hdHRyLWNsZWFuLXVwPSJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdAotCQkJeG1sOnNwYWNlPSJkZWZhdWx0Ij4KLQkJCU5vIG1hbgotCi0JCQlpcyBhbgotCi0JCQlpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0gIDwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YWU4MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0JPG5vdGhpbmc+IHRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZSAKLQk8L25vdGhpbmc+Ci0JPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiIGJ1dC1hdHRyLWNsZWFuLXVwPSJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotCW9mIHRoZSBmb3JtYXR0ZXIKLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgYnV0LWF0dHItY2xlYW4tdXA9InRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0Ci0JCXhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCU5vIG1hbiBpcyBhbiBpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJcGxlYXNlIC0gd2FzdGUgb2Ygc3BhY2UKLQk8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxub3RoaW5nPiB0aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2UgCi0JPC9ub3RoaW5nPgotPC9tYWluPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IxODc1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyCi08cHJlc2VydmUgIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0IHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1NjdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+DQotDQotPCFFTEVNRU5UIG1haW4gKCNQQ0RBVEEgfCBub3RoaW5nIHwgcHJlc2VydmUgfCBwcmVzZXJ2ZTIpKiA+DQotDQotPCFFTEVNRU5UIHByZXNlcnZlICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCi0NCi08IUVMRU1FTlQgcHJlc2VydmUyICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlMiB4bWw6c3BhY2UgTk1UT0tFTiAjRklYRUQgInByZXNlcnZlIj4NCi0NCi08IUVMRU1FTlQgc3BhY2UtZGVmYXVsdCAoI1BDREFUQXwgbm90aGluZyB8IHByZXNlcnZlKSo+DQotPCFBVFRMSVNUIHNwYWNlLWRlZmF1bHQgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAnZGVmYXVsdCc+DQotDQotPCFFTEVNRU5UIG5vdGhpbmcgKCNQQ0RBVEEpID4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QtYWN0dWFsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTNlNWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzb25nIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InhtbC13aGl0ZXNwYWNlLnhzZCI+Ci0JPGFydGlzdD4gICBTb21lICBTaW5nZXIgIDwvYXJ0aXN0PgotCTx5ZWFyPjE5OTI8L3llYXI+Ci0JPHRpdGxlPkxvcmVtIGlwc3VtIGRvbG9yPC90aXRsZT4KLQk8bHlyaWNzPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgotCQkgTnVuYyBpbiBuaXNpLiBJbnRlZ2VyIHF1aXMgcXVhbSBub24gZXJvcyBhY2N1bXNhbiBlbGVtZW50dW0uCi0JCQlTZWQgcmlzdXMgb3JjaSwJCSBsb2JvcnRpcyBhdCwgcHVsdmluYXIgYXQsIHZhcml1cyBhYywgbmVxdWUuCi0JTW9yYmkgcGVkZSBudWxsYSwgdGluY2lkdW50IGFjLCBzZW1wZXIgdmVsLCB1bHRyaWNpZXMgdml0YWUsIGxhY3VzLgotCQlOdW5jIG51bmMuCQkgICA8L2x5cmljcz4KLQk8bGVuZ3RoPjI8L2xlbmd0aD4KLQk8YWxidW0+TG9yZW0gaXBzdW0gZG9sb3I8L2FsYnVtPgotCTxsb2NhdGlvbj4gICAgIFJhbGVpZ2gsICBOQywgICAgICBVU0EgIDwvbG9jYXRpb24+Ci08L3Nvbmc+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlYmQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzb25nIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249InhtbC13aGl0ZXNwYWNlLnhzZCI+Ci0JPGFydGlzdD4JCSBTb21lIAlTaW5nZXIKLQk8L2FydGlzdD4KLQk8eWVhcj4JMTk5MiA8L3llYXI+Ci0JPHRpdGxlPiAgIAlMb3JlbQkJICAgIGlwc3VtIGRvbG9yCTwvdGl0bGU+Ci0JPGx5cmljcz5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4KLQkJIE51bmMgaW4gbmlzaS4gSW50ZWdlciBxdWlzIHF1YW0gbm9uIGVyb3MgYWNjdW1zYW4gZWxlbWVudHVtLgotCQkJU2VkIHJpc3VzIG9yY2ksCQkgbG9ib3J0aXMgYXQsIHB1bHZpbmFyIGF0LCB2YXJpdXMgYWMsIG5lcXVlLgotCU1vcmJpIHBlZGUgbnVsbGEsIHRpbmNpZHVudCBhYywgc2VtcGVyIHZlbCwgdWx0cmljaWVzIHZpdGFlLCBsYWN1cy4KLQkJTnVuYyBudW5jLgkJICAgPC9seXJpY3M+Ci0JPGxlbmd0aD4yPC9sZW5ndGg+Ci0JPGFsYnVtPgkgICAJTG9yZW0gCWlwc3VtIGRvbG9yIDwvYWxidW0+Ci0JPGxvY2F0aW9uPiAgICAJUmFsZWlnaCwgCU5DLCAJCQkJCVVTQQkJPC9sb2NhdGlvbj4KLTwvc29uZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmOTc3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ic29uZyIgdHlwZT0ieHNkU29uZyIgLz4KLQk8IS0tIERlZmluZSBhIHNpbXBsZSB0eXBlIHRvIHRlc3QgdGhhdCB0aGUgaGllcmFyY2h5IG92ZXJyaWRpbmcgd2hpdGVzcGFjZSBydWxlIGlzIG9ic2VydmVkIC0tPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb2xsYXBzZWRTdHJpbmciPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgLz4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8IS0tIERlZmluZSBhIHNpbXBsZSB0eXBlIHRvIHRlc3QgdGhhdCB0aGUgd2hpdGVzcGFjZSBydWxlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBhbmNlc3RvciAtLT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTm9ybWFsaXplZCI+Ci0gIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6bm9ybWFsaXplZFN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gIAk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ieHNkU29uZyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGJlIHJlcGxhY2VkIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImFydGlzdCIgdHlwZT0ieHNkOm5vcm1hbGl6ZWRTdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ieWVhciIgdHlwZT0ieHNkOm5vbk5lZ2F0aXZlSW50ZWdlciIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InhzZDp0b2tlbiIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgYmUgcHJlc2VydmVkIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Imx5cmljcyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibGVuZ3RoIiB0eXBlPSJ4c2Q6ZHVyYXRpb24iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iYWxidW0iIHR5cGU9IkNvbGxhcHNlZFN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhdGlvbiIgdHlwZT0iTm9ybWFsaXplZCIgLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTQyNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKLQl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTxodG1sPgotCQkJPGJvZHk+Ci0JCQkJPGgyPlNwYWNlIENoZWNraW5nPC9oMj4KLQkJCQk8cD4KLQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPmNlbnRlcjwveHNsOmF0dHJpYnV0ZT4KLQkJCQkJQ2hlY2s6Ci0JCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJ0ZXh0L2l0ZW0iPgotCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNvbWV0aGluZyIgLz4KLQkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT1sYXN0KCktMSI+Ci0JCQkJCQkJPHhzbDp0ZXh0PnRyYWlsaW5nIHNwYWNlcyAgICA8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotCQkJCQkJCTx4c2w6dGV4dD4gICAgbGVhZGluZyBzcGFjZXM8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpIj4KLQkJCQkJCQk8eHNsOnRleHQ+bm9zcGFjZTwveHNsOnRleHQ+Ci0JCQkJCQk8L3hzbDppZj4KLQkJCQkJPC94c2w6Zm9yLWVhY2g+Ci0JCQkJPC9wPgotCQkJPC9ib2R5PgotCQk8L2h0bWw+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4N2UzODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgoteG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci08aHRtbD4KLSAgICA8Ym9keT4KLSAgICA8aDI+U3BhY2UgQ2hlY2tpbmc8L2gyPgotICAgIDxwPjx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+Q2hlY2s6PHhzbDpmb3ItZWFjaCBzZWxlY3Q9InRleHQvaXRlbSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNvbWV0aGluZyIvPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKS0xIj4KLSAgICAgICAgPHhzbDp0ZXh0PnRyYWlsaW5nIHNwYWNlcyAgICA8L3hzbDp0ZXh0PgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotICAgICAgICA8eHNsOnRleHQ+ICAgIGxlYWRpbmcgc3BhY2VzPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKSI+Ci0gICAgICAgIDx4c2w6dGV4dD5ub3NwYWNlPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgIDwveHNsOmZvci1lYWNoPgotICAgIDwvcD4KLSAgPC9ib2R5PgotICA8L2h0bWw+Ci08L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZyYWdGaWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1ZjVhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RGcmFnRmlsZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RGcmFnKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCVN0cmluZyB0ZXN0U3RyaW5nMSA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cclxuIiArICI8IS0tVGhpcyBpcyBhbiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmaWxlIC0gbWFudWFsIGNoYW5nZXMgdG8gaXQgd2lsbCBiZSBpZ25vcmVkIGFuZCBvdmVyd3JpdHRlbi4tLT5cclxuIiArICI8RnJhZ21lbnQgcGFyZW50PVwiL2VqYi1qYXIvZW50ZXJwcmlzZS1iZWFucyZsdDtkZXNjcmlwdGlvbixkaXNwbGF5LW5hbWUsc21hbGwtaWNvbixsYXJnZS1pY29uXCIgZGVzdGluYXRpb249XCJlamItamFyLnhtbFwiIHR5cGU9XCJ4bWxcIiB4bWxpZD1cImlkLHhtaTppZFwiIHRhZ1NldD1cImVqYlwiPlxyXG4iICsgIjxzZXNzaW9uIGlkPVwiZWpicy5UZXN0QmVhblwiPlxyXG4iICsgIjxlamItbmFtZT5UZXN0PC9lamItbmFtZT5cclxuIiArICI8aG9tZT5lamJzLlRlc3RIb21lPC9ob21lPlxyXG4iICsgIjxyZW1vdGU+ZWpicy5UZXN0PC9yZW1vdGU+XHJcbiIgKyAiPGVqYi1jbGFzcz5lamJzLlRlc3RCZWFuPC9lamItY2xhc3M+XHJcbiIgKyAiPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT5cclxuIiArICI8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+XHJcbiIgKyAiPC9zZXNzaW9uPlxyXG4iICsgIjwvRnJhZ21lbnQ+IjsKLQotCi0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHRlc3RTdHJpbmcxLmdldEJ5dGVzKCJ1dGY4IikpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZCgidGVzdC5mcmFnIiwgaW5wdXRTdHJlYW0sIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RnJhZ1goKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSAiPCEtLVRoaXMgaXMgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZSAtIG1hbnVhbCBjaGFuZ2VzIHRvIGl0IHdpbGwgYmUgaWdub3JlZCBhbmQgb3ZlcndyaXR0ZW4uLS0+XHJcbiIgKyAiPEZyYWdtZW50IHBhcmVudD1cIi9lamItamFyL2VudGVycHJpc2UtYmVhbnMmbHQ7ZGVzY3JpcHRpb24sZGlzcGxheS1uYW1lLHNtYWxsLWljb24sbGFyZ2UtaWNvblwiIGRlc3RpbmF0aW9uPVwiZWpiLWphci54bWxcIiB0eXBlPVwieG1sXCIgeG1saWQ9XCJpZCx4bWk6aWRcIiB0YWdTZXQ9XCJlamJcIj5cclxuIiArICI8c2Vzc2lvbiBpZD1cImVqYnMuVGVzdEJlYW5cIj5cclxuIiArICI8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+XHJcbiIgKyAiPGhvbWU+ZWpicy5UZXN0SG9tZTwvaG9tZT5cclxuIiArICI8cmVtb3RlPmVqYnMuVGVzdDwvcmVtb3RlPlxyXG4iICsgIjxlamItY2xhc3M+ZWpicy5UZXN0QmVhbjwvZWpiLWNsYXNzPlxyXG4iICsgIjxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+XHJcbiIgKyAiPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPlxyXG4iICsgIjwvc2Vzc2lvbj5cclxuIiArICI8L0ZyYWdtZW50PiI7Ci0KLQotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSh0ZXN0U3RyaW5nKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoInRlc3QuZnJhZ3giLCBpbnB1dFN0cmVhbSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsTWFuYWdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDkwZDBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKCkgewotCQlzdXBlcigiVGVzdE1vZGVsTWFuYWdlciIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgYWZ0ZXIgdXNlIQotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpIHsKLQkJLy8gZnJvbSBhIGZpbGUKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGYpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JfQotCQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNTSgpIHsKLQkJcmV0dXJuIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvcHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCXRyeSB7Ci0JCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbENvcHkgPSBnZXRNTSgpLmNvcHlNb2RlbEZvckVkaXQobW9kZWwuZ2V0SWQoKSwgIm5ld0lkIik7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiY29waWVkIG1vZGVsIHdhcyBudWxsIiwgbW9kZWxDb3B5KTsKLQkJCX0KLQkJCWNhdGNoIChSZXNvdXJjZUluVXNlIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gZ2V0TU0oKS5jcmVhdGVOZXdJbnN0YW5jZShtb2RlbCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZSBvZjogIiArIG1vZGVsLCBtb2RlbCAhPSBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQkvLyBlbnN1cmUgbW9kZWwgYWxyZWFkeSBleGlzdHMKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJYm9vbGVhbiByZXNvdXJjZUV4aXN0cyA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlnZXRNTSgpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCX0KLQkJCWNhdGNoKFJlc291cmNlQWxyZWFkeUV4aXN0cyBleCkgewotCQkJCXJlc291cmNlRXhpc3RzID0gdHJ1ZTsKLQkJCX0KLQkJCWFzc2VydFRydWUoInNob3VsZCBoYXZlIGdvdHRlbiBSZXNvdXJjZUFscmVhZHlFeGl0cyBleGNlcHRpb24iLCByZXNvdXJjZUV4aXN0cyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSAgdGhyb3dzIElPRXhjZXB0aW9uLCBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBnZXRNTSgpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgc3RydWN0dXJlZCBkb2N1bWVudCIsIHNEb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21GaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZXhpc3RpbmdNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWV4aXN0aW5nTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGYpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGdldCBleGlzdGluZyBtb2RlbCIsIGV4aXN0aW5nTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZXhpc3RpbmdNb2RlbCAhPSBudWxsKQotCQkJCWV4aXN0aW5nTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQkJCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbHMgc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlIiwgbW9kZWwgPT0gZ290dGVuTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZ290dGVuTW9kZWwgIT0gbnVsbCkKLQkJCQlnb3R0ZW5Nb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kZWxGcm9tRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBnZXQgbW9kZWwiLCBtb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkgICAgZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldE1vZGVsRm9yRWRpdChkb2MpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWxzIHNob3VsZCBiZSB0aGUgc2FtZSBpbnN0YW5jZSIsIG1vZGVsID09IGdvdHRlbk1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGdvdHRlbk1vZGVsICE9IG51bGwpCi0JCQkJZ290dGVuTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNTaGFyZWQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsMiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCW1vZGVsMiA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCS8vIFRPRE86IHdpbGwgY2hhbmdlIHdoZW4gQVBJIGFkZGVkIHRvIE1NCi0JCQlib29sZWFuIGlzU2hhcmVkID0gZ2V0TU0oKS5pc1NoYXJlZChtb2RlbC5nZXRJZCgpKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIHNob3VsZCBiZSBzaGFyZWQiLCBpc1NoYXJlZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChtb2RlbDIgIT0gbnVsbCkKLQkJCQltb2RlbDIucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVpbml0aWFsaXplKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWdldE1NKCkucmVpbml0aWFsaXplKG1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbGVhc2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE86IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgd2hlbiBNTSBoYXMgdGhpcyBmdW5jdGlvbgotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGNoYW5nZSB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JCQltb2RlbC5zYXZlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWxJZk5vdFNoYXJlZCgpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGltcGxlbWVudCB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTVhNDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nQnVmZmVySW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVW56aXBwZWRQcm9qZWN0VGVzdGVyOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbHNGcm9tRmlsZXMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FWElTVEVOVF9GSUxFTkFNRTEgPSAidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQxLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVYSVNURU5UX0ZJTEVOQU1FMiA9ICJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudDIueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORVhJU1RFTlRfRklMRU5BTUUzID0gInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50My54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWElTVEVOVF9GSUxFTkFNRTEgPSAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiOwotCXByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEZpbGVXaXRoQnVmZmVyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVCdWZmZXIoTk9ORVhJU1RFTlRfRklMRU5BTUUxLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoTk9ORVhJU1RFTlRfRklMRU5BTUUyLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MSURzKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVJRHMoTk9ORVhJU1RFTlRfRklMRU5BTUUzLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZUNhc2UoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZShFWElTVEVOVF9GSUxFTkFNRTEsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkQ29udGVudHNBbmRDcmVhdGVGaWxlKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0gc3RyaW5nU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCJ0ZXN0aW5nIHRlc3RpbmcgdGVzdGluZyIpOwotCQlmaWxlLmNyZWF0ZShzdHJpbmdTdHJlYW0sIGZhbHNlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgY2xhc3MxLCBDbGFzcyBjbGFzczIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0JCXRyeSB7Ci0JCQkvLyBjb3VudCBhcyBzdWNjZXNzIGlmIGdldHMgdG8gaGVlciB3aXRob3V0IGV4Y2VwdGlvbgotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJCVN0cmluZyBmaWxlTG9jYXRpb24gPSBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQkJCVN0cmluZyBpZCA9IG1vZGVsLmdldElkKCk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGVMb2NhdGlvbjogIiArIGZpbGVMb2NhdGlvbik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJpZDogIiArIGlkKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZUJ1ZmZlcihTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCi0JCUlUZXh0RmlsZUJ1ZmZlciBmaWxlQnVmZmVyQmVmb3JlRXhpc3RzID0gZ2V0VGV4dEJ1ZmZlcihmaWxlKTsKLQotCQlhZGRDb250ZW50c0FuZENyZWF0ZUZpbGUoZmlsZSk7Ci0KLQkJSVRleHRGaWxlQnVmZmVyIGZpbGVCdWZmZXJBZnRlckV4aXN0cyA9IGdldFRleHRCdWZmZXIoZmlsZSk7Ci0KLQkJYm9vbGVhbiBidWZmZXJzSWRlbnRpY2FsID0gZmlsZUJ1ZmZlckJlZm9yZUV4aXN0cyA9PSBmaWxlQnVmZmVyQWZ0ZXJFeGlzdHM7Ci0JCWFzc2VydFRydWUoYnVmZmVyc0lkZW50aWNhbCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVCdWZmZXJCZWZvcmVFeGlzdHMuZ2V0TG9jYXRpb24oKSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZUJ1ZmZlckFmdGVyRXhpc3RzLmdldExvY2F0aW9uKCkpOwotCQl9Ci0JCQotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlSURzKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgY2xhc3MxLCBDbGFzcyBjbGFzczIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0KLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJJRDogIiArIG1vZGVsLmdldElkKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQmFzZUxvY2F0aW9uIiArIG1vZGVsLmdldEJhc2VMb2NhdGlvbigpKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElUZXh0RmlsZUJ1ZmZlciBnZXRUZXh0QnVmZmVyKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBmaWxlQnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlJUGF0aCBmaWxlSVBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlQYXRoIG5vcm1hbGl6ZWRQYXRoID0gRmlsZUJ1ZmZlcnMubm9ybWFsaXplTG9jYXRpb24oZmlsZUlQYXRoKTsKLQkJZmlsZUJ1ZmZlck1hbmFnZXIuY29ubmVjdChub3JtYWxpemVkUGF0aCwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBmaWxlQnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihub3JtYWxpemVkUGF0aCk7Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0U3RydWN0dXJlZE1vZGVsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0U3RydWN0dXJlZE1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NmQ5MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZE1vZGVsIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9ICJET0NVTUVOVC1MT0FERVIiOwotCS8vIGlzIGl0IGEgcHJvYmxlbSB0byB1bnppcCB0aGUgc2FtZSBwcm9qZWN0IGluCi0JLy8gZGlmZmVyZW50IHRlc3RzPwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRNb2RlbCgpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3R1cmVkTW9kZWwiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQkKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWJvdXRUb0NoYW5nZU1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRSZW1vdmVNb2RlbFN0YXRlTGlzdGVuZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IElNb2RlbFN0YXRlTGlzdGVuZXIoKSB7Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbEFib3V0VG9CZUNoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJCQkvLwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCQkJCS8vIAkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbERpcnR5U3RhdGVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIGJvb2xlYW4gaXNEaXJ0eSkgewotCQkJCQkvLwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VEZWxldGVkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCQkJLy8gCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxSZXNvdXJjZU1vdmVkKElTdHJ1Y3R1cmVkTW9kZWwgb2xkTW9kZWwsIElTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwpIHsKLQkJCQkJLy8gCQkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbEFib3V0VG9CZVJlaW5pdGlhbGl6ZWQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJCQkJLy8gCQotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVpbml0aWFsaXplZChJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQkJCQkvLyAKLQkJCQl9Ci0JCQl9OwotCi0JCQltb2RlbC5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLQotCQkJbW9kZWwucmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCS8qKgotCSAqIFRlc3QgZXhwZWN0ZXMgYW4gZXhjZXB0aW9uIHNpbmNlIG9ubHkgYSBjaGFuZ2VkTW9kZWwgc2VudCwgd2l0aG91dAotCSAqIGJlZ2lubmluZyAnYWJvdXRUb0NoYW5nZU1vZGVsJwotCSAqIAotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlZE1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQltb2RlbC5jaGFuZ2VkTW9kZWwoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWFzc2VydFRydWUoZSBpbnN0YW5jZW9mIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbik7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJU3RyaW5nIGN0ID0gbW9kZWwuZ2V0Q29udGVudFR5cGVJZGVudGlmaWVyKCk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBoYXMgd3JvbmcgY29udGVudCB0eXBlOiIgKyBjdCArICIgIT0gIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIGN0LmVxdWFscyhDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEJhc2VMb2NhdGlvbigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCVN0cmluZyBsb2NhdGlvbiA9IG1vZGVsLmdldEJhc2VMb2NhdGlvbigpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgYmFzZSBsb2NhdGlvbiIsIGxvY2F0aW9uLmVxdWFscygiLyIgKyBmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yeVJlZ2lzdHJ5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJbW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmRleGVkUmVnaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigwKTsKLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGV4ZWRSZWdpb25zKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJLy8gbm90IGltcGxlbWVudGVkIHlldC4uLgotCQkJLy8gbW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbnMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZG9jdW1lbnQgaXMgbnVsbCIsIGRvYyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzRGlydHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRGYWxzZSgibW9kZWwgc2hvdWxkIG5vdCBiZSBkaXJ0eSIsIG1vZGVsLmlzRGlydHkoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzTW9kZWxTdGF0ZUNoYW5naW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQlhc3NlcnRGYWxzZSgibW9kZWwgc2hvdWxkIG5vdCBiZSBjaGFuZ2luZyIsIG1vZGVsLmlzTW9kZWxTdGF0ZUNoYW5naW5nKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc05ldygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJLy8gdGhpcyBBUEkgc2VlbXMgc3RyYW5nZQotCQkvLyBhc3NlcnRGYWxzZSgibmV3IG1vZGVsIGNoZWNrIGZhaWxlZCIsIG1vZGVsLmlzTmV3KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCWFzc2VydEZhbHNlKCJyZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgYmUgbmVlZGVkIiwgbW9kZWwuaXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdElzU2F2ZU5lZWRlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCWFzc2VydEZhbHNlKCJzYXZlIHNob3VsZCBub3QgYmUgbmVlZGVkIiwgbW9kZWwuaXNTYXZlTmVlZGVkKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbmV3SW5zdGFuY2UgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQluZXdJbnN0YW5jZSA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWFzc2VydFRydWUoIklPRXhjZXB0aW9uIGR1cmluZyBtb2RlbCBuZXcgaW5zdGFuY2UiLCBmYWxzZSk7Ci0JCQl9Ci0JCQlhc3NlcnROb3ROdWxsKCJuZXcgaW5zdGFuY2UgaXMgbnVsbCIsIG5ld0luc3RhbmNlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBCZSBzdXJlIHRvIHJlbGVhc2UgYW55IG1vZGVscyBvYnRhaW5lZCBmcm9tIHRoaXMgbWV0aG9kLgotCSAqIAotCSAqLwotCUlTdHJ1Y3R1cmVkTW9kZWwgZ2V0VGVzdE1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JCUlGaWxlIGlGaWxlID0gKElGaWxlKSBwcm9qZWN0LmZpbmRNZW1iZXIoIi9maWxlcy9zaW1wbGUueG1sIik7Ci0JCS8vIGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIKLQotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGlGaWxlKTsKLQotCi0JCXJldHVybiBtb2RlbDsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFhNTE1vZGVsTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NjgzMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFhNTE1vZGVsTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWE1MTW9kZWxMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0WE1MTW9kZWxMb2FkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQlwcml2YXRlIFhNTE1vZGVsTG9hZGVyIGZMb2FkZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0iRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCQotCQotICAgIHB1YmxpYyBUZXN0WE1MTW9kZWxMb2FkZXIoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0TW9kZWxMb2FkZXIiKTsKLSAgICB9Ci0JCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJZkxvYWRlciA9IG5ldyBYTUxNb2RlbExvYWRlcigpOwotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewkKLQkKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVFbXB0eU1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBpcyBudWxsIiwgbW9kZWwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTW9kZWxXaXRoRG9jdW1lbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZW1wdHlNb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gZW1wdHlNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc0RvYy5zZXQoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48dGVzdD5cbjxpdGVtIGF0dHI9XCJ2YWxcIiAvPjwvdGVzdD5cbiIpOwotCQkKLQkJLy8gbnVsbCBoYW5kbGRlciBpcyBub3JtYWxseSBub3QgdmFsaWQsIGluY2x1ZGluZyBvbmx5IGZvciB0aGlzIHRlc3QuCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWxGcm9tRG9jID0gZkxvYWRlci5jcmVhdGVNb2RlbChzRG9jLCAiL3Rlc3QiLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZnJvbSBkb2MgaXMgbnVsbCIsIG1vZGVsRnJvbURvYyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVNb2RlbFdpdGhNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBlbXB0eU1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBlbXB0eU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzRG9jLnNldCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjx0ZXN0PlxuPGl0ZW0gYXR0cj1cInZhbFwiIC8+PC90ZXN0PlxuIik7Ci0JCS8vIFRPRE86IG5lZWQgYW4gZXhpc3RpbmcgZnVsbCBtb2RlbAotCQkvL0lTdHJ1Y3R1cmVkTW9kZWwgbW9kZWxGcm9tTW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKGVtcHR5TW9kZWwpOwotCQkvL2Fzc2VydE5vdE51bGwoIm1vZGVsIGZyb20gbW9kZWwgaXMgbnVsbCIsIG1vZGVsRnJvbU1vZGVsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEFkYXB0ZXJGYWN0b3JpZXMoKSB7Ci0JCUxpc3QgZmFjdG9yaWVzID0gZkxvYWRlci5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCWFzc2VydFRydWUoInRoZXJlIHdlcmUgbm8gYWRhcHRlciBmYWN0b3JpZXMgZm9yIFhNTCIsIGZhY3Rvcmllcy5zaXplKCkgPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdExvYWQoKSB7Ci0JCS8vIGZyb20gYSBmaWxlCQotCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotCQkKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCQlmTG9hZGVyLmxvYWQoZiwgbW9kZWwpOwotCQkJU3RyaW5nIHRleHQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byBsb2FkIiwgdGV4dC5sZW5ndGgoKSA+IDApOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdExvYWRGcm9tU3RyZWFtKCkgewotCQkvLyBuZWVkIHRvIGZpeCB0aGlzIHRlc3QKLQkJLy8gdW5sZXNzIHRoZSBBUEkgaXMgZ29pbmcgYXdheS4uLgotLy8JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0vLwkJCi0vLwkJdHJ5IHsKLS8vCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLS8vCQkJZkxvYWRlci5sb2FkKGYuZ2V0Q29udGVudHMoKSwgbW9kZWwsIEVuY29kaW5nUnVsZS5GT1JDRV9ERUZBVUxUKTsKLS8vCQkJU3RyaW5nIHRleHQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLS8vCQkJYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIGxvYWQiLCB0ZXh0Lmxlbmd0aCgpID4gMCk7Ci0vLwkJfQotLy8JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0JfQotCQotCQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7CQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3JhbmdlL1Rlc3RSYW5nZUNvbXBhcmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3JhbmdlL1Rlc3RSYW5nZUNvbXBhcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmY2FiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9yYW5nZS9UZXN0UmFuZ2VDb21wYXJlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnJhbmdlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Eb2N1bWVudEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20ucmFuZ2VzLlJhbmdlOwotCi1wdWJsaWMgY2xhc3MgVGVzdFJhbmdlQ29tcGFyZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVjbCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHZvaWQgdGVzdFJhbmdlQ29tcGFyZSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGRlY2wpOwotCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFyZW50Iik7Ly8kTk9OLU5MUy0xJAotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKLQkJRWxlbWVudCBjaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNoaWxkIik7Ly8kTk9OLU5MUy0xJAotCQlyb290LmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2hpbGQxLTEiKSk7Ly8kTk9OLU5MUy0xJAotCQlUZXh0IHRleHRub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlRleHQgTm9kZSIpOy8vJE5PTi1OTFMtMSQKLQkJcm9vdC5hcHBlbmRDaGlsZCh0ZXh0bm9kZSk7Ci0JCU5vZGVMaXN0IGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2hpbGQiKTsvLyROT04tTkxTLTEkCi0JCQotCQlSYW5nZSByYW5nZSA9ICgoRG9jdW1lbnRJbXBsKWRvY3VtZW50KS5jcmVhdGVSYW5nZSgpOwotCQlyYW5nZS5zZXRFbmQoY2hpbGRyZW4uaXRlbSgwKSwgMSk7Ci0JCQotCQlSYW5nZSBzb3VyY2VSYW5nZSA9ICgoRG9jdW1lbnRJbXBsKWRvY3VtZW50KS5jcmVhdGVSYW5nZSgpOwotCQlzb3VyY2VSYW5nZS5zZXRFbmQodGV4dG5vZGUsIDApOwotCQlpbnQgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLkVORF9UT19FTkQsIHNvdXJjZVJhbmdlKTsKLQotCQlhc3NlcnRFcXVhbHMoLTEsIHJlc3VsdCk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9OdWxsU3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhmNjZlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0KLXB1YmxpYyBjbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gLTE7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExN2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpCi0JCQlmb3JtYXR0ZXIgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOwotCX0KLQkKLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiBAcGFyYW0gZmlsZW5hbWUgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lcikKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KFN0cmluZyBmaWxlbmFtZSkgewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQkJaW5TdHJlYW0gPSBuZXcgTnVsbFN0cmVhbSgpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q29ubmVjdCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlhc3NlcnROb3ROdWxsKCJwYXJ0aXRpb25lciB3YXMgbnVsbCBmb3Igc0RvYzoiICsgc0RvYywgcGFydGl0aW9uZXIpOwotCQkJCXRyeSB7Ci0JCQkJCXN0cC5kaXNjb25uZWN0KCk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gZGlzY29ubmVjdGluZyB3LzoiICtzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmNvbm5lY3Qoc0RvYyk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gY29ubmVjdGluZyB3LzoiICsgc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcml0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTDEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9QSSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZW1wdHkueG1sIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGVyZlhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9QSSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQkKLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgb2Zmc2V0LCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsIHVzaW5nIHRoZQotCSAqIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiAgVGhpcyB0ZXN0IGFsbG93cyBmb3IgdmVyaWZ5aW5nIHRoZSB6ZXJvLWxlbmd0aAotCSAqIHBhcnRpdGlvbmluZyBiZWhhdmlvci4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBJVHlwZWRSZWdpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb24gZ2V0UGFydGl0aW9uVGVzdChTdHJpbmcgZmlsZW5hbWUsIGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCXBhcnRpdGlvbnMgPSBudWxsOwotCQlJVHlwZWRSZWdpb24gcGFydGl0aW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnRpdGlvbihvZmZzZXQpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb24uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbiArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJfQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlyZXR1cm4gcGFydGl0aW9uOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYXJlIG9mIHRoZSBnaXZlbiBwYXJ0aXRpb24gdHlwZXMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uVHlwZXMoSVR5cGVkUmVnaW9uIGFjdHVhbFR5cGVkUmVnaW9uc1tdLCBTdHJpbmcgZXhwZWN0ZWRUeXBlc1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkrKykKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9uIHR5cGUgbWlzbWF0Y2hlZCIsIGV4cGVjdGVkVHlwZXNbaV0sIGFjdHVhbFR5cGVkUmVnaW9uc1tpXS5nZXRUeXBlKCkpOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYmVnaW4gYXQgdGhlIGdpdmVuIG9mZnNldHMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb25zW10sIGludCBvZmZzZXRzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIm9mZnNldCBtaXNtYXRjaGVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXRzW2ldKTsKLQkJCWlmIChpID4gMCkgewotCQkJCWFzc2VydEVxdWFscygibGVuZ3RocyBtaXNhbGlnbmVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldE9mZnNldCgpICsgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCQotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBjb21wdXRlICIgKyBwYXJ0aXRpb25zLmxlbmd0aCArICI6ICIgKyAoZW5kVGltZS1zdGFydFRpbWUpICsgIiAobXNlY3MpIik7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQkKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJhNTU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotICAgICAgICA8aGVhZD4KLSAgICAgICAgICAgICAgICA8dGl0bGU+VGhlIFVsdGltYXRlIEEgQ29tcGFueTwvdGl0bGU+Ci0gICAgICAgIDwvaGVhZD4KLSAgICAgICAgPGJvZHk+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYmFubmVyLmdpZiIgaGVpZ2h0PSI1MSIgd2lkdGg9IjY1OSIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDwhLS0gY29tbWVudCBhZGRlZCB0byB0ZXN0cyA2IHBhcnRpdGlvbnMgLS0+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZm9vdGVyLmdpZiIgaGVpZ2h0PSIyNSIgd2lkdGg9IjY1OSIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9lbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDZjY2VlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSB0ZXN0Y2FzZSBTWVNURU0gInRlc3RjYXNlLmR0ZCI+Ci08IS0tIHRoaXMgZG9jdW1lbnQgd2lsbCBub3QgdmFsaWRhdGUgLS0+Ci08dGVzdGNhc2U+PC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC90ZXN0Y2FzZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvdGVzdGNhc2UuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDQ0MDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC90ZXN0Y2FzZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCBlbmNvZGluZz0iVVMtQVNDSUkiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PSBFbnRpdGllcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IUVOVElUWSAlIEVkdFBhZ2VTdWJDYXQgIk91dGxpbmVWaWV3IHwgUHJvcGVydHlTaGVldCB8IFNvdXJjZVZpZXciPgotPCFFTlRJVFkgJSBXZWJTdWJDYXQgIkFjY2Vzc2FiaWxpdHkgfCBBbmltR0lGRGVzaWduZXIgfCBBcHBTZXJ2ZXJDb25maWcgfCBDU1NFZGl0b3IgfCBEQldpemFyZCB8IEZUUEltcG9ydCB8IEZUUEV4cG9ydCB8IEhUVFBJbXBvcnQgfCBKYXZhQmVhbldpemFyZCB8IExpbmtTdHlsZUNvbnZXaXphcmQgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua3NWaWV3IHwgTWlzY2VsbGFuZW91cyB8IEhUTUxGaWxlV2l6YXJkIHwgSlNQRmlsZVdpemFyZCB8IFNlcnZsZXRGaWxlV2l6YXJkIHwgV2ViUHJvaldpemFyZCB8IE5MUyB8IFNhbXBsZXMgfCBXZWJBcHBEZXBsb3lEZXNjIj4KLTwhRU5USVRZICUgSFRNTFN1YkNhdCAgIlBhZ2VEZXNpZ25lciB8IERlc2lnblZpZXcgfCAgJUVkdFBhZ2VTdWJDYXQ7IHwgUHJldmlldyI+Ci08IUVOVElUWSAlIFhNTFN1YkNhdCAgIiVFZHRQYWdlU3ViQ2F0OyI+Ci08IUVOVElUWSAlIFN1YkNhdCAiKCVXZWJTdWJDYXQ7IHwgJUhUTUxTdWJDYXQ7IHwgJVhNTFN1YkNhdDspIj4KLTwhRU5USVRZICUgQ2F0ICIod2VidG9vbCB8IGh0bWwgfCB4bWwpIj4KLQotPCFFTlRJVFkgJSBTdGF0ZSAiKFVuZGVmaW5lZCB8IFVuZGVyQ29uc3RydWN0aW9uIHwgVW5kZXJSZXZpZXcgfCBSZXZpZXdDb21wbGV0ZWQgfCBBcHByb3ZlZCB8IFJlYWR5IHwgQ29tcGxldGUgfCBPYnNvbGV0ZSkiPgotPCFFTlRJVFkgJSBCdWNrZXQgIihDb21wb25lbnRUZXN0IHwgUHJvZHVjdFRlc3QgfCBJbnRlZ3JhdGlvblRlc3QgfCBUcmFuc2xhdGlvblRlc3QgfCBVbml0VGVzdCkiPgotPCFFTlRJVFkgJSBQbGF0Zm9ybSAiKEFsbCB8IFdpbjIwMDAgfCBXaW5NRSB8IFdpbk5UIHwgV2luOTggfCBMaW51eFJlZEhhdCB8IENhbGRlcmEgfCBTdVNlIHwgVHVyYm9MaW51eCkiPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT0gRWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhRUxFTUVOVCB0ZXN0Y2FzZQotICAJKChoZWFkZXIsIHN1bW1hcnksIGRlZmluaXRpb24sIGV4ZWN1dGlvbiopLHZhcmlhdGlvbiopPgotPCFFTEVNRU5UIHZhcmlhdGlvbgotICAJKGhlYWRlciwgc3VtbWFyeSwgZGVmaW5pdGlvbiwgZXhlY3V0aW9uKik+Ci0KLTwhRUxFTUVOVCBoZWFkZXIgKHN1YmplY3QsIGF1dGhvciwgY29hdXRob3IqLCBjcmVhdGlvbl9kYXRlKT4KLTwhRUxFTUVOVCBzdWJqZWN0ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBhdXRob3IgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNvYXV0aG9yICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjcmVhdGlvbl9kYXRlICgjUENEQVRBKT4KLQotPCEtLSBFeGFtcGxlIG9mIGhhdmluZyBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZSBsaXN0IGRlZmluZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAtLT4KLTwhQVRUTElTVCBoZWFkZXIKLQludW1iZXIJCQlJRAkJI1JFUVVJUkVECi0Jc3RhdGUJCQklU3RhdGU7ICAgICAgICAgIlVuZGVyQ29uc3RydWN0aW9uIgotPgotPCFBVFRMSVNUIGhlYWRlcgotCWNhdGVnb3J5CQklQ2F0OwkJI1JFUVVJUkVECi0Jc3ViQ2F0ZWdvcnkJCSVTdWJDYXQ7CSNSRVFVSVJFRAotCXN1YlN1YkNhdGVvZ29yeQkgICAgICAgIENEQVRBICAgICAgICAgCSNJTVBMSUVECi0JPgotCi08IUVMRU1FTlQgc3VtbWFyeSAodGVzdEJ1Y2tldCssIHBsYXRmb3JtKywgcGFydCosIHJlbGVhc2UrKT4KLTwhRUxFTUVOVCB0ZXN0QnVja2V0IEVNUFRZPgotPCFBVFRMSVNUIHRlc3RCdWNrZXQKLQl0eXBlCQkgCSVCdWNrZXQ7CSNSRVFVSVJFRAotPgotPCFFTEVNRU5UIHBsYXRmb3JtIEVNUFRZPgotPCFBVFRMSVNUIHBsYXRmb3JtCi0JdHlwZQkJIAklUGxhdGZvcm07CSNSRVFVSVJFRAotPgotPCFFTEVNRU5UIHBhcnQgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHJlbGVhc2UgKCNQQ0RBVEEpPgotCi0KLTwhRUxFTUVOVCBkZWZpbml0aW9uIChwdXJwb3NlLCBwcmVyZXF1aXNpdGUqLCBwcm9jZWR1cmUsIGV4cGVjdGVkX3Jlc3VsdHMpPgotPCFFTEVNRU5UIHB1cnBvc2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHByZXJlcXVpc2l0ZSBFTVBUWT4KLTwhQVRUTElTVCBwcmVyZXF1aXNpdGUKLQludW1iZXIJCQlJRFJFRgkJI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgcHJvY2VkdXJlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBleHBlY3RlZF9yZXN1bHRzICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGV4ZWN1dGlvbiBBTlk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3NzlkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0KLQotLyoqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tb25YTUwgewotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcigpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXN1bHQgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoYm9vbGVhbiB2YWxpZGF0aW5nKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBpbnN0YW5jZSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCWluc3RhbmNlLnNldFZhbGlkYXRpbmcodmFsaWRhdGluZyk7Ci0JCQlyZXN1bHQgPSBpbnN0YW5jZS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShEb2N1bWVudCBkb2N1bWVudCwgT3V0cHV0U3RyZWFtIG9zdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQkJdHJ5IHsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi0xNiIpOwotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdW5zdXBwb3J0ZWQgcHJvcGVydGllcwotCQkJfQotCQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zdHJlYW0pKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkODg1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgRGF0ZVV0aWwgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEFsbFRlc3RzLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vdyA9IG51bGw7Ci0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vdygpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgb25jZSwgc28gd2hvbGUgcnVuIGFzIHNhbWUgdGltZXN0YW1wCi0JCWlmIChEYXRlVXRpbC5ub3cgPT0gbnVsbCkgewotCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCURhdGUgdG9kYXkgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCQlEYXRlVXRpbC5ub3cgPSBmb3JtYXQuZm9ybWF0KHRvZGF5KTsKLQkJfQotCQlyZXR1cm4gRGF0ZVV0aWwubm93OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzNkNGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIjsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlyRmlsZW5hbWVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlbmFtZUZpbHRlciB7Ci0JCVN0cmluZyBzdGFydE9mQWNjZXB0YWJsZU5hbWVzOwotCi0JCXB1YmxpYyBEaXJGaWxlbmFtZUZpbHRlcihTdHJpbmcgc3RhcnRPZkRpck5hbWUpIHsKLQkJCXN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMgPSBzdGFydE9mRGlyTmFtZTsKLQkJfQotCi0JCS8qKgotCQkgKiBAc2VlIGphdmEuaW8uRmlsZUZpbHRlciNhY2NlcHQoRmlsZSkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lLCBTdHJpbmcgZmlsZW5hbWUpIHsKLQkJCS8vIHdlJ2xsIGp1c3QgYXNzdW1lIGlmIGl0IHN0YXJ0cyB3aXRoIHJpZ2h0IGtleSwgaXQgaXMgYSBkaXJlY3RvcnkgLi4uIGZvciBub3cKLQkJCXJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXMpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KFN0cmluZyBkaXJlY3RvcnlSb290TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgxMDVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLklJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JbXBvcnRPcGVyYXRpb247Ci0KLS8qKgotICogSW1wb3J0cyB6aXBwZWQgZmlsZXMgaW50byB0aGUgdGVzdCB3b3Jrc3BhY2UuIERlbGV0ZXMgYWxsIHByb2plY3RzIGluCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VW56aXBVdGlsaXR5IHsKLQljbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKLQkJcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQkJZmluaXNoZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJCXJldHVybiBmaW5pc2hlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQkJZmluaXNoZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCi0JY2xhc3MgTXlPdmVyd3JpdGVRdWVyeSBpbXBsZW1lbnRzIElPdmVyd3JpdGVRdWVyeSB7Ci0JCXB1YmxpYyBTdHJpbmcgcXVlcnlPdmVyd3JpdGUoU3RyaW5nIHBhdGhTdHJpbmcpIHsKLQkJCXJldHVybiBBTEw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9KRUNUX1pJUFNfRk9MREVSID0gInByb2plY3R0ZXN0ZmlsZXMiOwotCXByaXZhdGUgTGlzdCBmQ3JlYXRlZFByb2plY3RzID0gbnVsbDsKLQotCXB1YmxpYyBQcm9qZWN0VW56aXBVdGlsaXR5KCkgewotCQkvLyBmb3IgZGVsZXRpb24gbGF0ZXIKLQkJZkNyZWF0ZWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZVRvSW1wb3J0Ci0JICogICAgICAgICAgICB0aGUgZmlsZSB5b3Ugd2lzaCB0byBpbXBvcnQKLQkgKiBAcGFyYW0gZm9sZGVyUGF0aAotCSAqICAgICAgICAgICAgdGhlIGNvbnRhaW5lciBwYXRoIHdpdGhpbiB0aGUgd29ya3NwYWNlCi0JICovCi0JcHVibGljIHZvaWQgaW1wb3J0RmlsZShGaWxlIGZpbGVUb0ltcG9ydCwgU3RyaW5nIGZvbGRlclBhdGgpIHsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcG9ydFByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl0cnkgewotCQkJaWYgKGZpbGVUb0ltcG9ydC5leGlzdHMoKSkgewotCQkJCUlQYXRoIGNvbnRhaW5lclBhdGggPSBuZXcgUGF0aChmb2xkZXJQYXRoKTsKLQkJCQkvL2ZDcmVhdGVkUHJvamVjdHMuYWRkKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJU3RyaW5nIGluRmlsZU5hbWUgPSBpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7IC8vImM6L2V4YW1wbGUuemlwIjsKLQkJCS8vIFNwZWNpZnkgZGVzdGluYXRpb24gd2hlcmUgZmlsZSB3aWxsIGJlIHVuemlwcGVkCi0JCQkvL1N0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9Ci0JCQkvLyAiZDovZWNsaXBzZWRldi9NNV9TU0VfVEVTVFNfV09SS1NQQUNFLyI7IC8vImM6L3RlbXAvIjsKLQkJCUZpbGUgc291cmNlWmlwRmlsZSA9IG5ldyBGaWxlKGluRmlsZU5hbWUpOwotCQkJRmlsZSB1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGVzdGluYXRpb25EaXJlY3RvcnkpOwotCQkJLy8gT3BlbiBaaXAgZmlsZSBmb3IgcmVhZGluZwotCQkJWmlwRmlsZSB6aXBGaWxlID0gbmV3IFppcEZpbGUoc291cmNlWmlwRmlsZSwgWmlwRmlsZS5PUEVOX1JFQUQpOwotCQkJLy8gQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZQotCQkJRW51bWVyYXRpb24gemlwRmlsZUVudHJpZXMgPSB6aXBGaWxlLmVudHJpZXMoKTsKLQkJCVN0cmluZyBwcm9qZWN0Rm9sZGVyTmFtZSA9IG51bGw7Ci0JCQlJUHJvamVjdCBjdXJyZW50UHJvamVjdCA9IG51bGw7Ci0JCQkvLyBQcm9jZXNzIGVhY2ggZW50cnkKLQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCS8vIGdyYWIgYSB6aXAgZmlsZSBlbnRyeQotCQkJCVppcEVudHJ5IGVudHJ5ID0gKFppcEVudHJ5KSB6aXBGaWxlRW50cmllcy5uZXh0RWxlbWVudCgpOwotCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4dHJhY3Rpbmc6ICIgKyBlbnRyeSk7Ci0JCQkJRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnksIGN1cnJlbnRFbnRyeSk7Ci0JCQkJLy8gZ3JhYiBmaWxlJ3MgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLQkJCQlGaWxlIGRlc3RpbmF0aW9uUGFyZW50ID0gZGVzdEZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQkJCS8vIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaWYgbmVlZGVkCi0JCQkJZGVzdGluYXRpb25QYXJlbnQubWtkaXJzKCk7Ci0JCQkJLy8gZXh0cmFjdCBmaWxlIGlmIG5vdCBhIGRpcmVjdG9yeQotCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOwotCQkJCQlpbnQgY3VycmVudEJ5dGU7Ci0JCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQlieXRlIGRhdGFbXSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCQkJCS8vIHdyaXRlIHRoZSBjdXJyZW50IGZpbGUgdG8gZGlzawotCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJQnVmZmVyZWRPdXRwdXRTdHJlYW0gZGVzdCA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShmb3MsIEJVRkZFUik7Ci0JCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQl3aGlsZSAoKGN1cnJlbnRCeXRlID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpKSAhPSAtMSkgewotCQkJCQkJZGVzdC53cml0ZShkYXRhLCAwLCBjdXJyZW50Qnl0ZSk7Ci0JCQkJCX0KLQkJCQkJZGVzdC5mbHVzaCgpOwotCQkJCQlkZXN0LmNsb3NlKCk7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJLy8gdW5saWtlIHZlcnNpb24gaW4gc3NlLnRlc3RzLCB3ZSBkb24ndCBjcmVhdGUgcHJvamVjdAotCQkJCQkvLyBmb3IKLQkJCQkJLy8gZXZlcnkgZGlyZWN0b3J5Ci0JCQkJCS8vCQkJCQlpZihwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCS8vCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCS8vCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJCQotCQkJCQkvLwkJCQkJCWN1cnJlbnRQcm9qZWN0ID0KLQkJCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl6aXBGaWxlLmNsb3NlKCk7Ci0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdzUm9vdC5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJfQotCQl3c1Jvb3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlIHByb2plY3RzIGNyZWF0ZWQgKHVuemlwcGVkIGFuZCBpbXBvcnRlZCkgYnkgdGhpcyB1dGlsaXR5Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0Q3JlYXRlZFByb2plY3RzKCk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJcHJvamVjdHNbaV0uY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5jbG9zZShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHByb2plY3ROYW1lOwotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvL2NoYW5nZSBwcmVyZXFzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmFjayBpbgotCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJaWYgKCFwcm9qLmV4aXN0cygpKSB7Ci0JCQlwcm9qLmNyZWF0ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YQotCQkvLyBlbGVtZW50IHNlbnNlCi0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHsib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSJ9OwotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvL1Jlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1OWM4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nQ29tcGFyZVV0aWwgewotCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpIHsKLQotCQlpZiAoc3RyaW5nMSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoc3RyaW5nMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZ1JlYWRlciBzMVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMSk7Ci0JCVN0cmluZ1JlYWRlciBzMlJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMik7Ci0KLQkJLy8gYXNzdW1lIHRydWUgdW5sZXNzIGZpbmQgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaW50IHMxQ2hhciA9IC0xOwotCQlpbnQgczJDaGFyID0gLTE7Ci0JCWRvIHsKLQotCQkJczFDaGFyID0gZ2V0TmV4dENoYXIoczFSZWFkZXIpOwotCi0JCQlzMkNoYXIgPSBnZXROZXh0Q2hhcihzMlJlYWRlcik7Ci0KLQkJCWlmIChzMUNoYXIgIT0gczJDaGFyKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHMxQ2hhciAhPSAtMSAmJiBzMkNoYXIgIT0gLTEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGdldE5leHRDaGFyLgotCSAqIEBwYXJhbSBzMVJlYWRlcgotCSAqIEByZXR1cm4gY2hhcgotCSAqLwotCXByaXZhdGUgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNDcxZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBvbmUgdGltZXN0YW1wIHBlciBWTSBydW4uCi0gKiAoVGVjaG5pY2FsbHksIHBlciBjbGFzcyBsb2FkaW5nLikKLSAqLwotcHVibGljIGNsYXNzIFRpbWVzdGFtcFV0aWwgewotCi0JcHJpdmF0ZSBzdGF0aWMgRGF0ZSB0aW1lc3RhbXAgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgc2hvcnRGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQiKTsKLQkvLwlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IGxvbmdGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3dTaG9ydCA9IG51bGw7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0aW1lc3RhbXAoKSB7Ci0KLQkJaWYgKFRpbWVzdGFtcFV0aWwubm93U2hvcnQgPT0gbnVsbCkgewotCQkJVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9IHNob3J0Rm9ybWF0LmZvcm1hdChlbnN1cmVUaW1lc3RhbXAoKSk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwubm93U2hvcnQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBEYXRlIGVuc3VyZVRpbWVzdGFtcCgpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgJ3RpbWVzdGFtcCcgb25jZSBwZXIgY2xhc3MgbG9hZGluZywgCi0JCS8vIHNvIHRoaXMgJ3RpbWVzdGFtcCcgcmVtYWlucyB0aGUgc2FtZSBkdXJpbmcgCi0JCS8vIGVudGlyZSBydW4uIAotCQlpZiAoVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPT0gbnVsbCkgewotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwudGltZXN0YW1wOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIxYWFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLlNTRU1vZGVsWE1MVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg0ZjMzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc5NjhiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotdGVzdHMuamFyCi1qYXZhQ29tcGlsZXIudGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWMzNzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjN2NkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJlZiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1NTRhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmYjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NTcgKzAsMCBAQAotCi1DdXJyZW50IExvY2FsZTogZW5fVVMKLQotSlJFIHZlcnNpb246IEoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYtMjAwNDAxMjggKEpJVCBlbmFibGVkOiBqaXRjKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLmFzc2lzdGl2ZT1PTgotamF2YS5ydW50aW1lLm5hbWU9SmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZC4uLgotc3VuLmJvb3QubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudm0udmVyc2lvbj0xLjQuMgotamF2YS52bS52ZW5kb3I9SUJNIENvcnBvcmF0aW9uCi1qYXZhLnZlbmRvci51cmw9aHR0cDovL3d3dy5pYm0uY29tLwotcGF0aC5zZXBhcmF0b3I9OwotamF2YS52bS5uYW1lPUNsYXNzaWMgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yCi1qYXZhLmZ1bGx2ZXJzaW9uPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEuYXd0LmdyYXBoaWNzZW52PXN1bi5hd3QuV2luMzJHcmFwaGljc0Vudmlyb25tZW50Ci1qYXZhLmVuZG9yc2VkLmRpcnM9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1qYXZhLmF3dC5mb250cz0KLW9zLm5hbWU9V2luZG93cyBYUAotc3VuLmphdmEyZC5mb250cGF0aD0KLWphdmEubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEuc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgUGxhdGZvcm0gQVBJIFNwZWNpZmljYXRpb24KLWphdmEuY2xhc3MudmVyc2lvbj00OC4wCi1pYm0uc3lzdGVtLmVuY29kaW5nPUNwMTI1MgotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1pbnZva2VkdmlhamF2YT0KLW9zLnZlcnNpb249NS4xCi11c2VyLmhvbWU9QzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xkYXZpZHcuRE1XMlQyMwotdXNlci50aW1lem9uZT0KLWphdmEuYXd0LnByaW50ZXJqb2I9c3VuLmF3dC53aW5kb3dzLldQcmludGVySm9iCi1qYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjQKLWZpbGUuZW5jb2Rpbmc9Q3AxMjUyCi11c2VyLm5hbWU9ZGF2aWR3Ci1qYXZhLmNsYXNzLnBhdGg9RDpcYnVpbGRzXERhaWx5XGVjbGlwc2UtU0RLLUkyMDA0MDMwNC4uLgotamF2YS52bS5zcGVjaWZpY2F0aW9uLnZlcnNpb249MS4wCi1zdW4uYXJjaC5kYXRhLm1vZGVsPTMyCi1qYXZhLmhvbWU9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotamF2YS5zcGVjaWZpY2F0aW9uLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLXVzZXIubGFuZ3VhZ2U9ZW4KLWF3dC50b29sa2l0PXN1bi5hd3Qud2luZG93cy5XVG9vbGtpdAotamF2YS52bS5pbmZvPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEudmVyc2lvbj0xLjQuMgotamF2YS5leHQuZGlycz1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudmVuZG9yPUlCTSBDb3Jwb3JhdGlvbgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz0KLWphdmEuY29tcGlsZXI9aml0Ywotc3VuLmlvLnVuaWNvZGUuZW5jb2Rpbmc9VW5pY29kZUxpdHRsZQotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWJlCi1iZV9CWQotYmcKLWJnX0JHCi1ibl9JTgotY2EKLWNhX0VTCi1jYV9FU19QUkVFVVJPCi1jcwotY3NfQ1oKLWRhCi1kYV9ESwotZGFfREtfRVVSTwotZGUKLWRlX0FUCi1kZV9BVF9QUkVFVVJPCi1kZV9DSAotZGVfREUKLWRlX0RFX1BSRUVVUk8KLWRlX0xVCi1kZV9MVV9QUkVFVVJPCi1lbAotZWxfR1IKLWVsX0dSX1BSRUVVUk8KLWVuCi1lbl9BVQotZW5fQkUKLWVuX0JFX1BSRUVVUk8KLWVuX0NBCi1lbl9HQgotZW5fR0JfRVVSTwotZW5fSEsKLWVuX0lFCi1lbl9JRV9QUkVFVVJPCi1lbl9JTgotZW5fTloKLWVuX1BICi1lbl9TRwotZW5fVVMKLWVuX1pBCi1lcwotZXNfQVIKLWVzX0JPCi1lc19DTAotZXNfQ08KLWVzX0NSCi1lc19ETwotZXNfRUMKLWVzX0VTCi1lc19FU19QUkVFVVJPCi1lc19HVAotZXNfSE4KLWVzX01YCi1lc19OSQotZXNfUEEKLWVzX1BFCi1lc19QUgotZXNfUFkKLWVzX1NWCi1lc19VUwotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZmlfRklfUFJFRVVSTwotZnIKLWZyX0JFCi1mcl9CRV9QUkVFVVJPCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9GUl9QUkVFVVJPCi1mcl9MVQotZnJfTFVfUFJFRVVSTwotZ3UKLWd1X0lOCi1oaQotaGlfSU4KLWhyCi1ocl9IUgotaHUKLWh1X0hVCi1pbgotaW5fSUQKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotaXRfSVRfUFJFRVVSTwotaXcKLWl3X0lMCi1qYQotamFfSlAKLWtrCi1ra19LWgota24KLWtuX0lOCi1rbwota29rX0lOCi1rb19LUgotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbWxfSU4KLW1yCi1tcl9JTgotbXMKLW1zX01ZCi1uYl9OTwotbmwKLW5sX0JFCi1ubF9CRV9QUkVFVVJPCi1ubF9OTAotbmxfTkxfUFJFRVVSTwotbm8KLW5vX05PCi1ub19OT19OWQotb3JfSU4KLXBhCi1wYV9JTgotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1wdF9QVF9QUkVFVVJPCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2EKLXNhX0lOCi1zaAotc2hfWVUKLXNrCi1za19TSwotc2wKLXNsX1NJCi1zcQotc3FfQUwKLXNyCi1zcl9ZVQotc3YKLXN2X1NFCi1zdl9TRV9FVVJPCi10YQotdGFfSU4KLXRlCi10ZV9JTgotdGgKLXRoX1RICi10aF9USF9USAotdHIKLXRyX1RSCi11awotdWtfVUEKLXZpCi12aV9WTgotemgKLXpoX0NOCi16aF9DTl9ISwotemhfSEsKLXpoX1NHCi16aF9UVwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNTogUEMgVGFpd2FuIEJpZyA1Ci0JYWxpYXNlczogW2JpZzUsIEJpZzUtSEtTQ1NdCi0yLiAgQ2hhcnNldG5hbWU6IENFU1UtOAotCWRpc3BsYXlOYW1lOiBDRVNVLTg6IFVuaWNvZGUgVVRGLTggKHdpdGhvdXQgc3Vycm9nYXRlcykKLQlhbGlhc2VzOiBbQ0VTVThdCi0zLiAgQ2hhcnNldG5hbWU6IENPTVBPVU5EX1RFWFQKLQlkaXNwbGF5TmFtZTogQ09NUE9VTkRfVEVYVDogWDExIENvbXBvdW5kIFRleHQKLQlhbGlhc2VzOiBbeC1jb21wb3VuZC10ZXh0LCB4MTEtY29tcG91bmQtdGV4dF0KLTQuICBDaGFyc2V0bmFtZTogRVVDLUNOCi0JZGlzcGxheU5hbWU6IEVVQy1DTjogRVVDIENoaW5hCi0JYWxpYXNlczogW2V1Y19jbiwgZXVjY24sIGlibS1ldWNjbl0KLTUuICBDaGFyc2V0bmFtZTogRVVDLUpQCi0JZGlzcGxheU5hbWU6IEVVQy1KUDogRVVDIEphcGFuCi0JYWxpYXNlczogW2V1Yy1qcC1saW51eCwgeC1ldWMtanAsIHgtZXVjanAsIGV1Y19qcF9saW51eCwgZXVjanAsIGV1Y19qcF0KLTYuICBDaGFyc2V0bmFtZTogRVVDLUtSCi0JZGlzcGxheU5hbWU6IEVVQy1LUjogRVVDIEtvcmVhCi0JYWxpYXNlczogWzU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGlibS1ldWNrciwga3NjNTYwMS0xOTg3LCBpYm0tOTcwLCBldWNfa3IsIENwOTcwLCBrc19jXzU2MDEtMTk4NywgZXVja3JdCi03LiAgQ2hhcnNldG5hbWU6IEVVQy1UVwotCWRpc3BsYXlOYW1lOiBFVUMtVFc6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbZXVjX3R3LCBjbnMxMTY0MywgZXVjdHddCi04LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMDogUEMgQ2hpbmEgR0IxODAzMAotCWFsaWFzZXM6IFt3aW5kb3dzLTU0OTM2LCBpYm0tMTM5MiwgZ2IxODAzMC0yMDAwXQotOS4gIENoYXJzZXRuYW1lOiBHQjIzMTIKLQlkaXNwbGF5TmFtZTogR0IyMzEyCi0JYWxpYXNlczogW2diMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi0xMC4gIENoYXJzZXRuYW1lOiBHQksKLQlkaXNwbGF5TmFtZTogR0JLOiBQQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbR0JLXQotMTEuICBDaGFyc2V0bmFtZTogaHAtcm9tYW44Ci0JZGlzcGxheU5hbWU6IGhwLXJvbWFuODogSFAgUm9tYW4gOAotCWFsaWFzZXM6IFtDcDEwNTEsIGlibS0xMDUxLCByb21hbjgsIHI4XQotMTIuICBDaGFyc2V0bmFtZTogSUJNLTAzNwotCWRpc3BsYXlOYW1lOiBJQk0tMDM3OiBFQkNESUMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtpYm0tMzddCi0xMy4gIENoYXJzZXRuYW1lOiBJQk0tMTAwNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAwNjogSVNPIFVyZHUKLQlhbGlhc2VzOiBbaWJtMTAwNiwgQ3AxMDA2XQotMTQuICBDaGFyc2V0bmFtZTogSUJNLTEwMjUKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjU6IEVCQ0RJQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0xMDI1LCBDcDEwMjVdCi0xNS4gIENoYXJzZXRuYW1lOiBJQk0tMTAyNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAyNjogRUJDRElDIExhdGluIDUgKFR1cmtleSkKLQlhbGlhc2VzOiBbQ3AxMDI2LCBpYm0xMDI2XQotMTYuICBDaGFyc2V0bmFtZTogSUJNLTEwMjcKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjc6IEVCQ0RJQyBTQkNTIEphcGFuCi0JYWxpYXNlczogW2libTEwMjcsIENwMTAyN10KLTE3LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQxCi0JZGlzcGxheU5hbWU6IElCTS0xMDQxOiBQQyBTQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3AxMDQxLCBpYm0xMDQxXQotMTguICBDaGFyc2V0bmFtZTogSUJNLTEwNDMKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDM6IFBDIFNCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbQ3AxMDQzLCBpYm0xMDQzXQotMTkuICBDaGFyc2V0bmFtZTogSUJNLTEwNDYKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDY6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbaWJtMTA0NiwgQ3AxMDQ2XQotMjAuICBDaGFyc2V0bmFtZTogSUJNLTEwNDZTCi0JZGlzcGxheU5hbWU6IElCTS0xMDQ2UzogRUJDRElDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtDcDEwNDZTLCBpYm0xMDQ2U10KLTIxLiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDQ3OiBFQkNESUMgT3BlbiBFZGl0aW9uCi0JYWxpYXNlczogW0NwMTA0NywgaWJtMTA0N10KLTIyLiAgQ2hhcnNldG5hbWU6IElCTS0xMDg4Ci0JZGlzcGxheU5hbWU6IElCTS0xMDg4OiBQQyBTQkNTLW9ubHkgS29yZWFuIEtTCi0JYWxpYXNlczogW0NwMTA4OCwgaWJtMTA4OF0KLTIzLiAgQ2hhcnNldG5hbWU6IElCTS0xMDk3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDk3OiBFQkNESUMgRmFyc2kKLQlhbGlhc2VzOiBbQ3AxMDk3LCBpYm0xMDk3XQotMjQuICBDaGFyc2V0bmFtZTogSUJNLTEwOTgKLQlkaXNwbGF5TmFtZTogSUJNLTEwOTg6IElTTyBGYXJzaQotCWFsaWFzZXM6IFtDcDEwOTgsIGlibTEwOThdCi0yNS4gIENoYXJzZXRuYW1lOiBJQk0tMTExMgotCWRpc3BsYXlOYW1lOiBJQk0tMTExMjogRUJDRElDIEJhbHRpYwotCWFsaWFzZXM6IFtDcDExMTIsIGlibTExMTJdCi0yNi4gIENoYXJzZXRuYW1lOiBJQk0tMTExNAotCWRpc3BsYXlOYW1lOiBJQk0tMTExNDogUEMgU0JDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtDcDExMTQsIGlibTExMTRdCi0yNy4gIENoYXJzZXRuYW1lOiBJQk0tMTExNQotCWRpc3BsYXlOYW1lOiBJQk0tMTExNTogUEMgU0JDUy1vbmx5IENoaW5hCi0JYWxpYXNlczogW0NwMTExNSwgaWJtMTExNV0KLTI4LiAgQ2hhcnNldG5hbWU6IElCTS0xMTIyCi0JZGlzcGxheU5hbWU6IElCTS0xMTIyOiBFQkNESUMgRXN0b25pYQotCWFsaWFzZXM6IFtDcDExMjIsIGlibTExMjJdCi0yOS4gIENoYXJzZXRuYW1lOiBJQk0tMTEyMwotCWRpc3BsYXlOYW1lOiBJQk0tMTEyMzogRUJDRElDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTIzLCBpYm0xMTIzXQotMzAuICBDaGFyc2V0bmFtZTogSUJNLTExMjQKLQlkaXNwbGF5TmFtZTogSUJNLTExMjQ6IFBDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTI0LCBpYm0xMTI0XQotMzEuICBDaGFyc2V0bmFtZTogSUJNLTExNDAKLQlkaXNwbGF5TmFtZTogSUJNLTExNDA6IEVCQ0RJQyBVbml0ZWQgU3RhdGVzIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDAsIGlibTExNDBdCi0zMi4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MTogRUJDRElDIEdlcm1hbnkgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0MSwgaWJtMTE0MV0KLTMzLiAgQ2hhcnNldG5hbWU6IElCTS0xMTQyCi0JZGlzcGxheU5hbWU6IElCTS0xMTQyOiBFQkNESUMgRGVubWFyaywgTm9yd2F5IChldXJvKQotCWFsaWFzZXM6IFtDcDExNDIsIGlibTExNDJdCi0zNC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MwotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MzogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0MywgQ3AxMTQzXQotMzUuICBDaGFyc2V0bmFtZTogSUJNLTExNDQKLQlkaXNwbGF5TmFtZTogSUJNLTExNDQ6IEVCQ0RJQyBJdGFseSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ0LCBpYm0xMTQ0XQotMzYuICBDaGFyc2V0bmFtZTogSUJNLTExNDUKLQlkaXNwbGF5TmFtZTogSUJNLTExNDU6IEVCQ0RJQyBTcGFpbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0NSwgQ3AxMTQ1XQotMzcuICBDaGFyc2V0bmFtZTogSUJNLTExNDYKLQlkaXNwbGF5TmFtZTogSUJNLTExNDY6IEVCQ0RJQyBVSywgSXJlbGFuZCAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ2LCBpYm0xMTQ2XQotMzguICBDaGFyc2V0bmFtZTogSUJNLTExNDcKLQlkaXNwbGF5TmFtZTogSUJNLTExNDc6IEVCQ0RJQyBGcmFuY2UgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NywgaWJtMTE0N10KLTM5LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ4Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ4OiBFQkNESUMgTXVsdGlsaW5ndWFsIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDgsIGlibTExNDhdCi00MC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0OQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0OTogRUJDRElDIEljZWxhbmQKLQlhbGlhc2VzOiBbQ3AxMTQ5LCBpYm0xMTQ5XQotNDEuICBDaGFyc2V0bmFtZTogSUJNLTEzNTEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNTE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDEzNTEsIGlibTEzNTFdCi00Mi4gIENoYXJzZXRuYW1lOiBJQk0tMTM2MgotCWRpc3BsYXlOYW1lOiBJQk0tMTM2MjogUEMgREJDUy1vbmx5IEtvcmVhIEtTIGV4dGVuZGVkCi0JYWxpYXNlczogW0NwMTM2MiwgaWJtMTM2Ml0KLTQzLiAgQ2hhcnNldG5hbWU6IElCTS0xMzYzCi0JZGlzcGxheU5hbWU6IElCTS0xMzYzOiBQQyBLb3JlYSBLUyBleHRlbmRlZAotCWFsaWFzZXM6IFtDcDEzNjMsIGlibTEzNjNdCi00NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM2M0MKLQlkaXNwbGF5TmFtZTogSUJNLTEzNjNDOiBQQyBLb3JlYSBLUyBleHRlbmRlZCAoc3ludGF4KQotCWFsaWFzZXM6IFtpYm0xMzYzQywgQ3AxMzYzQ10KLTQ1LiAgQ2hhcnNldG5hbWU6IElCTS0xMzY0Ci0JZGlzcGxheU5hbWU6IElCTS0xMzY0OiBFQkNESUMgS29yZWEgS1MgZXh0ZW5kZWQKLQlhbGlhc2VzOiBbaWJtMTM2NCwgQ3AxMzY0XQotNDYuICBDaGFyc2V0bmFtZTogSUJNLTEzNzAKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzA6IFBDIFRhaXdhbiAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzcwLCBpYm0xMzcwXQotNDcuICBDaGFyc2V0bmFtZTogSUJNLTEzNzEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzE6IEVCQ0RJQyBUYWl3YW4gKGV1cm8pCi0JYWxpYXNlczogW0NwMTM3MSwgaWJtMTM3MV0KLTQ4LiAgQ2hhcnNldG5hbWU6IElCTS0xMzgwCi0JZGlzcGxheU5hbWU6IElCTS0xMzgwOiBQQyBEQkNTLW9ubHkgQ2hpbmEgR0IKLQlhbGlhc2VzOiBbaWJtMTM4MCwgQ3AxMzgwXQotNDkuICBDaGFyc2V0bmFtZTogSUJNLTEzODEKLQlkaXNwbGF5TmFtZTogSUJNLTEzODE6IFBDIENoaW5hIEdCCi0JYWxpYXNlczogW0NwMTM4MSwgaWJtMTM4MV0KLTUwLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgyCi0JZGlzcGxheU5hbWU6IElCTS0xMzgyOiBFVUMgREJDUy1vbmx5IENoaW5hIEdCCi0JYWxpYXNlczogW2libTEzODIsIENwMTM4Ml0KLTUxLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgzCi0JZGlzcGxheU5hbWU6IElCTS0xMzgzOiBFVUMgQ2hpbmEKLQlhbGlhc2VzOiBbQ3AxMzgzLCBpYm0xMzgzXQotNTIuICBDaGFyc2V0bmFtZTogSUJNLTEzODUKLQlkaXNwbGF5TmFtZTogSUJNLTEzODU6IFBDIERCQ1Mtb25seSBDaGluYSBHQksKLQlhbGlhc2VzOiBbQ3AxMzg1LCBpYm0xMzg1XQotNTMuICBDaGFyc2V0bmFtZTogSUJNLTEzODYKLQlkaXNwbGF5TmFtZTogSUJNLTEzODY6IFBDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtDcDEzODYsIGlibTEzODZdCi01NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4OAotCWRpc3BsYXlOYW1lOiBJQk0tMTM4ODogRUJDRElDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtpYm0xMzg4LCBDcDEzODhdCi01NS4gIENoYXJzZXRuYW1lOiBJQk0tMTM5MAotCWRpc3BsYXlOYW1lOiBJQk0tMTM5MDogRUJDRElDIEphcGFuIEthdGFrYW5hIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTAsIGlibTEzOTBdCi01Ni4gIENoYXJzZXRuYW1lOiBJQk0tMTM5OQotCWRpc3BsYXlOYW1lOiBJQk0tMTM5OTogRUJDRElDIEphcGFuIExhdGluIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTksIGlibTEzOTldCi01Ny4gIENoYXJzZXRuYW1lOiBJQk0tMjczCi0JZGlzcGxheU5hbWU6IElCTS0yNzM6IEVCQ0RJQyBHZXJtYW55Ci0JYWxpYXNlczogW2libTI3MywgQ3AyNzNdCi01OC4gIENoYXJzZXRuYW1lOiBJQk0tMjc3Ci0JZGlzcGxheU5hbWU6IElCTS0yNzc6IEVCQ0RJQyBEZW5tYXJrLCBOb3J3YXkKLQlhbGlhc2VzOiBbQ3AyNzcsIGlibTI3N10KLTU5LiAgQ2hhcnNldG5hbWU6IElCTS0yNzgKLQlkaXNwbGF5TmFtZTogSUJNLTI3ODogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbgotCWFsaWFzZXM6IFtpYm0yNzgsIENwMjc4XQotNjAuICBDaGFyc2V0bmFtZTogSUJNLTI4MAotCWRpc3BsYXlOYW1lOiBJQk0tMjgwOiBFQkNESUMgSXRhbHkgCi0JYWxpYXNlczogW2libTI4MCwgQ3AyODBdCi02MS4gIENoYXJzZXRuYW1lOiBJQk0tMjg0Ci0JZGlzcGxheU5hbWU6IElCTS0yODQ6IEVCQ0RJQyBTcGFpbiwgTGF0aW4gQW1lcmljYQotCWFsaWFzZXM6IFtDcDI4NCwgaWJtMjg0XQotNjIuICBDaGFyc2V0bmFtZTogSUJNLTI4NQotCWRpc3BsYXlOYW1lOiBJQk0tMjg1OiBFQkNESUMgVUssIElyZWxhbmQKLQlhbGlhc2VzOiBbQ3AyODUsIGlibTI4NV0KLTYzLiAgQ2hhcnNldG5hbWU6IElCTS0yOTAKLQlkaXNwbGF5TmFtZTogSUJNLTI5MDogRUJDRElDIFNCQ1MgSmFwYW4gS2F0YWthbmEKLQlhbGlhc2VzOiBbQ3AyOTAsIGlibTI5MF0KLTY0LiAgQ2hhcnNldG5hbWU6IElCTS0yOTcKLQlkaXNwbGF5TmFtZTogSUJNLTI5NzogRUJDRElDIEZyYW5jZQotCWFsaWFzZXM6IFtDcDI5NywgaWJtMjk3XQotNjUuICBDaGFyc2V0bmFtZTogSUJNLTMwMAotCWRpc3BsYXlOYW1lOiBJQk0tMzAwOiBFQkNESUMgREJDUy1vbmx5IEphcGFuCi0JYWxpYXNlczogW0NwMzAwLCBpYm0zMDBdCi02Ni4gIENoYXJzZXRuYW1lOiBJQk0tMzAxCi0JZGlzcGxheU5hbWU6IElCTS0zMDE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtpYm0zMDEsIENwMzAxXQotNjcuICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyCi0JZGlzcGxheU5hbWU6IElCTS0zMzcyMjogRVVDIEphcGFuCi0JYWxpYXNlczogW0NwMzM3MjIsIGlibTMzNzIyXQotNjguICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyQwotCWRpc3BsYXlOYW1lOiBJQk0tMzM3MjJDOiBFVUMgSmFwYW4gc3ludGF4Ci0JYWxpYXNlczogW2libTMzNzIyQywgQ3AzMzcyMkNdCi02OS4gIENoYXJzZXRuYW1lOiBJQk0tNDIwCi0JZGlzcGxheU5hbWU6IElCTS00MjA6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3A0MjAsIGlibTQyMF0KLTcwLiAgQ2hhcnNldG5hbWU6IElCTS00MjBTCi0JZGlzcGxheU5hbWU6IElCTS00MjBTOiBFQkNESUMgQXJhYmljIHNoYXBlZAotCWFsaWFzZXM6IFtDcDQyMFMsIGlibTQyMFNdCi03MS4gIENoYXJzZXRuYW1lOiBJQk0tNDI0Ci0JZGlzcGxheU5hbWU6IElCTS00MjQ6IEVCQ0RJQyBIZWJyZXcKLQlhbGlhc2VzOiBbaWJtNDI0LCBDcDQyNF0KLTcyLiAgQ2hhcnNldG5hbWU6IElCTS00MzcKLQlkaXNwbGF5TmFtZTogSUJNLTQzNzogUEMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtDcDQzNywgY3NwYzhjb2RlcGFnZTQzNywgaWJtNDM3XQotNzMuICBDaGFyc2V0bmFtZTogSUJNLTUwMAotCWRpc3BsYXlOYW1lOiBJQk0tNTAwOiBFQkNESUMgTGF0aW4gMQotCWFsaWFzZXM6IFtpYm01MDAsIENwNTAwXQotNzQuICBDaGFyc2V0bmFtZTogSUJNLTczNwotCWRpc3BsYXlOYW1lOiBJQk0tNzM3OiBNUy1ET1MgR3JlZWsKLQlhbGlhc2VzOiBbaWJtNzM3LCBDcDczN10KLTc1LiAgQ2hhcnNldG5hbWU6IElCTS03NzUKLQlkaXNwbGF5TmFtZTogSUJNLTc3NTogTVMtRE9TIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaWJtNzc1LCBDcDc3NV0KLTc2LiAgQ2hhcnNldG5hbWU6IElCTS04MDgKLQlkaXNwbGF5TmFtZTogSUJNLTgwODogUEMgUnVzc2lhbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtODA4LCBDcDgwOF0KLTc3LiAgQ2hhcnNldG5hbWU6IElCTS04MzMKLQlkaXNwbGF5TmFtZTogSUJNLTgzMzogRUJDRElDIFNCQ1MgS29yZWFuCi0JYWxpYXNlczogW2libTgzMywgQ3A4MzNdCi03OC4gIENoYXJzZXRuYW1lOiBJQk0tODM0Ci0JZGlzcGxheU5hbWU6IElCTS04MzQ6IEVCQ0RJQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwODM0LCBpYm04MzRdCi03OS4gIENoYXJzZXRuYW1lOiBJQk0tODM1Ci0JZGlzcGxheU5hbWU6IElCTS04MzU6IEVCQ0RJQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW0NwODM1LCBpYm04MzVdCi04MC4gIENoYXJzZXRuYW1lOiBJQk0tODM2Ci0JZGlzcGxheU5hbWU6IElCTS04MzY6IEVCQ0RJQyBTQkNTIENoaW5hCi0JYWxpYXNlczogW0NwODM2LCBpYm04MzZdCi04MS4gIENoYXJzZXRuYW1lOiBJQk0tODM3Ci0JZGlzcGxheU5hbWU6IElCTS04Mzc6IEVCQ0RJQyBEQkNTLW9ubHkgQ2hpbmEKLQlhbGlhc2VzOiBbQ3A4MzcsIGlibTgzN10KLTgyLiAgQ2hhcnNldG5hbWU6IElCTS04MzgKLQlkaXNwbGF5TmFtZTogSUJNLTgzODogRUJDRElDIFRoYWkKLQlhbGlhc2VzOiBbQ3A4MzgsIGlibTgzOF0KLTgzLiAgQ2hhcnNldG5hbWU6IElCTS04NTAKLQlkaXNwbGF5TmFtZTogSUJNLTg1MDogUEMgTGF0aW4gMQotCWFsaWFzZXM6IFtjc3BjODUwbXVsdGlsaW5ndWFsLCBDcDg1MCwgaWJtODUwXQotODQuICBDaGFyc2V0bmFtZTogSUJNLTg1MgotCWRpc3BsYXlOYW1lOiBJQk0tODUyOiBQQyBMYXRpbiAyCi0JYWxpYXNlczogW0NwODUyLCBjc3BjcDg1MiwgaWJtODUyXQotODUuICBDaGFyc2V0bmFtZTogSUJNLTg1NQotCWRpc3BsYXlOYW1lOiBJQk0tODU1OiBQQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtDcDg1NSwgaWJtODU1XQotODYuICBDaGFyc2V0bmFtZTogSUJNLTg1NgotCWRpc3BsYXlOYW1lOiBJQk0tODU2OiBQQyBIZWJyZXcgKG9sZCkKLQlhbGlhc2VzOiBbQ3A4NTYsIGlibTg1Nl0KLTg3LiAgQ2hhcnNldG5hbWU6IElCTS04NTcKLQlkaXNwbGF5TmFtZTogSUJNLTg1NzogUEMgTGF0aW4gNQotCWFsaWFzZXM6IFtjc2libTg1NywgaWJtODU3LCBDcDg1N10KLTg4LiAgQ2hhcnNldG5hbWU6IElCTS04NTgKLQlkaXNwbGF5TmFtZTogSUJNLTg1ODogUEMgTGF0aW4gMSAoZXVybykKLQlhbGlhc2VzOiBbQ3A4NTgsIGlibTg1OF0KLTg5LiAgQ2hhcnNldG5hbWU6IElCTS04NTkKLQlkaXNwbGF5TmFtZTogSUJNLTg1OTogUEMgTGF0aW4gOQotCWFsaWFzZXM6IFtDcDg1OSwgaWJtODU5XQotOTAuICBDaGFyc2V0bmFtZTogSUJNLTg2MAotCWRpc3BsYXlOYW1lOiBJQk0tODYwOiBQQyBQb3J0dWdhbAotCWFsaWFzZXM6IFtpYm04NjAsIENwODYwXQotOTEuICBDaGFyc2V0bmFtZTogSUJNLTg2MQotCWRpc3BsYXlOYW1lOiBJQk0tODYxOiBQQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODYxLCBpYm04NjFdCi05Mi4gIENoYXJzZXRuYW1lOiBJQk0tODYyCi0JZGlzcGxheU5hbWU6IElCTS04NjI6IFBDIElzcmFlbAotCWFsaWFzZXM6IFtDcDg2MiwgaWJtODYyXQotOTMuICBDaGFyc2V0bmFtZTogSUJNLTg2MwotCWRpc3BsYXlOYW1lOiBJQk0tODYzOiBQQyBDYW5hZGlhbiBGcmVuY2ggCi0JYWxpYXNlczogW2libTg2MywgQ3A4NjNdCi05NC4gIENoYXJzZXRuYW1lOiBJQk0tODY0Ci0JZGlzcGxheU5hbWU6IElCTS04NjQ6IFBDIEFyYWJpYwotCWFsaWFzZXM6IFtpYm04NjQsIENwODY0XQotOTUuICBDaGFyc2V0bmFtZTogSUJNLTg2NFMKLQlkaXNwbGF5TmFtZTogSUJNLTg2NFM6IFBDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtpYm04NjRTLCBDcDg2NFNdCi05Ni4gIENoYXJzZXRuYW1lOiBJQk0tODY1Ci0JZGlzcGxheU5hbWU6IElCTS04NjU6IFBDIE5vcmRpYwotCWFsaWFzZXM6IFtDcDg2NSwgaWJtODY1XQotOTcuICBDaGFyc2V0bmFtZTogSUJNLTg2NgotCWRpc3BsYXlOYW1lOiBJQk0tODY2OiBQQyBSdXNzaWEKLQlhbGlhc2VzOiBbQ3A4NjYsIGlibTg2Nl0KLTk4LiAgQ2hhcnNldG5hbWU6IElCTS04NjcKLQlkaXNwbGF5TmFtZTogSUJNLTg2NzogUEMgSXNyYWVsCi0JYWxpYXNlczogW0NwODY3LCBpYm04NjddCi05OS4gIENoYXJzZXRuYW1lOiBJQk0tODY4Ci0JZGlzcGxheU5hbWU6IElCTS04Njg6IFBDIFVyZHUKLQlhbGlhc2VzOiBbQ3A4NjgsIGlibTg2OF0KLTEwMC4gIENoYXJzZXRuYW1lOiBJQk0tODY5Ci0JZGlzcGxheU5hbWU6IElCTS04Njk6IFBDIEdyZWVjZQotCWFsaWFzZXM6IFtDcDg2OSwgaWJtODY5XQotMTAxLiAgQ2hhcnNldG5hbWU6IElCTS04NzAKLQlkaXNwbGF5TmFtZTogSUJNLTg3MDogRUJDRElDIExhdGluIDIKLQlhbGlhc2VzOiBbQ3A4NzAsIGlibTg3MF0KLTEwMi4gIENoYXJzZXRuYW1lOiBJQk0tODcxCi0JZGlzcGxheU5hbWU6IElCTS04NzE6IEVCQ0RJQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODcxLCBpYm04NzFdCi0xMDMuICBDaGFyc2V0bmFtZTogSUJNLTg3NAotCWRpc3BsYXlOYW1lOiBJQk0tODc0OiBQQyBUaGFpCi0JYWxpYXNlczogW2libTg3NCwgQ3A4NzRdCi0xMDQuICBDaGFyc2V0bmFtZTogSUJNLTg3NQotCWRpc3BsYXlOYW1lOiBJQk0tODc1OiBFQkNESUMgR3JlZWsKLQlhbGlhc2VzOiBbQ3A4NzUsIGlibTg3NV0KLTEwNS4gIENoYXJzZXRuYW1lOiBJQk0tODk3Ci0JZGlzcGxheU5hbWU6IElCTS04OTc6IFBDIFNCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDg5NywgaWJtODk3XQotMTA2LiAgQ2hhcnNldG5hbWU6IElCTS05MTgKLQlkaXNwbGF5TmFtZTogSUJNLTkxODogRUJDRElDIFVyZHUKLQlhbGlhc2VzOiBbaWJtOTE4LCBDcDkxOF0KLTEwNy4gIENoYXJzZXRuYW1lOiBJQk0tOTIxCi0JZGlzcGxheU5hbWU6IElCTS05MjE6IFBDIEJhbHRpYwotCWFsaWFzZXM6IFtpYm05MjEsIENwOTIxXQotMTA4LiAgQ2hhcnNldG5hbWU6IElCTS05MjIKLQlkaXNwbGF5TmFtZTogSUJNLTkyMjogUEMgRXN0b25pYW4KLQlhbGlhc2VzOiBbQ3A5MjIsIGlibTkyMl0KLTEwOS4gIENoYXJzZXRuYW1lOiBJQk0tOTI0Ci0JZGlzcGxheU5hbWU6IElCTS05MjQ6IEVCQ0RJQyBMYXRpbiA5Ci0JYWxpYXNlczogW2libTkyNCwgQ3A5MjRdCi0xMTAuICBDaGFyc2V0bmFtZTogSUJNLTkyNwotCWRpc3BsYXlOYW1lOiBJQk0tOTI3OiBQQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW2libTkyNywgQ3A5MjddCi0xMTEuICBDaGFyc2V0bmFtZTogSUJNLTkzMAotCWRpc3BsYXlOYW1lOiBJQk0tOTMwOiBFQkNESUMgSmFwYW4gREJDUwotCWFsaWFzZXM6IFtDcDkzMCwgaWJtOTMwXQotMTEyLiAgQ2hhcnNldG5hbWU6IElCTS05MzIKLQlkaXNwbGF5TmFtZTogSUJNLTkzMjogUEMgSmFwYW4gU0pJUy03OCBzeW50YXgKLQlhbGlhc2VzOiBbQ3A5MzIsIGlibTkzMl0KLTExMy4gIENoYXJzZXRuYW1lOiBJQk0tOTMzCi0JZGlzcGxheU5hbWU6IElCTS05MzM6IEVCQ0RJQyBLb3JlYSBEQkNTCi0JYWxpYXNlczogW0NwOTMzLCBpYm05MzNdCi0xMTQuICBDaGFyc2V0bmFtZTogSUJNLTkzNQotCWRpc3BsYXlOYW1lOiBJQk0tOTM1OiBFQkNESUMgQ2hpbmEgREJDUwotCWFsaWFzZXM6IFtDcDkzNSwgaWJtOTM1XQotMTE1LiAgQ2hhcnNldG5hbWU6IElCTS05MzcKLQlkaXNwbGF5TmFtZTogSUJNLTkzNzogRUJDRElDIFRhaXdhbiBEQkNTCi0JYWxpYXNlczogW0NwOTM3LCBpYm05MzddCi0xMTYuICBDaGFyc2V0bmFtZTogSUJNLTkzOQotCWRpc3BsYXlOYW1lOiBJQk0tOTM5OiBFQkNESUMgSmFwYW4gRXh0ZW5kZWQgREJDUwotCWFsaWFzZXM6IFtDcDkzOSwgaWJtOTM5XQotMTE3LiAgQ2hhcnNldG5hbWU6IElCTS05NDIKLQlkaXNwbGF5TmFtZTogSUJNLTk0MjogUEMgSmFwYW4gU0pJUy03OAotCWFsaWFzZXM6IFtpYm05NDIsIENwOTQyXQotMTE4LiAgQ2hhcnNldG5hbWU6IElCTS05NDJDCi0JZGlzcGxheU5hbWU6IElCTS05NDJDOiBQQyBKYXBhbiBTSklTLTc4IHN5bnRheAotCWFsaWFzZXM6IFtpYm05NDJDLCBDcDk0MkNdCi0xMTkuICBDaGFyc2V0bmFtZTogSUJNLTk0MwotCWRpc3BsYXlOYW1lOiBJQk0tOTQzOiBQQyBKYXBhbiBTSklTLTkwCi0JYWxpYXNlczogW2libTk0MywgQ3A5NDNdCi0xMjAuICBDaGFyc2V0bmFtZTogSUJNLTk0M0MKLQlkaXNwbGF5TmFtZTogSUJNLTk0M0M6IFBDIEphcGFuIFNKSVMtOTAgc3ludGF4Ci0JYWxpYXNlczogW0NwOTQzQywgaWJtOTQzQ10KLTEyMS4gIENoYXJzZXRuYW1lOiBJQk0tOTQ3Ci0JZGlzcGxheU5hbWU6IElCTS05NDc6IFBDIERCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTQ3LCBDcDk0N10KLTEyMi4gIENoYXJzZXRuYW1lOiBJQk0tOTQ4Ci0JZGlzcGxheU5hbWU6IElCTS05NDg6IFBDIFRhaXdhbiBTQUEKLQlhbGlhc2VzOiBbaWJtOTQ4LCBDcDk0OF0KLTEyMy4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5Ci0JZGlzcGxheU5hbWU6IElCTS05NDk6IFBDIEtvcmVhIChLUykKLQlhbGlhc2VzOiBbQ3A5NDksIGlibTk0OV0KLTEyNC4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5QwotCWRpc3BsYXlOYW1lOiBJQk0tOTQ5QzogUEMgS29yZWEgKEtTKQotCWFsaWFzZXM6IFtDcDk0OUMsIGlibTk0OUNdCi0xMjUuICBDaGFyc2V0bmFtZTogSUJNLTk1MAotCWRpc3BsYXlOYW1lOiBJQk0tOTUwOiBQQyBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTUwLCBDcDk1MF0KLTEyNi4gIENoYXJzZXRuYW1lOiBJQk0tOTUxCi0JZGlzcGxheU5hbWU6IElCTS05NTE6IFBDIERCQ1Mtb25seSBLb3JlYW4KLQlhbGlhc2VzOiBbQ3A5NTEsIGlibTk1MV0KLTEyNy4gIENoYXJzZXRuYW1lOiBJQk0tOTU0Ci0JZGlzcGxheU5hbWU6IElCTS05NTQ6IEVVQyBKYXBhbiAoZnVsbCkKLQlhbGlhc2VzOiBbQ3A5NTQsIGlibTk1NF0KLTEyOC4gIENoYXJzZXRuYW1lOiBJQk0tOTU0QwotCWRpc3BsYXlOYW1lOiBJQk0tOTU0QzogRVVDIEphcGFuIChmdWxsKSB3aXRoIHN5bnRheAotCWFsaWFzZXM6IFtDcDk1NGMsIGlibS1ldWNqcF0KLTEyOS4gIENoYXJzZXRuYW1lOiBJQk0tOTY0Ci0JZGlzcGxheU5hbWU6IElCTS05NjQ6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbQ3A5NjQsIGlibS1ldWN0d10KLTEzMC4gIENoYXJzZXRuYW1lOiBJQk0tOTcxCi0JZGlzcGxheU5hbWU6IElCTS05NzE6IEVVQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwOTcxLCBpYm05NzFdCi0xMzEuICBDaGFyc2V0bmFtZTogSVNDSUk5MQotCWRpc3BsYXlOYW1lOiBJU0NJSTkxOiBJU0NJSSBEZXZlbmFnYXJpIDkxCi0JYWxpYXNlczogW2lzY2lpXQotMTMyLiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUNOCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUNOOiBJU08gMjAyMiBUcmFkaXRpb25hbCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjItY24tY25zLCBpc28tMjAyMi1jbi1jbnMsIGlzbzIwMjJjbi1jbnMsIGlzbzIwMjJjbiwgaXNvMjAyMi1jbl0KLTEzMy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1DTi1HQgotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1DTi1HQjogSVNPIDIwMjIgU2ltcGxpZmllZCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjJjbi1nYiwgaXNvMjAyMi1jbi1nYl0KLTEzNC4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUDogSVNPIDIwMjIgSmFwYW4KLQlhbGlhc2VzOiBbamlzLCBjc2lzbzIwMjJqcDIsIGlzbzIwMjItanAsIGNzamlzZW5jb2RpbmcsIGppcy1lbmNvZGluZywgaXNvLTIwMjItanAyLCBpc28yMDIyanBdCi0xMzUuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1I6IElTTyAyMDIyIEtvcmVhCi0JYWxpYXNlczogW2lzbzIwMjIta3IsIGNzaXNvMjAyMmtyLCBpc28yMDIya3JdCi0xMzYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xOiBJU08gTGF0aW4gMSAtIFdlc3Rlcm4gRXVyb3BlCi0JYWxpYXNlczogW2NzaXNvbGF0aW4xLCBpc28taXItMTAwLCBpc284ODU5LTEsIGlibS04MTksIGlzbzg4NTlfMSwgbGF0aW4xLCA4ODU5LTEsIGlibTgxOSwgaXNvLTg4NTktMToxOTg3LCBDcDgxOSwgbDFdCi0xMzcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTAKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTA6IElTTyBMYXRpbiA2IC0gTm9yZGljCi0JYWxpYXNlczogW2lzbzg4NTktMTAsIElTT184ODU5LTEwOjE5OTIsIGxhdGluNiwgaWJtLTkxOSwgODg1OS0xMCwgaXNvLWlyLTE1NywgbDYsIGlzbzg4NTlfMTAsIGNzaXNvbGF0aW42XQotMTM4LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzOiBJU08gTGF0aW4gNyAtIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaXNvODg1OS0xMywgaXNvODg1OV8xMywgODg1OS0xM10KLTEzOS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNDogSVNPIExhdGluIDggLSBDZWx0aWMKLQlhbGlhc2VzOiBbODg1OS0xNCwgaXNvODg1OV8xNCwgaXNvLWlyLTE5OSwgSVNPXzg4NTktMTQ6MTk5OCwgbGF0aW44LCBpc284ODU5LTE0LCBpc29jZWx0aWMsIGw4XQotMTQwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTE1Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTE1OiBJU08gTGF0aW4gOSAtIEV1cm8KLQlhbGlhc2VzOiBbbDksIGlibTkyMywgY3Npc29sYXRpbjksIDg4NTktOSwgaXNvODg1OS0xNSwgaWJtLTkyMywgbGF0aW45LCBpc284ODU5XzE1LCBDcDkyMywgaXNvODg1OV8xNV9mZGlzLCBsYXRpbjBdCi0xNDEuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTYKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTY6IElTTyBSb21hbmlhbgotCWFsaWFzZXM6IFtpc284ODU5XzE2LCBpc284ODU5LTE2LCA4ODU5LTE2XQotMTQyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMjogSVNPIExhdGluIDIgLSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm05MTIsIGwyLCBpYm0tOTEyLCBpc28taXItMTAxLCBjc2lzb2xhdGluMiwgaXNvLTg4NTktMjoxOTg3LCBsYXRpbjIsIGlzbzg4NTlfMiwgQ3A5MTIsIGlzbzg4NTktMiwgODg1OS0yXQotMTQzLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMzogSVNPIExhdGluIDMgLSBMYXRpbi9Fc3BlcmFudG8KLQlhbGlhc2VzOiBbaXNvLTg4NTktMzoxOTg4LCBjc2lzb2xhdGluMywgaXNvODg1OV8zLCA4ODU5LTMsIGlzbzg4NTktMywgQ3A5MTMsIGlzby1pci0xMDksIGlibS05MTMsIGwzLCBsYXRpbjNdCi0xNDQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00OiBJU08gTGF0aW4gNCAtIEJhbHRpYwotCWFsaWFzZXM6IFtpc28taXItMTEwLCBDcDkxNCwgbDQsIGlibS05MTQsIGxhdGluNCwgaXNvODg1OV80LCBpc28tODg1OS00OjE5ODgsIGlzbzg4NTktNCwgODg1OS00LCBjc2lzb2xhdGluNF0KLTE0NS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS01Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTU6IElTTyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpc284ODU5XzUsIDg4NTktNSwgaWJtOTE1LCBpc28tODg1OS01OjE5ODgsIGNzaXNvbGF0aW5jeXJpbGxpYywgY3lyaWxsaWMsIENwOTE1LCBpc28taXItMTQ0LCBpc284ODU5LTUsIGlibS05MTVdCi0xNDYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNgotCWRpc3BsYXlOYW1lOiBJU08tODg1OS02OiBJU08gQXJhYmljCi0JYWxpYXNlczogW2lzby1pci0xMjcsIGNzaXNvbGF0aW5hcmFiaWMsIGlzbzg4NTktNiwgaWJtMTA4OSwgZWNtYS0xMTQsIGFzbW8tNzA4LCBhcmFiaWMsIGlibS0xMDg5LCBpc284ODU5XzYsIDg4NTktNiwgQ3AxMDg5LCBpc28tODg1OS02OjE5ODddCi0xNDcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNlMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNlM6IElTTyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbaXNvODg1OS02UywgaXNvODg1OV82U10KLTE0OC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS03Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTc6IElTTyBHcmVlawotCWFsaWFzZXM6IFtpc28tODg1OS03OjE5ODcsIENwODEzLCA4ODU5LTcsIGlzby1pci0xMjYsIGlibS04MTMsIGlzbzg4NTlfNywgZWNtYS0xMTgsIGdyZWVrOCwgaWJtODEzLCBlbG90LTkyOCwgY3Npc29sYXRpbmdyZWVrLCBpc284ODU5LTcsIGdyZWVrXQotMTQ5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTgKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktODogSVNPIEhlYnJldwotCWFsaWFzZXM6IFtpc28taXItMTM4LCBpc284ODU5LTgsIGlibS05MTYsIGlzbzg4NTlfOCwgY3Npc29sYXRpbmhlYnJldywgaGVicmV3LCBpc28tODg1OS04OjE5ODgsIGlibTkxNiwgQ3A5MTYsIDg4NTktOF0KLTE1MC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS05Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTk6IElTTyBMYXRpbiA1IC0gVHVya2V5Ci0JYWxpYXNlczogW0NwOTIwLCBsYXRpbjUsIGlzby1pci0xNDgsIDg4NTktOSwgbDUsIGNzaXNvbGF0aW41LCBpYm0tOTIwLCBpYm05MjAsIGlzbzg4NTlfOSwgaXNvODg1OS05XQotMTUxLiAgQ2hhcnNldG5hbWU6IEpJUzAyMDEKLQlkaXNwbGF5TmFtZTogSklTMDIwMTogSmFwYW4gSklTIDAyMDEgKGthdGFrYW5hKQotCWFsaWFzZXM6IFtdCi0xNTIuICBDaGFyc2V0bmFtZTogSklTMDIwOAotCWRpc3BsYXlOYW1lOiBKSVMwMjA4OiBKYXBhbiBKSVMgMDIwOAotCWFsaWFzZXM6IFtdCi0xNTMuICBDaGFyc2V0bmFtZTogSklTMDIxMgotCWRpc3BsYXlOYW1lOiBKSVMwMjEyOiBKYXBhbiBKSVMgMDIxMiAoZXh0ZW5kZWQpCi0JYWxpYXNlczogW10KLTE1NC4gIENoYXJzZXRuYW1lOiBKb2hhYgotCWRpc3BsYXlOYW1lOiBKb2hhYjogUEMgS29yZWFuIEpvaGFiCi0JYWxpYXNlczogW10KLTE1NS4gIENoYXJzZXRuYW1lOiBLT0k4LVIKLQlkaXNwbGF5TmFtZTogS09JOC1SOiBJbnRlcm5ldCBSdXNzaWEKLQlhbGlhc2VzOiBbaWJtLTg3OCwgY3Nrb2k4ciwga29pOCwga29pOF9yXQotMTU2LiAgQ2hhcnNldG5hbWU6IEtPSTgtUlUKLQlkaXNwbGF5TmFtZTogS09JOC1SVTogSW50ZXJuZXQgQmVsYXJ1cwotCWFsaWFzZXM6IFtpYm0tMTE2OCwga29pOF9ydV0KLTE1Ny4gIENoYXJzZXRuYW1lOiBLT0k4LVUKLQlkaXNwbGF5TmFtZTogS09JOC1VOiBJbnRlcm5ldCBVa3JhaW5lCi0JYWxpYXNlczogW2libS0xMTY3LCBrb2k4X3VdCi0xNTguICBDaGFyc2V0bmFtZTogS1NDNTYwMQotCWRpc3BsYXlOYW1lOiBLU0M1NjAxOiBLb3JlYSBLU0MKLQlhbGlhc2VzOiBbXQotMTU5LiAgQ2hhcnNldG5hbWU6IE1hY0FyYWJpYwotCWRpc3BsYXlOYW1lOiBNYWNBcmFiaWM6IEFwcGxlIEFyYWJpYwotCWFsaWFzZXM6IFtdCi0xNjAuICBDaGFyc2V0bmFtZTogTWFjQ2VudHJhbEV1cm9wZQotCWRpc3BsYXlOYW1lOiBNYWNDZW50cmFsRXVyb3BlOiBBcHBsZSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm0tMTI4Ml0KLTE2MS4gIENoYXJzZXRuYW1lOiBNYWNDcm9hdGlhbgotCWRpc3BsYXlOYW1lOiBNYWNDcm9hdGlhbjogQXBwbGUgQ3JvYXRpYW4gCi0JYWxpYXNlczogW2libS0xMjg0XQotMTYyLiAgQ2hhcnNldG5hbWU6IE1hY0N5cmlsbGljCi0JZGlzcGxheU5hbWU6IE1hY0N5cmlsbGljOiBBcHBsZSBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0tMTI4M10KLTE2My4gIENoYXJzZXRuYW1lOiBNYWNEaW5nYmF0Ci0JZGlzcGxheU5hbWU6IE1hY0RpbmdiYXQ6IEFwcGxlIERpbmdiYXQKLQlhbGlhc2VzOiBbXQotMTY0LiAgQ2hhcnNldG5hbWU6IE1hY0dyZWVrCi0JZGlzcGxheU5hbWU6IE1hY0dyZWVrOiBBcHBsZSBHcmVlawotCWFsaWFzZXM6IFtpYm0tMTI4MF0KLTE2NS4gIENoYXJzZXRuYW1lOiBNYWNIZWJyZXcKLQlkaXNwbGF5TmFtZTogTWFjSGVicmV3OiBBcHBsZSBIZWJyZXcgCi0JYWxpYXNlczogW10KLTE2Ni4gIENoYXJzZXRuYW1lOiBNYWNJY2VsYW5kCi0JZGlzcGxheU5hbWU6IE1hY0ljZWxhbmQ6IEFwcGxlIEljZWxhbmQKLQlhbGlhc2VzOiBbaWJtLTEyODZdCi0xNjcuICBDaGFyc2V0bmFtZTogTWFjUm9tYW4KLQlkaXNwbGF5TmFtZTogTWFjUm9tYW46IEFwcGxlIFJvbWFuCi0JYWxpYXNlczogW2libS0xMjc1XQotMTY4LiAgQ2hhcnNldG5hbWU6IE1hY1JvbWFuaWEKLQlkaXNwbGF5TmFtZTogTWFjUm9tYW5pYTogQXBwbGUgUm9tYW5pYQotCWFsaWFzZXM6IFtpYm0tMTI4NV0KLTE2OS4gIENoYXJzZXRuYW1lOiBNYWNTeW1ib2wKLQlkaXNwbGF5TmFtZTogTWFjU3ltYm9sOiBBcHBsZSBQb3N0U2NyaXB0IFN5bWJvbAotCWFsaWFzZXM6IFtBZG9iZS1TeW1ib2wtRW5jb2RpbmcsIGlibS0xMDM4XQotMTcwLiAgQ2hhcnNldG5hbWU6IE1hY1RoYWkKLQlkaXNwbGF5TmFtZTogTWFjVGhhaTogQXBwbGUgVGhhaQotCWFsaWFzZXM6IFtdCi0xNzEuICBDaGFyc2V0bmFtZTogTWFjVHVya2lzaAotCWRpc3BsYXlOYW1lOiBNYWNUdXJraXNoOiBBcHBsZSBUdXJraXNoCi0JYWxpYXNlczogW2libS0xMjgxXQotMTcyLiAgQ2hhcnNldG5hbWU6IE1hY1VrcmFpbmUKLQlkaXNwbGF5TmFtZTogTWFjVWtyYWluZTogQXBwbGUgVWtyYWluZQotCWFsaWFzZXM6IFtdCi0xNzMuICBDaGFyc2V0bmFtZTogUFRDUDE1NAotCWRpc3BsYXlOYW1lOiBQVENQMTU0OiBXaW5kb3dzIEN5cmlsbGljIEFzaWFuCi0JYWxpYXNlczogW0lCTS0xMTY5LCBjc1BUQ1AxNTQsIEN5cmlsbGljLUFzaWFuLCBQVDE1NF0KLTE3NC4gIENoYXJzZXRuYW1lOiBTaGlmdF9KSVMKLQlkaXNwbGF5TmFtZTogU2hpZnRfSklTOiBTaGlmdCBKSVMgSmFwYW4KLQlhbGlhc2VzOiBbXQotMTc1LiAgQ2hhcnNldG5hbWU6IFRJUy02MjAKLQlkaXNwbGF5TmFtZTogVElTLTYyMDogUEMgVGhhaWxhbmQKLQlhbGlhc2VzOiBbdGlzNjIwLjI1MzMsIHRpczYyMF0KLTE3Ni4gIENoYXJzZXRuYW1lOiBVUy1BU0NJSQotCWRpc3BsYXlOYW1lOiBVUy1BU0NJSTogQVNDSUkgNyBiaXQKLQlhbGlhc2VzOiBbaXNvLTY0Ni5pcnY6MTk4MywgSVNPNjQ2LVVTLCBBU0NJSSwgZGVmYXVsdCwgSVNPLTY0Ni5pcnY6MTk5MSwgZGlyZWN0LCBhc2NpaTcsIEFOU0lfWDMuNC0xOTg2LCBpc28taXItNiwgdXMsIGlibS0zNjcsIDY0NiwgY3NBU0NJSSwgQU5TSV9YMy40LTE5NjgsIENwMzY3XQotMTc3LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVW5pY29kZSwgVVRGMTYsIFVURl8xNiwgVUNTLTJdCi0xNzguICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkU6IFVuaWNvZGUgVVRGLTE2IEJpZy1lbmRpYW4KLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVW5pY29kZUJpZ1VubWFya2VkLCBVVEYxNkJFLCBVVEZfMTZCRSwgSVNPLTEwNjQ2LVVDUy0yXQotMTc5LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFOiBVbmljb2RlIFVURi0xNiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8xNkxFLCBVVEYxNkxFLCBVbmljb2RlTGl0dGxlVW5tYXJrZWQsIFgtVVRGLTE2TEVdCi0xODAuICBDaGFyc2V0bmFtZTogVVRGLTMyCi0JZGlzcGxheU5hbWU6IFVURi0zMjogVW5pY29kZSBVVEYtMzIKLQlhbGlhc2VzOiBbSVNPLTEwNjQ2LVVDUy00LCBVVEYzMiwgVUNTLTQsIFVURl8zMkJFXQotMTgxLiAgQ2hhcnNldG5hbWU6IFVURi0zMkJFCi0JZGlzcGxheU5hbWU6IFVURi0zMkJFOiBVbmljb2RlIFVURi0zMiBCaWctZW5kaWFuCi0JYWxpYXNlczogW1VURjMyQkUsIFgtVVRGLTMyQkUsIFVURl8zMkJFXQotMTgyLiAgQ2hhcnNldG5hbWU6IFVURi0zMkxFCi0JZGlzcGxheU5hbWU6IFVURi0zMkxFOiBVbmljb2RlIFVURi0zMiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8zMkxFLCBVVEYzMkxFLCBYLVVURi0zMkxFXQotMTgzLiAgQ2hhcnNldG5hbWU6IFVURi04Ci0JZGlzcGxheU5hbWU6IFVURi04OiBVbmljb2RlIFVURi04Ci0JYWxpYXNlczogW1VURl84LCBVVEY4XQotMTg0LiAgQ2hhcnNldG5hbWU6IFVURi04SgotCWRpc3BsYXlOYW1lOiBVVEYtOEo6IFVuaWNvZGUgVVRGLTggKEphdmEpCi0JYWxpYXNlczogW1VURjhKXQotMTg1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTA6IFdpbmRvd3MgTGF0aW4gMgotCWFsaWFzZXM6IFtpYm0tMTI1MCwgQ3AxMjUwXQotMTg2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTE6IFdpbmRvd3MgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtLTEyNTEsIENwMTI1MV0KLTE4Ny4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyOiBXaW5kb3dzIExhdGluIDEgCi0JYWxpYXNlczogW0NwMTI1MiwgaWJtLTEyNTJdCi0xODguICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUzCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MzogV2luZG93cyBHcmVlawotCWFsaWFzZXM6IFtDcDEyNTMsIGlibS0xMjUzXQotMTg5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTQ6IFdpbmRvd3MgTGF0aW4gNSAoVHVya2V5KQotCWFsaWFzZXM6IFtDcDEyNTQsIGlibS0xMjU0XQotMTkwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTU6IFdpbmRvd3MgSGVicmV3Ci0JYWxpYXNlczogW0NwMTI1NSwgaWJtLTEyNTVdCi0xOTEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NjogV2luZG93cyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3AxMjU2LCBpYm0tMTI1Nl0KLTE5Mi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTZTCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NlM6IFdpbmRvd3MgQXJhYmljIChzaGFwZWQpCi0JYWxpYXNlczogW2libS0xMjU2cywgQ3AxMjU2c10KLTE5My4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTcKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU3OiBXaW5kb3dzIExhdGluIDQgKEJhbHR0aWMpCi0JYWxpYXNlczogW0NwMTI1NywgaWJtLTEyNTddCi0xOTQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU4Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1ODogV2luZG93cyBWaWV0bmFtZXNlCi0JYWxpYXNlczogW2libS0xMTI5LCBpYm0tMTI1OCwgQ3AxMjU4XQotMTk1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtODc0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtODc0OiBXaW5kb3dzIFRoYWkKLQlhbGlhc2VzOiBbTVM4NzRdCi0xOTYuICBDaGFyc2V0bmFtZTogd2luZG93cy05MzIKLQlkaXNwbGF5TmFtZTogd2luZG93cy05MzI6IFdpbmRvd3MgSmFwYW4KLQlhbGlhc2VzOiBbbXNfa2FuamksIGNzd2luZG93czMxaiwgTVM5MzIsIHdpbmRvd3MtMzFqXQotMTk3LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTM2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTM2OiBXaW5kb3dzIENoaW5hCi0JYWxpYXNlczogW01TOTM2LCA5MzZdCi0xOTguICBDaGFyc2V0bmFtZTogd2luZG93cy05NDkKLQlkaXNwbGF5TmFtZTogd2luZG93cy05NDk6IFdpbmRvd3MgS29yZWEKLQlhbGlhc2VzOiBbaWJtLTEzNjEsIENwMTM2MSwgaWJtMTM2MSwgTVM5NDksIG1zMTM2MSwga3NjNTYwMS0xOTkyXQotMTk5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTUwCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTUwOiBXaW5kb3dzIFRhaXdhbgotCWFsaWFzZXM6IFtNUzk1MF0KLTIwMC4gIENoYXJzZXRuYW1lOiBYLVVuaWNvZGVCaWcKLQlkaXNwbGF5TmFtZTogWC1Vbmljb2RlQmlnOiBVbmljb2RlIFVURi0xNiBCaWctZW5kaWFuIHdpdGggbWFyawotCWFsaWFzZXM6IFtVbmljb2RlQmlnXQotMjAxLiAgQ2hhcnNldG5hbWU6IFgtVW5pY29kZUxpdHRsZQotCWRpc3BsYXlOYW1lOiBYLVVuaWNvZGVMaXR0bGU6IFVuaWNvZGUgVVRGLTE2IExpdHRsZS1lbmRpYW4gd2l0aCBtYXJrCi0JYWxpYXNlczogW1VuaWNvZGVMaXR0bGVdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5MjJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLQotQ3VycmVudCBMb2NhbGU6IGVuX1VTCi0KLUpSRSB2ZXJzaW9uOiAxLjQuMl8wMyAoMS40LjJfMDMtYjAyKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLnJ1bnRpbWUubmFtZT1KYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kLi4uCi1zdW4uYm9vdC5saWJyYXJ5LnBhdGg9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxiaW4KLWphdmEudm0udmVyc2lvbj0xLjQuMl8wMy1iMDIKLWphdmEudm0udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotamF2YS52ZW5kb3IudXJsPWh0dHA6Ly9qYXZhLnN1bi5jb20vCi1wYXRoLnNlcGFyYXRvcj07Ci1qYXZhLnZtLm5hbWU9SmF2YSBIb3RTcG90KFRNKSBDbGllbnQgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yXzAzLWIwMgotamF2YS5hd3QuZ3JhcGhpY3NlbnY9c3VuLmF3dC5XaW4zMkdyYXBoaWNzRW52aXJvbm1lbnQKLWphdmEuZW5kb3JzZWQuZGlycz1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlXGxpYlxlbmRvcnNlZAotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1vcy5uYW1lPVdpbmRvd3MgWFAKLXN1bi5qYXZhMmQuZm9udHBhdGg9Ci1qYXZhLmxpYnJhcnkucGF0aD1EOlxKREtzXGoyc2RrMS40LjJfMDNcYmluOy47QzpcV0lORE9XLi4uCi1qYXZhLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFBsYXRmb3JtIEFQSSBTcGVjaWZpY2F0aW9uCi1qYXZhLmNsYXNzLnZlcnNpb249NDguMAotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1vcy52ZXJzaW9uPTUuMQotdXNlci5ob21lPUM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcZGF2aWR3LkRNVzJUMjMKLXVzZXIudGltZXpvbmU9Ci1qYXZhLmF3dC5wcmludGVyam9iPXN1bi5hd3Qud2luZG93cy5XUHJpbnRlckpvYgotZmlsZS5lbmNvZGluZz1DcDEyNTIKLWphdmEuc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuNAotdXNlci5uYW1lPWRhdmlkdwotamF2YS5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuMAotc3VuLmFyY2guZGF0YS5tb2RlbD0zMgotamF2YS5ob21lPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmUKLWphdmEuc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLmxhbmd1YWdlPWVuCi1hd3QudG9vbGtpdD1zdW4uYXd0LndpbmRvd3MuV1Rvb2xraXQKLWphdmEudm0uaW5mbz1taXhlZCBtb2RlCi1qYXZhLnZlcnNpb249MS40LjJfMDMKLWphdmEuZXh0LmRpcnM9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxsaWJcZXh0Ci1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcbGliXHJ0LmphcjsuLi4KLWphdmEudmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz1odHRwOi8vamF2YS5zdW4uY29tL2NnaS1iaW4vYnVncmVwb3J0Li4uCi1zdW4uY3B1LmVuZGlhbj1saXR0bGUKLXN1bi5pby51bmljb2RlLmVuY29kaW5nPVVuaWNvZGVMaXR0bGUKLXN1bi5jcHUuaXNhbGlzdD1wZW50aXVtIGk0ODYgaTM4NgotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWhpX0lOCi1pdwotaXdfSUwKLWphCi1qYV9KUAota28KLWtvX0tSCi10aAotdGhfVEgKLXRoX1RIX1RICi16aAotemhfQ04KLXpoX0hLCi16aF9UVwotYmUKLWJlX0JZCi1iZwotYmdfQkcKLWNhCi1jYV9FUwotY3MKLWNzX0NaCi1kYQotZGFfREsKLWRlCi1kZV9BVAotZGVfQ0gKLWRlX0RFCi1kZV9MVQotZWwKLWVsX0dSCi1lbl9BVQotZW5fQ0EKLWVuX0dCCi1lbl9JRQotZW5fSU4KLWVuX05aCi1lbl9aQQotZXMKLWVzX0FSCi1lc19CTwotZXNfQ0wKLWVzX0NPCi1lc19DUgotZXNfRE8KLWVzX0VDCi1lc19FUwotZXNfR1QKLWVzX0hOCi1lc19NWAotZXNfTkkKLWVzX1BBCi1lc19QRQotZXNfUFIKLWVzX1BZCi1lc19TVgotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZnIKLWZyX0JFCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9MVQotaHIKLWhyX0hSCi1odQotaHVfSFUKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbmwKLW5sX0JFCi1ubF9OTAotbm8KLW5vX05PCi1ub19OT19OWQotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2gKLXNoX1lVCi1zawotc2tfU0sKLXNsCi1zbF9TSQotc3EKLXNxX0FMCi1zcgotc3JfWVUKLXN2Ci1zdl9TRQotdHIKLXRyX1RSCi11awotdWtfVUEKLWVuCi1lbl9VUwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNQotCWFsaWFzZXM6IFtjc0JpZzVdCi0yLiAgQ2hhcnNldG5hbWU6IEJpZzUtSEtTQ1MKLQlkaXNwbGF5TmFtZTogQmlnNS1IS1NDUwotCWFsaWFzZXM6IFtiaWc1LWhrc2NzLCBCaWc1X0hLU0NTLCBiaWc1aGtzY3NdCi0zLiAgQ2hhcnNldG5hbWU6IEVVQy1KUAotCWRpc3BsYXlOYW1lOiBFVUMtSlAKLQlhbGlhc2VzOiBbZXVjamlzLCB4LWV1Y2pwLCBjc0VVQ1BrZEZtdGphcGFuZXNlLCBldWNqcCwgRXh0ZW5kZWRfVU5JWF9Db2RlX1BhY2tlZF9Gb3JtYXRfZm9yX0phcGFuZXNlLCB4LWV1Yy1qcCwgZXVjX2pwXQotNC4gIENoYXJzZXRuYW1lOiBFVUMtS1IKLQlkaXNwbGF5TmFtZTogRVVDLUtSCi0JYWxpYXNlczogW2tzYzU2MDEsIDU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGtzYzU2MDEtMTk4NywgZXVjX2tyLCBrc19jXzU2MDEtMTk4NywgZXVja3IsIGNzRVVDS1JdCi01LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMAotCWFsaWFzZXM6IFtnYjE4MDMwLTIwMDBdCi02LiAgQ2hhcnNldG5hbWU6IEdCSwotCWRpc3BsYXlOYW1lOiBHQksKLQlhbGlhc2VzOiBbd2luZG93cy05MzYsIENQOTM2XQotNy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUAotCWFsaWFzZXM6IFtqaXMsIGppc19lbmNvZGluZywgY3NqaXNlbmNvZGluZywgY3NJU08yMDIySlAsIGlzbzIwMjJqcF0KLTguICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1IKLQlhbGlhc2VzOiBbSVNPMjAyMktSLCBjc0lTTzIwMjJLUl0KLTkuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xCi0JYWxpYXNlczogW2lzby1pci0xMDAsIDg4NTlfMSwgSVNPXzg4NTktMSwgSVNPODg1OV8xLCA4MTksIGNzSVNPTGF0aW4xLCBJQk0tODE5LCBJU09fODg1OS0xOjE5ODcsIGxhdGluMSwgY3A4MTksIElTTzg4NTktMSwgSUJNODE5LCBJU09fODg1OV8xLCBsMV0KLTEwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzCi0JYWxpYXNlczogW2lzbzg4NTlfMTNdCi0xMS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNQotCWFsaWFzZXM6IFs4ODU5XzE1LCBjc0lTT2xhdGluOSwgSUJNOTIzLCBjcDkyMywgOTIzLCBMOSwgSUJNLTkyMywgSVNPODg1OS0xNSwgTEFUSU45LCBJU09fODg1OS0xNSwgTEFUSU4wLCBjc0lTT2xhdGluMCwgSVNPODg1OV8xNV9GRElTLCBJU08tODg1OS0xNV0KLTEyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMgotCWFsaWFzZXM6IFtsMiwgaXNvLWlyLTEwMSwgSVNPXzg4NTktMjoxOTg3LCBJU09fODg1OS0yLCBsYXRpbjIsIGNzSVNPTGF0aW4yLCBpc284ODU5XzJdCi0xMy4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0zCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTMKLQlhbGlhc2VzOiBbXQotMTQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00Ci0JYWxpYXNlczogW2lzby1pci0xMTAsIGw0LCBsYXRpbjQsIGNzSVNPTGF0aW40LCBpc284ODU5XzQsIElTT184ODU5LTQ6MTk4OCwgSVNPXzg4NTktNF0KLTE1LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTUKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNQotCWFsaWFzZXM6IFtjeXJpbGxpYywgaXNvODg1OV81LCBJU09fODg1OS01LCBpc28taXItMTQ0LCBjc0lTT0xhdGluQ3lyaWxsaWNdCi0xNi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS02Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTYKLQlhbGlhc2VzOiBbXQotMTcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS03Ci0JYWxpYXNlczogW2dyZWVrOCwgRUNNQS0xMTgsIHN1bl9ldV9ncmVlaywgRUxPVF85MjgsIElTT184ODU5LTc6MTk4NywgaXNvLWlyLTEyNiwgSVNPXzg4NTktNywgaXNvODg1OV83LCBncmVlaywgY3NJU09MYXRpbkdyZWVrXQotMTguICBDaGFyc2V0bmFtZTogSVNPLTg4NTktOAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS04Ci0JYWxpYXNlczogW10KLTE5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTkKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktOQotCWFsaWFzZXM6IFtpc28taXItMTQ4LCBsYXRpbjUsIGw1LCBJU09fODg1OS05LCBJU09fODg1OS05OjE5ODksIGNzSVNPTGF0aW41LCBpc284ODU5XzldCi0yMC4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMDEKLQlkaXNwbGF5TmFtZTogSklTX1gwMjAxCi0JYWxpYXNlczogW0pJU19YMDIwMSwgWDAyMDEsIEpJUzAyMDEsIGNzSGFsZldpZHRoS2F0YWthbmFdCi0yMS4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMTItMTk5MAotCWRpc3BsYXlOYW1lOiBKSVNfWDAyMTItMTk5MAotCWFsaWFzZXM6IFtqaXNfeDAyMTItMTk5MCwgaXNvLWlyLTE1OSwgeDAyMTIsIEpJUzAyMTIsIGNzSVNPMTU5SklTWDAyMTIxOTkwXQotMjIuICBDaGFyc2V0bmFtZTogS09JOC1SCi0JZGlzcGxheU5hbWU6IEtPSTgtUgotCWFsaWFzZXM6IFtrb2k4LCBjc2tvaThyXQotMjMuICBDaGFyc2V0bmFtZTogU2hpZnRfSklTCi0JZGlzcGxheU5hbWU6IFNoaWZ0X0pJUwotCWFsaWFzZXM6IFtzaGlmdC1qaXMsIHgtc2ppcywgbXNfa2FuamksIHNoaWZ0X2ppcywgY3NTaGlmdEpJUywgc2ppcywgcGNrXQotMjQuICBDaGFyc2V0bmFtZTogVElTLTYyMAotCWRpc3BsYXlOYW1lOiBUSVMtNjIwCi0JYWxpYXNlczogW10KLTI1LiAgQ2hhcnNldG5hbWU6IFVTLUFTQ0lJCi0JZGlzcGxheU5hbWU6IFVTLUFTQ0lJCi0JYWxpYXNlczogW0lTTzY0Ni1VUywgSUJNMzY3LCBBU0NJSSwgY3AzNjcsIGFzY2lpNywgQU5TSV9YMy40LTE5ODYsIGlzby1pci02LCB1cywgNjQ2LCBpc29fNjQ2LmlydjoxOTgzLCBjc0FTQ0lJLCBBTlNJX1gzLjQtMTk2OCwgSVNPXzY0Ni5pcnY6MTk5MV0KLTI2LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVVRGXzE2XQotMjcuICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkUKLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVVRGXzE2QkUsIElTTy0xMDY0Ni1VQ1MtMl0KLTI4LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFCi0JYWxpYXNlczogW1VURl8xNkxFLCBYLVVURi0xNkxFXQotMjkuICBDaGFyc2V0bmFtZTogVVRGLTgKLQlkaXNwbGF5TmFtZTogVVRGLTgKLQlhbGlhc2VzOiBbVVRGOF0KLTMwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTAKLQlhbGlhc2VzOiBbY3AxMjUwXQotMzEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUxCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MQotCWFsaWFzZXM6IFtjcDEyNTFdCi0zMi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyCi0JYWxpYXNlczogW2NwMTI1Ml0KLTMzLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTMKLQlhbGlhc2VzOiBbY3AxMjUzXQotMzQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NAotCWFsaWFzZXM6IFtjcDEyNTRdCi0zNS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTUKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU1Ci0JYWxpYXNlczogW10KLTM2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTYKLQlhbGlhc2VzOiBbXQotMzcuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU3Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NwotCWFsaWFzZXM6IFtjcDEyNTddCi0zOC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTgKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU4Ci0JYWxpYXNlczogW10KLTM5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMzFqCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMzFqCi0JYWxpYXNlczogW2NzV2luZG93czMxSiwgd2luZG93cy05MzIsIE1TOTMyXQotNDAuICBDaGFyc2V0bmFtZTogeC1FVUMtQ04KLQlkaXNwbGF5TmFtZTogeC1FVUMtQ04KLQlhbGlhc2VzOiBbZ2IyMzEyLCBFVUNfQ04sIGV1Y2NuLCBldWMtY24sIGdiMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi00MS4gIENoYXJzZXRuYW1lOiB4LWV1Yy1qcC1saW51eAotCWRpc3BsYXlOYW1lOiB4LWV1Yy1qcC1saW51eAotCWFsaWFzZXM6IFtldWNfanBfbGludXgsIGV1Yy1qcC1saW51eF0KLTQyLiAgQ2hhcnNldG5hbWU6IHgtRVVDLVRXCi0JZGlzcGxheU5hbWU6IHgtRVVDLVRXCi0JYWxpYXNlczogW2NuczExNjQzLCBldWNfdHcsIEVVQy1UVywgZXVjdHddCi00My4gIENoYXJzZXRuYW1lOiB4LUlTQ0lJOTEKLQlkaXNwbGF5TmFtZTogeC1JU0NJSTkxCi0JYWxpYXNlczogW2lzY2lpLCBTVF9TRVZfMzU4LTg4LCBpc28taXItMTUzLCBjc0lTTzE1M0dPU1QxOTc2ODc0LCBJU0NJSTkxXQotNDQuICBDaGFyc2V0bmFtZTogeC1KSVMwMjA4Ci0JZGlzcGxheU5hbWU6IHgtSklTMDIwOAotCWFsaWFzZXM6IFtKSVNfQzY2MjYtMTk4MywgSklTMDIwOCwgY3NJU084N0pJU1gwMjA4LCB4MDIwOCwgSklTX1gwMjA4LTE5ODMsIGlzby1pci04N10KLTQ1LiAgQ2hhcnNldG5hbWU6IHgtSm9oYWIKLQlkaXNwbGF5TmFtZTogeC1Kb2hhYgotCWFsaWFzZXM6IFtqb2hhYiwgbXMxMzYxLCBrc2M1NjAxLTE5OTIsIGtzYzU2MDFfMTk5Ml0KLTQ2LiAgQ2hhcnNldG5hbWU6IHgtTVM5NTAtSEtTQ1MKLQlkaXNwbGF5TmFtZTogeC1NUzk1MC1IS1NDUwotCWFsaWFzZXM6IFtNUzk1MF9IS1NDU10KLTQ3LiAgQ2hhcnNldG5hbWU6IHgtbXN3aW4tOTM2Ci0JZGlzcGxheU5hbWU6IHgtbXN3aW4tOTM2Ci0JYWxpYXNlczogW21zOTM2LCBtc185MzZdCi00OC4gIENoYXJzZXRuYW1lOiB4LXdpbmRvd3MtOTQ5Ci0JZGlzcGxheU5hbWU6IHgtd2luZG93cy05NDkKLQlhbGlhc2VzOiBbd2luZG93czk0OSwgbXNfOTQ5LCBtczk0OV0KLTQ5LiAgQ2hhcnNldG5hbWU6IHgtd2luZG93cy05NTAKLQlkaXNwbGF5TmFtZTogeC13aW5kb3dzLTk1MAotCWFsaWFzZXM6IFt3aW5kb3dzLTk1MCwgbXM5NTBdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViYmJhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1Y2YzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0NyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCBvbmx5IGF0IGRldmVsb3BtZW50IHRpbWUsIGFuZCBpdAotICogY3JlYXRlcyB0aGUgY2xhc3MgdG8gSlVuaXQgdGVzdCBhbGwgdGhlIGZpbGVzIGZvdW5kIGluIHRoZSB0ZXN0ZmlsZXMKLSAqIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIENyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVEZJTEVTX1pJUEZJTEVfTkFNRSA9ICJ0ZXN0ZmlsZXMuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GSUxFX0RJUiA9ICJ0ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQgPSBnZXRQbGF0Zm9ybURlZmF1bHQoKTsKLQlwcml2YXRlIGJvb2xlYW4gUkVDUkVBVEVfRklMRVMgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1EZWZhdWx0KCkgewotCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQlyZXR1cm4gcGxhdGZvcm1EZWZhdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCQkJdHJ5IHsKLQkJLy8JCQkJCW5ldyBDcmVhdGVDb2RlZFJlYWRlclRlc3RlcigpLmRvQ3JlYXRlQWxsRmlsZXMoKTsKLQkJLy8JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIHRlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigidGVzdGZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKHRlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRlc3RNZXRob2RTb3VyY2UoaW50IGNvdW50LCBTdHJpbmcgZmlsZVBhdGhBbmROYW1lLCBTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgU3RyaW5nIGphdmFDaGFyc2V0TmFtZSwgU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uKSB7Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVPcktleSA9IGphdmFDaGFyc2V0TmFtZTsKLQkJaWYgKG51bGwgIT0gamF2YUNoYXJzZXROYW1lT3JLZXkgJiYgamF2YUNoYXJzZXROYW1lT3JLZXkuZXF1YWxzKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpKQotCQkJamF2YUNoYXJzZXROYW1lT3JLZXkgPSAiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBjb3VudCArICIgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsiICsgIiBkb1Rlc3QoIFwiIiArIGphdmFDaGFyc2V0TmFtZU9yS2V5ICsgIlwiLCBcIiIgKyBkZXRlY3RlZENoYXJzZXROYW1lICsgIlwiLCAgXCIiICsgZmlsZVBhdGhBbmROYW1lICsgIlwiLCAiICsgZXhwZWN0ZWRFeGNlcHRpb24gKyAiKTsgfSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWxsRmlsZXMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoUkVDUkVBVEVfRklMRVMpIHsKLQkJCUxpc3QgYWxsRmlsZXMgPSBUZXN0c1BsdWdpbi5nZXRBbGxUZXN0RmlsZXMoVEVTVF9GSUxFX0RJUik7Ci0JCQlVUkwgb3V0cHV0RGlyVVJMID0gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCQlGaWxlIHppcG91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXREaXJVUkwuZ2V0UGF0aCgpLCBURVNURklMRVNfWklQRklMRV9OQU1FKTsKLQkJCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSB6aXBPdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh6aXBvdXRGaWxlKTsKLQkJCVppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0gPSBuZXcgWmlwT3V0cHV0U3RyZWFtKHppcE91dCk7Ci0JCQlpbnQgY291bnQgPSAxOwotCQkJZm9yIChJdGVyYXRvciBpdGVyID0gYWxsRmlsZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJRmlsZSBmaWxlID0gKEZpbGUpIGl0ZXIubmV4dCgpOwotCQkJCWNyZWF0ZVppcEVudHJ5KHppcE91dHB1dFN0cmVhbSwgZmlsZSk7Ci0JCQkJQ29kZWRSZWFkZXJDcmVhdG9yIGNvZGVkUmVhZGVyQ3JlYXRvciA9IG5ldyBDb2RlZFJlYWRlckNyZWF0b3IoKTsKLQkJCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUuZ2V0TmFtZSgpLCBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQkJCQlTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQkvLyBqdXN0IHVzZWQgZm9yIGRlYnVnIGluZm8sIGJ1dCBjYW4gdGhyb3cgZXhjZXB0aW9uCi0JCQkJCWphdmFDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChVbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQljYXRjaCAoSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCVN0cmluZyBzdWJwYXRoID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCQkJY3JlYXRlVGVzdE1ldGhvZFNvdXJjZShjb3VudCwgc3VicGF0aCwgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgamF2YUNoYXJzZXROYW1lLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJCXppcE91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQkJemlwT3V0LmNsb3NlKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0U3ViUGF0aE5hbWUoRmlsZSBmaWxlKSB7Ci0JCVN0cmluZyBwYXRoID0gZmlsZS5nZXRQYXRoKCk7Ci0JCWludCBsYXN0SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKFRFU1RfRklMRV9ESVIpOwotCQlTdHJpbmcgc3VicGF0aCA9IHBhdGguc3Vic3RyaW5nKGxhc3RJbmRleCk7Ci0JCXN1YnBhdGggPSBzdWJwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJcmV0dXJuIHN1YnBhdGg7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHppcE91dHB1dFN0cmVhbQotCSAqIEBwYXJhbSBlbGVtZW50Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVppcEVudHJ5KFppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0sIEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN1YlBhdGhOYW1lID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCVppcEVudHJ5IHppcEVudHJ5ID0gbmV3IFppcEVudHJ5KHN1YlBhdGhOYW1lKTsKLQkJemlwT3V0cHV0U3RyZWFtLnB1dE5leHRFbnRyeSh6aXBFbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjQgKiA4XTsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQl6aXBPdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJemlwT3V0cHV0U3RyZWFtLmZsdXNoKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTk5ODUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllcy5UZXN0Q29tbW9uTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzLlRlc3RPdmVycmlkZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb2RlZFJlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy53cml0ZS5UZXN0Q29kZWRXcml0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbC5YTUxFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sLlhNTEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci0KLQotcHVibGljIGNsYXNzIEVuY29kaW5nVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8vIEZJWE1FOiBjb21tZW50ZWQgb3V0IGxhbmcuIHNwZWMuIHRlc3RzLCB1bnRpbCBhbGwgbWlncmF0ZWQgdG8gb3JnLmVjbGlwc2UgCi0JLy8gWzI1ODM0M10galVuaXQgZmFpbHVyZXMgYWZ0ZXIgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCBjb250ZW50IHR5cGUgaXMgZGlzYWJsZWQKLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0T3ZlcnJpZGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXIuY2xhc3MsIFRlc3RDb2RlZFdyaXRlLmNsYXNzLCBYTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBYTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb250ZW50RGVzY3JpcHRpb24uY2xhc3MsIFRlc3RDb250ZW50VHlwZXMuY2xhc3MsIFRlc3RDb21tb25OYW1lcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmNsYXNzfTsKLS8vCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgVGVzdENvbnRlbnRUeXBlcy5jbGFzcywgVGVzdENvbW1vbk5hbWVzLmNsYXNzfTsKLQkvL3ByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIENTU0VuY29kaW5nVGVzdGVyLmNsYXNzLCBDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIEpTUEVuY29kaW5nVGVzdHMuY2xhc3MsIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFhNTE1hbGZvcm1lZElucHV0VGVzdHMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmNsYXNzLCBUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCBUZXN0Q29udGVudFR5cGVzLmNsYXNzLCBUZXN0Q29tbW9uTmFtZXMuY2xhc3N9OwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEVuY29kaW5nVGVzdFN1aXRlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWQyOTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKiAKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKLSAqIHR5cGUgY29tbWVudHMgZ28gdG8gV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1jbGFzcyBGaWxlVXRpbCB7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGN1cnJlbnRXb3Jrc3BhY2UgPSAiZGV2MDcyNSI7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwcmludGVkT25jZSA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSAiL2J1aWxkcy9Xb3Jrc3BhY2VzLyIgKyBjdXJyZW50V29ya3NwYWNlICsgIi9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JCVVSTCB1cmwgPSBuZXcgVVJMKCJmaWxlOi8vIiArIGluc3RhbGxQYXRoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJVVJMIGZpbmFsdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFwcmludGVkT25jZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdXRwdXQgd3JpdHRlbiB0byAiICsgZGlyLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCXByaW50ZWRPbmNlID0gdHJ1ZTsKLQkJfQotCi0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjdmNGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLQotcHVibGljIGNsYXNzIEdlbmVyYXRlRmlsZXMgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSB7Ci0JCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gInRlc3RmaWxlcy9nZW5lZEZpbGVzLSIgKyBnZXRKYXZhVmVyc2lvbigpOwotCQlyZXR1cm4gbWFpbkRpcmVjdG9yeTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0SmF2YVZlcnNpb24oKSB7Ci0JCVN0cmluZyBuYW1lID0gbnVsbDsgLy9TeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZnVsbHZlcnNpb24iKTsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiICgiICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUudmVyc2lvbiIpICsgIikiOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZVhNTEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RW5jb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2UgYW5kIGxvZ2ljIG9mIHRoaXMgY2xhc3MgaXMgdG8gY3JlYXRlIHNtYWxsICJYTUwgZmlsZXMiIG9mCi0gKiB2YXJpb3VzLCBrbm93biBlbmNvZGluZ3MsIHdyaXRlIHRoZW0gdG8gZmlsZXMsIGFuZCBpbiBsYXRlciB0ZXN0cywgYmUgc3VyZQotICogYXBwcm9wcmlhdGUgZW5jb2RpbmcgY2FuIGJlIGRldGVjdGVkLCBhbmQgcmVhZCBpbiBhbmQgaW50YWN0IGNoYXJhY3RlcnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZVhNTEZpbGVzIGV4dGVuZHMgR2VuZXJhdGVGaWxlcyB7Ci0JcHJpdmF0ZSBTdHJpbmcgTEYgPSAiXG4iOwotCXByaXZhdGUgU3RyaW5nIENSID0gIlxyIjsKLQlwcml2YXRlIFN0cmluZyBDUkxGID0gQ1IgKyBMRjsKLQkvLyBkaWZmZXJlbnQgdGV4dCBzdHJpbmdzIGZvciBjb21wYXJpc29ucwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9MRiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuMTIzNDU2Nzg5MFxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgU3RyaW5nIHRleHRVU19BU0NJSV9DUkxGID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XHJcbjEyMzQ1Njc4OTBcclxuQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IHRydWU7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHQ1JMRiA9IGZhbHNlOwotCXByaXZhdGUgYm9vbGVhbiBERUJVR0lORk8gPSB0cnVlOwotCi0KLQlwdWJsaWMgR2VuZXJhdGVYTUxGaWxlcygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKEdlbmVyYXRlWE1MRmlsZXMuY2xhc3MpOwotCQlHZW5lcmF0ZVhNTEZpbGVzIHRoaXNBcHAgPSBuZXcgR2VuZXJhdGVYTUxGaWxlcygpOwotCQl0cnkgewotCQkJLy90aGlzQXBwLmdlbmVyYXRlT3JpZ2luYWxGaWxlcygpOwotCQkJdGhpc0FwcC5nZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBnZW5lcmF0ZUFsbEZpbGVzRm9yQ3VycmVudFZNKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJTWFwIGFsbENoYXJzZXRNYXAgPSBDaGFyc2V0LmF2YWlsYWJsZUNoYXJzZXRzKCk7Ci0JCVNldCBhbGxLZXlzID0gYWxsQ2hhcnNldE1hcC5rZXlTZXQoKTsKLQkJT2JqZWN0W10gYWxsY2hhcnNldHMgPSBhbGxLZXlzLnRvQXJyYXkoKTsKLQkJU3RyaW5nW10gYWxsY2hhcnNldE5hbWVzID0gbmV3IFN0cmluZ1thbGxjaGFyc2V0cy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbGNoYXJzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhbGxjaGFyc2V0TmFtZXNbaV0gPSBhbGxjaGFyc2V0c1tpXS50b1N0cmluZygpOwotCi0JCX0KLQkJLy9jcmVhdGVGaWxlcyhhbGxjaGFyc2V0TmFtZXMsIGZhbHNlKTsKLQkJY3JlYXRlRmlsZXMoYWxsY2hhcnNldE5hbWVzLCB0cnVlKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVGaWxlcyhTdHJpbmdbXSBjaGFyc2V0bmFtZXMsIGJvb2xlYW4gdXNlQ1JMRikgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9IG51bGw7Ci0JCVdyaXRlciBvdXQgPSBudWxsOwotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lQW5kRmlsZUV4dGVuc2lvbigpOwotCQlMaXN0IGNoYXJzZXRGaWxlc1dyaXR0ZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhcnNldG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQl0cnkgewotCi0KLQkJCQljaGFyc2V0TmFtZSA9IGNoYXJzZXRuYW1lc1tpXTsKLQotCQkJCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShjaGFyc2V0TmFtZSk7Ci0JCQkJQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIgPSBjaGFyc2V0Lm5ld0VuY29kZXIoKTsKLQkJCQljaGFyc2V0RW5jb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQkJY2hhcnNldEVuY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJCQlTdHJpbmcgaGVhZGVyID0gZ2V0SGVhZGVyU3RhcnQoKSArIGNoYXJzZXROYW1lICsgZ2V0SGVhZGVyRW5kKCk7Ci0JCQkJU3RyaW5nIGZ1bGx0ZXh0ID0gbnVsbDsKLQkJCQlpZiAodXNlQ1JMRikgewotCQkJCQlmdWxsdGV4dCA9IGhlYWRlciArIHRleHRVU19BU0NJSV9DUkxGOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZnVsbHRleHQgPSBoZWFkZXIgKyB0ZXh0VVNfQVNDSUlfTEY7Ci0JCQkJfQotCi0JCQkJaWYgKCFpc0ViY2lkaWMoY2hhcnNldE5hbWUsIGNoYXJzZXRFbmNvZGVyKSkgewotCQkJCQlpZiAoY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKGZ1bGx0ZXh0KSkgewotCQkJCQkJLy8JCQkJCQlpZiAoY2FuRW5jb2RlQ1JMRihjaGFyc2V0TmFtZSwgY2hhcnNldEVuY29kZXIpCi0JCQkJCQkvLyAmJgotCQkJCQkJLy8gY2FuRW5jb2RlU2ltcGxlU3RyaW5nKGNoYXJzZXROYW1lLAotCQkJCQkJLy8gY2hhcnNldEVuY29kZXIsICI8PyIpICYmCi0JCQkJCQkvLyBjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoZnVsbHRleHQpKSB7Ci0JCQkJCQlTdHJpbmcgb3V0cHV0ZmlsZW5hbWUgPSAidGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCI7Ci0JCQkJCQlGaWxlIG91dEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihtYWluRGlyZWN0b3J5LCBvdXRwdXRmaWxlbmFtZSwgbnVsbCk7Ci0JCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbihvdXRGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCQkJCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRGaWxlKTsKLQkJCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc291dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQotCQkJCQkJV3JpdGVyIGZpbGVXcml0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG91dHB1dFN0cmVhbSwgY2hhcnNldEVuY29kZXIpOwotCQkJCQkJLy8gdGhpcyBieXRlIHdyaXRlciBpcyBjcmVhdGVkIGp1c3QgdG8gYmUgYWJsZSB0bwotCQkJCQkJLy8gY291bnQgcHJlY2lzZSBieXRlcy4KLQkJCQkJCVdyaXRlciBieXRlV3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihieXRlc291dCwgY2hhcnNldEVuY29kZXIpOwotCi0JCQkJCQlzdXBwbHlCT01zKGNoYXJzZXROYW1lLCBvdXRwdXRTdHJlYW0sIGJ5dGVzb3V0KTsKLQotCQkJCQkJb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKGZpbGVXcml0ZXIpOwotCi0KLQkJCQkJCW91dC53cml0ZShmdWxsdGV4dCk7Ci0JCQkJCQlieXRlV3JpdGVyLndyaXRlKGZ1bGx0ZXh0KTsKLQkJCQkJCW91dC5jbG9zZSgpOwotCQkJCQkJYnl0ZVdyaXRlci5mbHVzaCgpOwotCQkJCQkJLy8gaWYgd2UgbWFkZSBpcyB0aGlzIGZhciwgd2l0aCBubyBleGNlcHRpb25zLAotCQkJCQkJLy8gZXRjLiwKLQkJCQkJCS8vIHRoZW4KLQkJCQkJCS8vIG11c3QgaGF2ZSBiZWVuCi0JCQkJCQkvLyByZWFsbHkgd3JpdHRlbi4KLQkJCQkJCVN0cmluZyB3cml0dGVuUmVjb3JkID0gY2hhcnNldE5hbWU7Ci0JCQkJCQljaGFyc2V0RmlsZXNXcml0dGVuLmFkZCh3cml0dGVuUmVjb3JkKTsKLQkJCQkJCWlmIChERUJVRykgewotCQkJCQkJCXByaW50RGVidWdJbmZvKHVzZUNSTEYsIGhlYWRlciwgb3V0cHV0ZmlsZW5hbWUsIGJ5dGVzb3V0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKiogY291bGQgbm90IGNvbnZlcnQgc2FtcGxlIGFzY2lpIHRleHQgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJaWYgKERFQlVHSU5GTykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKioqKiBjb3VsZCBub3QgZ2VuZXJhdGUgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCVN0cmluZyBtc2cgPSBlLmdldE1lc3NhZ2UoKTsKLQkJCQkJaWYgKG1zZyA9PSBudWxsKQotCQkJCQkJbXNnID0gIiI7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIGR1ZSB0byAiICsgZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgICIgKyBtc2cpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKioqKiogY291bGQgbm90IGdlbmVyYXRlIGZvciAiICsgY2hhcnNldE5hbWUpOwotCQkJCQlTdHJpbmcgbXNnID0gZS5nZXRNZXNzYWdlKCk7Ci0JCQkJCWlmIChtc2cgPT0gbnVsbCkKLQkJCQkJCW1zZyA9ICIiOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBkdWUgdG8gIiArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiICAiICsgbXNnKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAob3V0ICE9IG51bGwpIHsKLQkJCQkJb3V0LmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQotCQkvLyBub3cgY3JlYXRlIGZpbGUgdGhhdCBzdW1tYXJpemVzIHdoYXQgd2FzIHdyaXR0ZW4KLQkJLy8gc3VpdGFibGUgdG8gcGFzdGUgYXMgbWV0aG9kIGluIHRlc3QgY2xhc3MKLQkJRmlsZSBvdXRGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IobWFpbkRpcmVjdG9yeSwgInRlc3RNZXRob2RzLnRleHQiLCBudWxsKTsKLQkJRmlsZVdyaXRlciBvdXRwcm9wZXJ0aWVzID0gbmV3IEZpbGVXcml0ZXIob3V0RmlsZSk7Ci0JCW91dHByb3BlcnRpZXMud3JpdGUoY2hhcnNldEZpbGVzV3JpdHRlbi5zaXplKCkgKyBDUkxGKTsKLQkJSXRlcmF0b3IgaXRlbXMgPSBjaGFyc2V0RmlsZXNXcml0dGVuLml0ZXJhdG9yKCk7Ci0JCWludCBuID0gMDsKLQkJd2hpbGUgKGl0ZW1zLmhhc05leHQoKSkgewotCQkJU3RyaW5nIGl0ZW1DcmVhdGVkID0gKFN0cmluZykgaXRlbXMubmV4dCgpOwotCQkJU3RyaW5nIHRlc3RNZXRob2QgPSBjcmVhdGVNZXRob2QobisrLCBpdGVtQ3JlYXRlZCk7Ci0JCQlvdXRwcm9wZXJ0aWVzLndyaXRlKHRlc3RNZXRob2QgKyBDUkxGKTsKLQkJfQotCQlvdXRwcm9wZXJ0aWVzLmNsb3NlKCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJIHRob3VnaHQgdGhpcyB1c2VkIHRvIGJlIGF1dG9tYXRpYywgYnV0IGRvZXNuJ3Qgc2VlbSB0byBiZSBub3c/IQotCSAqLwotCXByaXZhdGUgdm9pZCBzdXBwbHlCT01zKFN0cmluZyBjaGFyc2V0TmFtZSwgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlieXRlW10gbnVsbEJ5dGVzID0gbmV3IGJ5dGVbXXsweDAwLCAweDAwfTsKLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2IikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2TEUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJYLVVuaWNvZGVMaXR0bGUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMTZCRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlgtVW5pY29kZUJpZyIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMiIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUobnVsbEJ5dGVzKTsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShudWxsQnl0ZXMpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMkxFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShudWxsQnl0ZXMpOwotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKG51bGxCeXRlcyk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTMyQkUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKG51bGxCeXRlcyk7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQkJYnl0ZXNvdXQud3JpdGUobnVsbEJ5dGVzKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBpCi0JICogQHBhcmFtIGl0ZW1DcmVhdGVkCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTWV0aG9kKGludCBpLCBTdHJpbmcgaXRlbUNyZWF0ZWQpIHsKLQkJU3RyaW5nIHRlbXBsYXRlID0gIglwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBpICsgIigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAge1xyXG4iICsgIgkJU3RyaW5nIGNoYXJzZXROYW1lID0gXCIiICsgaXRlbUNyZWF0ZWQgKyAiXCI7XHJcbiIgKyAiCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpO1xyXG4iICsgIgl9IjsKLQkJcmV0dXJuIHRlbXBsYXRlOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludERlYnVnSW5mbyhib29sZWFuIHVzZUNSTEYsIFN0cmluZyBoZWFkZXIsIFN0cmluZyBvdXRwdXRmaWxlbmFtZSwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0KSB7Ci0JCWJ5dGVbXSBieXRlcyA9IGJ5dGVzb3V0LnRvQnl0ZUFycmF5KCk7Ci0JCWludCBuQnl0ZXMgPSBieXRlcy5sZW5ndGg7Ci0JCWludCBuQ2hhcnMgPSAwOwotCQlpZiAodXNlQ1JMRikgewotCQkJbkNoYXJzID0gaGVhZGVyLmxlbmd0aCgpICsgdGV4dFVTX0FTQ0lJX0NSTEYubGVuZ3RoKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQluQ2hhcnMgPSBoZWFkZXIubGVuZ3RoKCkgKyB0ZXh0VVNfQVNDSUlfTEYubGVuZ3RoKCk7Ci0JCX0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIldyb3RlICIgKyBuQ2hhcnMgKyAiIGNoYXJhY3RlcnMgYW5kICIgKyBuQnl0ZXMgKyAiIGJ5dGVzIHRvICIgKyBvdXRwdXRmaWxlbmFtZSk7Ci0JfQotCi0JLy8gVE9ETzogbmV2ZXIgdXNlZAotCSBib29sZWFuIGNhbkVuY29kZVNpbXBsZVN0cmluZyhTdHJpbmcgY2hhcnNldE5hbWUsIENoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvY2RlciwgU3RyaW5nIHNpbXBsZVN0cmluZykgewotCQkvLyB0aGlzIG1ldGhvZCBhZGRlZCBzaW5jZSBzb21lIGVuY29kZXJzIGRvbid0IHJlcG9ydCB0aGF0IHRoZXkgY2FuJ3QKLQkJLy8gZW5jb2RlIHNvbWV0aGluZywgYnV0IHRoZXkgb2J2aW91c2x5Ci0JCS8vIGNhbid0LCBhdCBsZWFzdCBpbiB0aGUgbm9ybWFsIG1lYW5pbmcgb2YgdGhlIHdvcmQuCi0JCS8vIFRoaXMgc2VlbXMgdG8gbW9zdGx5IGFwcGx5IHRvIHNvbWUgSUJNIHZhcmlldGllcyB3aGVyZSwgYXBwYXJlbnRseSwKLQkJLy8gdGhlIGlucHV0IGNhbid0IGJlIGludGVycHJldGVkIGF0IGFsbCB3aXRob3V0IGtub3dpbmcgZW5jb2RpbmcKLQkJLy8gKHRoYXQgaXMKLQkJLy8gY291bGQgbm90IGJlIHVzZWQgZm9yIGNvbnRlbnQgYmFzZWQgZW5jb2RpbmcpLgotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJlc3VsdCA9IHNpbXBsZVN0cmluZy5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5tYXhCeXRlc1BlckNoYXIoKSAhPSAxKSB7Ci0JCQkJLy8gZG9uJ3QgY2hlY2sgbXVsaXRieXRlIGVuY29kZXJzLCBqdXN0IGFzc3VtZSB0cnVlIChmb3Igbm93KS4KLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJCWlmIChjaGFyc2V0RW5jb2NkZXIubWF4Qnl0ZXNQZXJDaGFyKCkgPT0gNCkgewotCQkJCQkvL2V4Y2VwdCwgbGV0J3MganVzdCBleGNsdWRlIGZvdXIgYnl0ZSBzdHJlYW1zLCBmb3Igbm93LgotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5hdmVyYWdlQnl0ZXNQZXJDaGFyKCkgPT0gMikgewotCQkJCQkJLy8gZXhjZXB0LCBmb3Igc29tZSByZWFzb24gVVRGIGhhcyBtYXggYnl0ZXMgb2YgNAotCQkJCQkJLy8gKGF2ZXJhZ2UgYnl0ZXMgb2YgMikuCi0JCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQSB2ZXJ5IGhldXJpc3RpYyBtZXRob2QuIFNob3VsZCBoYXZlIHRhYmxlLCBzb21lZGF5LgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc0ViY2lkaWMoU3RyaW5nIGNoYXJzZXROYW1lLCBDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2NkZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJU3RyaW5nIHNpbXBsZVN0cmluZyA9ICI8PyI7Ci0JCVN0cmluZyBuZXdBc2NpaVN0cmluZyA9IG51bGw7Ci0JCWJ5dGVbXSB0cmFuc2xhdGVkQnl0ZXMgPSBudWxsOwotCQl0cnkgewotCQkJdHJhbnNsYXRlZEJ5dGVzID0gc2ltcGxlU3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKTsKLQkJCW5ld0FzY2lpU3RyaW5nID0gbmV3IFN0cmluZyh0cmFuc2xhdGVkQnl0ZXMsICJhc2NpaSIpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUsIHNpbmNlIGNoZWNrZWQgYWxyZWFkeQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCS8vIGV4cGVyaW1lbnRpbmcvZGVidWdnaW5nIHNob3dlZCB0aGUga25vd24gZWJjaWRpYyBvbmNlcyBhbHdheXMKLQkJLy8gIm1pcyIgdHJhbmxhdGVkIHRvIGNoYXJhY3RlcnMgTCBhbmQgby4KLQkJcmVzdWx0ID0gIkxvIi5lcXVhbHMobmV3QXNjaWlTdHJpbmcpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hhcnNldE5hbWUgKyAiIGFzc3VtZWQgdG8gYmUgRWRjaWRpYyIpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGNoYXJzZXQKLQkgKi8KLQkgYm9vbGVhbiBjYW5FbmNvZGVDUkxGKFN0cmluZyBjaGFyc2V0TmFtZSwgQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29kZXIpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQkvL1N0cmluZyBjaGFyc2V0Q29ub25pY2FsTmFtZSA9IGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCk7Ci0JCWlmICghY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKExGKSkgewotCQkJaWYgKERFQlVHQ1JMRikgewotCQkJCVN0cmluZyBzdHJpbmdOYW1lID0gIkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IExGOwotCQkJCWV4cGxvcmVDb252ZXJzaW9uKGNoYXJzZXROYW1lLCBzdHJpbmdOYW1lLCB0ZXN0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbiBub3QgZW5jb2RlIExGIGZvciAiICsgY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQlpZiAoIWNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShDUikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUiI7Ci0JCQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBDUjsKLQkJCQlleHBsb3JlQ29udmVyc2lvbihjaGFyc2V0TmFtZSwgc3RyaW5nTmFtZSwgdGVzdFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJjYW4gbm90IGVuY29kZSBDUiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKCFjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoQ1JMRikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJDUkxGIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IENSTEY7Ci0JCQkJZXhwbG9yZUNvbnZlcnNpb24oY2hhcnNldE5hbWUsIHN0cmluZ05hbWUsIHRlc3RTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuIG5vdCBlbmNvZGUgQ1JMRiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBleHBsb3JlQ29udmVyc2lvbihTdHJpbmcgY2hhcnNldE5hbWUsIFN0cmluZyBzdHJpbmdOYW1lLCBTdHJpbmcgdGVzdFN0cmluZykgdGhyb3dzIEVycm9yIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBuZXdMRiA9IG5ldyBTdHJpbmcodGVzdFN0cmluZy5nZXRCeXRlcyhjaGFyc2V0TmFtZSkpOwotCQkJU3lzdGVtLm91dC5wcmludCgib2xkICIgKyBzdHJpbmdOYW1lICsgIiAoZGVjKTogIik7Ci0JCQlkdW1wU3RyaW5nKFN5c3RlbS5vdXQsIHRlc3RTdHJpbmcpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJuZXcgIiArIHN0cmluZ05hbWUgKyAiIChkZWMpOiAiKTsKLQkJCWR1bXBTdHJpbmcoU3lzdGVtLm91dCwgbmV3TEYpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy9zaG91bGQgbmV2ZXIgaGFwcGVuLCBhbHJlYWR5IGNoZWNrZWQKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBvdXQKLQkgKiBAcGFyYW0gbGYyCi0JICovCi0JcHJpdmF0ZSB2b2lkIGR1bXBTdHJpbmcoUHJpbnRTdHJlYW0gb3V0LCBTdHJpbmcgbGYyKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGYyLmxlbmd0aCgpOyBpKyspIHsKLQkJCW91dC5wcmludCgoaW50KSBsZjIuY2hhckF0KGkpICsgIiAiKTsKLQkJfQotCi0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWVBbmRGaWxlRXh0ZW5zaW9uKCkgewotCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9IGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbCI7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhlYWRlclN0YXJ0KCkgewotCQlyZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiI7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SGVhZGVyRW5kKCkgewotCQlyZXR1cm4gIlwiPz4iOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9MaXN0Q2hhcnNldHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvTGlzdENoYXJzZXRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZjBlZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9MaXN0Q2hhcnNldHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogU21hbGwgY2xhc3MgdG8gbGlzdCBjaGFyc2V0IGRldGVjdGVkIGZvciBhIHBhcnRpY3VsYXIgVk0uIFNpbXBsZSBydW4gYXMgSmF2YQotICogQXBwbGljYXRpb25zIHRvIGdldCBvdXRwdXQgdG8gc3RhbmRhcmQgb3V0LgotICovCi1wdWJsaWMgY2xhc3MgTGlzdENoYXJzZXRzIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyB0YWIgPSAiXHQiOwotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCi0JCUxpc3RDaGFyc2V0cyB0aGlzQXBwID0gbmV3IExpc3RDaGFyc2V0cygpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ3VycmVudCBMb2NhbGU6ICIgKyBMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCQlTdHJpbmcgbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5mdWxsdmVyc2lvbiIpOwotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnZlcnNpb24iKSArICIgKCIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEucnVudGltZS52ZXJzaW9uIikgKyAiKSI7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJKUkUgdmVyc2lvbjogIiArIG5hbWUpOwotCi0JCVN5c3RlbS5nZXRQcm9wZXJ0aWVzKCkubGlzdChTeXN0ZW0ub3V0KTsKLQotCQl0aGlzQXBwLmxpc3RPZkxvY2FsZXMoKTsKLQotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGUuZW5jb2RpbmcucGtnOiAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nLnBrZyIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlLmVuY29kaW5nOiAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihhcmdzW2ldKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJdGhpc0FwcC5saXN0T2ZDaGFyc2V0cygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBsaXN0T2ZMb2NhbGVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2YWlsYWJsZSBMb2NhbGVzIik7Ci0JCUxvY2FsZVtdIGxvY2FsZXMgPSBMb2NhbGUuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihsb2NhbGVzW2ldKTsKLQotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgbGlzdE9mQ2hhcnNldHMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXZhaWxhYmxlIENoYXJzZXRzIik7Ci0JCWludCBjb3VudCA9IDA7Ci0JCU1hcCBtYXAgPSBDaGFyc2V0LmF2YWlsYWJsZUNoYXJzZXRzKCk7Ci0JCUl0ZXJhdG9yIGl0ID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCWNvdW50Kys7Ci0JCQkvLyBHZXQgY2hhcnNldCBuYW1lCi0JCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAoU3RyaW5nKSBpdC5uZXh0KCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnQgKyAiLiAiICsgIiBDaGFyc2V0bmFtZTogIiArIGNoYXJzZXROYW1lKTsKLQkJCS8vIEdldCBjaGFyc2V0Ci0JCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoY2hhcnNldE5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHRhYiArICJkaXNwbGF5TmFtZTogIiArIGNoYXJzZXQuZGlzcGxheU5hbWUoTG9jYWxlLmdldERlZmF1bHQoKSkpOwotCQkJU2V0IHNldCA9IGNoYXJzZXQuYWxpYXNlcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHRhYiArICJhbGlhc2VzOiAiICsgc2V0KTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOWM2MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkJ5dGVSZWFkZXI7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbFRlc3RGaWxlcyhTdHJpbmcgdG9wRGlyTmFtZSkgewotCQlMaXN0IHJlc3VsdCA9IG51bGw7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyB0b3BEaXJOYW1lOwotCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJaWYgKCF0b3BEaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0b3BEaXJOYW1lICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLQkJfQotCQlyZXN1bHQgPSBnZXRGaWxlc0luRGlyKHRvcERpcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRvcERpcgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0Qnl0ZVJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgQnl0ZVJlYWRlcihuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSkpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9aaXBwZWRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1ppcHBlZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmNTIzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1ppcHBlZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFppcHBlZFRlc3QgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLmVuY29kaW5nLnJlc291cmNlLm5ld3Rlc3RzIjsKLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldFVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBJUHJvamVjdCBmUHJvamVjdCA9IG51bGw7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKCFpc1NldFVwKSB7Ci0JCQljcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmUHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWlzU2V0VXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2h1dERvd24oKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChpc1NldFVwKSB7Ci0JCQlpZiAoZlByb2plY3QgIT0gbnVsbCAmJiBmUHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWlzU2V0VXAgPSBmYWxzZTsKLQkJfQotCX0KLQotCXB1YmxpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJaWYgKGZQcm9qZWN0ICE9IG51bGwpIHsKLQkJCWZpbGUgPSAoSUZpbGUpIGZQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZU5hbWUpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlByb2plY3QsIG51bGwsIG51bGwpOwotCQlmUHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJcmV0dXJuIGZQcm9qZWN0OwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJlZi9UZXN0UHJlZmVyZW5jZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJlZi9UZXN0UHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjMjRiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJlZjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RQcmVmZXJlbmNlcyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEBwYXJhbSBwcmVmZXJlbmNlcwotCSAqIEB0aHJvd3MgQmFja2luZ1N0b3JlRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludENoaWxkcmVuKFByZWZlcmVuY2VzIHByZWZlcmVuY2VzKSB0aHJvd3MgQmFja2luZ1N0b3JlRXhjZXB0aW9uIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcdCIgKyBwcmVmZXJlbmNlcy5hYnNvbHV0ZVBhdGgoKSk7Ci0JCVN0cmluZyBbXSBrZXlzID0gcHJlZmVyZW5jZXMua2V5cygpOwotCQlwcmludEtleXMoa2V5cyk7Ci0JCVN0cmluZ1tdIGNoaWxkcmVuID0gcHJlZmVyZW5jZXMuY2hpbGRyZW5OYW1lcygpOwotCQlwcmludENoaWxkcmVuKGNoaWxkcmVuKTsgCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBjaGlsZCA9IGNoaWxkcmVuW2ldOwotCQkJUHJlZmVyZW5jZXMgc3ViUHJlZmVyZW5jZXMgPSBwcmVmZXJlbmNlcy5ub2RlKGNoaWxkKTsKLQkJCVN0cmluZyBbXSBzdWJrZXlzID0gc3ViUHJlZmVyZW5jZXMua2V5cygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hpbGQpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlwcmludEtleXMoc3Via2V5cyk7Ci0JCX0KLQl9Ci0Jc3RhdGljIHByaXZhdGUgdm9pZCBwcmludENoaWxkcmVuKFN0cmluZ1tdIGNoaWxkcmVuKSB7Ci0JCXByaW50U3RyaW5nQXJyYXkoY2hpbGRyZW4sICJcdCIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBrZXlzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludEtleXMoU3RyaW5nW10ga2V5cykgewotCQlwcmludFN0cmluZ0FycmF5KGtleXMsICJcdFx0Iik7Ci0JCQotCX0KLQotCXN0YXRpYyBwcml2YXRlIHZvaWQgcHJpbnRTdHJpbmdBcnJheShTdHJpbmdbXSBhcnJheSwgU3RyaW5nIHRhYkNoYXJzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBzdHJpbmcgPSBhcnJheVtpXTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YWJDaGFycyArIHN0cmluZyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSB0cnVlOwotCi0JcHJpdmF0ZSB2b2lkIGRpc3BsYXlQcmVmZXJlbmNlVHJlZSgpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBlY2xpcHNlUHJlZmVyZW5jZXMgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRSb290Tm9kZSgpOwotCi0KLQkJdHJ5IHsKLQkJCVN0cmluZ1tdIGNoaWxkcmVuID0gZWNsaXBzZVByZWZlcmVuY2VzLmNoaWxkcmVuTmFtZXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlY2xpcHNlUHJlZmVyZW5jZXMuYWJzb2x1dGVQYXRoKCkpOwotCQkJcHJpbnRDaGlsZHJlbihjaGlsZHJlbik7Ci0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgc3RyaW5nID0gY2hpbGRyZW5baV07Ci0JCQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBlY2xpcHNlUHJlZmVyZW5jZXMubm9kZShzdHJpbmcpOwotCQkJCXByaW50Q2hpbGRyZW4ocHJlZmVyZW5jZXMpOwotCi0KLQkJCX0KLQotCQl9Ci0JCWNhdGNoIChCYWNraW5nU3RvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFjY2VzcygpIHsKLQkJaWYgKERFQlVHKSB7IAotCQkJZGlzcGxheVByZWZlcmVuY2VUcmVlKCk7Ci0JCX0KLQkJLy8gYWx3YXlzIG9rIGlmIG5vIGV4Y2VwdGlvbnMgdGhyb3duCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRCYXNlZFByZWZIVE1MKCkgewotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoInRlc3QuaHRtbCIpOwotCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKGNvbnRlbnRUeXBlKTsKLQkJYXNzZXJ0Tm90TnVsbChwcmVmZXJlbmNlcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRCYXNlZFByZWZYTUwoKSB7Ci0JCUlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZUZvcigidGVzdC54bWwiKTsKLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhjb250ZW50VHlwZSk7Ci0JCWFzc2VydE5vdE51bGwocHJlZmVyZW5jZXMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0Q29tbW9uTmFtZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0Q29tbW9uTmFtZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZmNzhkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkNoYXJzZXROYW1lczsKLQotcHVibGljIGNsYXNzIFRlc3RDb21tb25OYW1lcyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3RDb21tb25OYW1lcygpIHsKLQkJU3RyaW5nW10gbmFtZXMgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0Q29tbW9uQ2hhcnNldE5hbWVzKCk7Ci0JCWFzc2VydFRydWUoImNvbW1vbiBjaGFyc2V0IG5hbWVzIGNvdWxkIG5vdCBiZSBsb2FkZWQiLCBuYW1lcyAhPSBudWxsICYmIG5hbWVzLmxlbmd0aCA+IDApOwotCQlpZiAoREVCVUcpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgbmFtZSA9IG5hbWVzW2ldOwotCQkJCVN0cmluZyBkaXNwbGF5TmFtZSA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXREaXNwbGF5U3RyaW5nKG5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbiggbmFtZSArICIgICAgIiArIGRpc3BsYXlOYW1lKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKFN0cmluZyBzdHJpbmdUb0NoZWNrLCBTdHJpbmcgZGVmYXVsdE5hbWUsIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgYWN0dWFsID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldFByZWZlcnJlZERlZmF1bHRJYW5hTmFtZShzdHJpbmdUb0NoZWNrLCBkZWZhdWx0TmFtZSk7Ci0JCWFzc2VydEVxdWFscygiZGVmYXVsdCBJQU5BIG5hbWUgdGVzdCBmYWlsZWQgZm9yICIgKyBzdHJpbmdUb0NoZWNrLCBleHBlY3RlZCwgYWN0dWFsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QVNDSUkoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkFTQ0lJIiwgIlVURi04IiwgIlVTLUFTQ0lJIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcDEyNTIoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkNwMTI1MiIsICJVVEYtOCIsICJJU08tODg1OS0xIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RNUzk1MCgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiTVM5NTAiLCAiVVRGLTgiLCAiQklHNSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3AxMjU2KCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJDcDEyNTYiLCAiVVRGLTgiLCAid2luZG93cy0xMjU2Iik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RNUzk0OSgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiTVM5NDkiLCAiVVRGLTgiLCAiRVVDLUtSIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFVUNfSlAoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkVVQy1KUCIsICJVVEYtOCIsICJFVUMtSlAiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFRvdGFsbHlGYWtlKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJ0b3RhbGx5RmFrZSIsICJVVEYtOCIsICJVVEYtOCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U3lzdGVtRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyBzeXN0ZW1FbmMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKTsKLQkJaWYgKHN5c3RlbUVuYyAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgYWN0dWFsID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldFByZWZlcnJlZERlZmF1bHRJYW5hTmFtZShzeXN0ZW1FbmMsICJVVEYtOCIpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZGVmYXVsdCBJQU5BIG5hbWUgdGVzdCBmYWlsZWQgZm9yIHN5c3RlbSBlbmNvZGluZyAiICsgc3lzdGVtRW5jLCBhY3R1YWwpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3REaXNwbGF5TmFtZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkODQyM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3REaXNwbGF5TmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uQ2hhcnNldE5hbWVzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RGlzcGxheU5hbWVzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3RDb21tb25OYW1lKCkgewotCQlTdHJpbmcgZGlzcGxheU5hbWUgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0RGlzcGxheVN0cmluZygiSVNPLTg4NTktMiIpOwotCQlhc3NlcnROb3ROdWxsKCJkaXNwbGF5IG5hbWUgZm9yIGNoYXJzZXQgY291bGQgbm90IGJlIHJldHJpZXZlZCIsIGRpc3BsYXlOYW1lKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlzcGxheU5hbWUpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RPdmVycmlkZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NDAwYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RPdmVycmlkZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRJTzsKLQotcHVibGljIGNsYXNzIFRlc3RPdmVycmlkZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgU3RyaW5nIGRvVGVzdE92ZXJyaWRlKFN0cmluZyBzdHJpbmdUb0NoZWNrKSB7Ci0KLQkJU3RyaW5nIGNoYXJzZXQgPSBDb2RlZElPLmdldEFwcHJvcHJpYXRlSmF2YUNoYXJzZXQoc3RyaW5nVG9DaGVjayk7Ci0JCWFzc2VydE5vdE51bGwoIm92ZXJyaWRlIHRlc3QgZmFpbGVkIGZvciAiICsgc3RyaW5nVG9DaGVjaywgY2hhcnNldCk7Ci0JCXJldHVybiBjaGFyc2V0OwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJU084ODU5OEkoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBkb1Rlc3RPdmVycmlkZSgiSVNPLTg4NTktOC1JIik7Ci0JCWFzc2VydEVxdWFscygibWFwcGluZyBvdmVycmlkZSBub3QgY29ycmVjdCBmb3IgSVNPLTg4NTktOC1JIiwgIklTTy04ODU5LTgiLCByZXN1bHQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTSklTKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZG9UZXN0T3ZlcnJpZGUoIlgtU0pJUyIpOwotCQlhc3NlcnRFcXVhbHMoIm1hcHBpbmcgb3ZlcnJpZGUgbm90IGNvcnJlY3QgZm9yIFgtU0pJUyIsICJTaGlmdF9KSVMiLCByZXN1bHQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzZkZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db2RlZFJlYWRlckNyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklDb250ZW50RGVzY3JpcHRpb25FeHRlbmRlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29kZWRSZWFkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPQotCS8vICIvYnVpbGRzL1dvcmtzcGFjZXMvSGVhZFdvcmtzcGFjZS9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZVJvb3QgKyBmaWxlRGlyOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RFU1RfREVUQUlMID0gZmFsc2U7Ci0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLmVuY29kaW5nLnJlc291cmNlLm5ld3Rlc3RzIjsKLQlzdGF0aWMgSVByb2plY3QgZlRlc3RQcm9qZWN0OwotCXByb3RlY3RlZCBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCi0JcHJpdmF0ZSBTdHJpbmcgbWFzc2FnZUNoYXJzZXQoU3RyaW5nIGZvdW5kQ2hhcnNldCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZm91bmRDaGFyc2V0OwotCQlpZiAoIlVURi0xNkxFIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNiI7Ci0JCX0gZWxzZSBpZiAoIlgtVW5pY29kZUxpdHRsZSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9IGVsc2UgaWYgKCJYLVVuaWNvZGVCaWciLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2QkUiOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdENvZGVkUmVhZGVyKCkgewotCQlzdXBlcigpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudFBsYXRmb3JtQ2hhcnNldCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQkvLyB0cnkgewotCQkvLyBuZXcgVGVzdENvZGVkUmVhZGVyKCkuZG9BbGxGaWxlcygpOwotCQkvLyB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8gfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLyB9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIpOwotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy8gY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8gSUNvbnRhaW5lciBkb3Rlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigiZG90ZXN0RmlsZXMiKTsKLQkJLy8gYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vIElSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vIGFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbNDAwMF07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vIERpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vIGRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8gUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8gSVByb2plY3QgcHJvaiA9IGZUZXN0UHJvamVjdDsKLQkJCQkvLyBmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vIHRyeSB7Ci0JCQkJLy8gcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLyB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy8gfQotCQkJCS8vIH0KLQkJCQkvLyB9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRKYXZhQ2hhcnNldCwgU3RyaW5nIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlSZWFkZXIgcmVhZGVyID0gbnVsbDsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGZpbGUpOwotCQlleHBlY3RlZEphdmFDaGFyc2V0ID0gbWFzc2FnZUNoYXJzZXQoZXhwZWN0ZWRKYXZhQ2hhcnNldCk7Ci0JCWV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ID0gbWFzc2FnZUNoYXJzZXQoZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQpOwotCi0JCS8vIG5vdGU6IGV2ZW50dWFsbHksIEkgc2hvdWxkIGNoYW5nZSBjYWxsaW5nIG1ldGhvZHMgc28gaWYgZGV0ZWN0ZWQKLQkJLy8gY2hhcnNldCBpcyBleHBlY3RlZCB0byBiZSBzYW1lCi0JCS8vIGFzIHRoZSAndXNlZCcgamF2YSBjaGFyc2V0LCB0aGVuIHNpbXBseSBwYXNzIGluIG51bGwsIGJ1dCBmb3Igbm93LAotCQkvLyB3ZSdsbCAiZm9yY2UiIHRoYXQgaGVyZSBpbiB0aGlzCi0JCS8vIG1ldGhvZC4KLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0KSkgewotCQkJZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQgPSBudWxsOwotCQl9Ci0KLQkJdHJ5IHsKLQkJCXJlYWRlciA9IGRvQ29yZVRlc3QoZXhwZWN0ZWRKYXZhQ2hhcnNldCwgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIGZpbGUpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJaWYgKGV4cGVjdGVkRXhjZXB0aW9uICE9IG51bGwpIHsKLQkJCQlib29sZWFuIHJlc3VsdCA9IGV4cGVjdGVkRXhjZXB0aW9uLmlzSW5zdGFuY2UoZSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiVW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBnZXRHb29kRnVsbE1zZyhlKSwgcmVzdWx0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gd2lsbCBhbHdheSBhc3NlcnQgaWYgZ2V0cyB0byBoZXJlCi0JCQkJU3RyaW5nIG1zZyA9IGdldEdvb2RGdWxsTXNnKGUpOwotCQkJCWFzc2VydE51bGwoIlVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgbXNnLCBlKTsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgewotCQkJCXJlYWRlci5jbG9zZSgpOwotCQkJfQotCi0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgUmVhZGVyIGRvQ29yZVRlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJUmVhZGVyIHJlYWRlcjsKLQkJLy8gY3JlYXRlIHRoZXNlIGZpcnN0LCB0byB0ZXN0IGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gY29ycmVjdGx5Ci0JCUNvZGVkUmVhZGVyQ3JlYXRvciBjb2RlZFJlYWRlckNyZWF0b3IgPSBuZXcgQ29kZWRSZWFkZXJDcmVhdG9yKCk7Ci0JCWNvZGVkUmVhZGVyQ3JlYXRvci5zZXQoZmlsZSk7Ci0JCXJlYWRlciA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRDb2RlZFJlYWRlcigpOwotCi0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWUgPSBmaWxlLmdldENoYXJzZXQoKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCWphdmFDaGFyc2V0TmFtZSA9IG1hc3NhZ2VDaGFyc2V0KGphdmFDaGFyc2V0TmFtZSk7Ci0JCS8vIGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiKSkgewotCQkJU3RyaW5nIHBsYXRmb3JtRGVmYXVsdCA9IE5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXMudXNlRGVmYXVsdE5hbWVSdWxlcyhudWxsKTsKLQkJCWFzc2VydFRydWUoamF2YUNoYXJzZXROYW1lLmVxdWFscyhwbGF0Zm9ybURlZmF1bHQpKTsKLQkJfSBlbHNlIHsKLQkJCWJvb2xlYW4gYXNFeHBlY3RlZCA9IGphdmFDaGFyc2V0TmFtZS5lcXVhbHMoZXhwZWN0ZWRKYXZhQ2hhcnNldCk7Ci0JCQlhc3NlcnRUcnVlKGphdmFDaGFyc2V0TmFtZSArICIgZGlkIG5vdCBlcXVhbCB0aGUgZXhwZWN0ZWQgIiArIGV4cGVjdGVkSmF2YUNoYXJzZXQgKyAiICh0aGlzIGlzIGEgVk0gZGVwZW5kZW50IHRlc3QpIiwgYXNFeHBlY3RlZCk7Ci0JCX0KLQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZVByb3BlcnR5ID0gKFN0cmluZykgZGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbi5DSEFSU0VUKTsKLQkJU3RyaW5nIGRldGVjdGVkQ2hhcnNldE5hbWVQcm9wZXJ0eSA9IGdldERldGVjdGVkQ2hhcnNldE5hbWUoZGVzY3JpcHRpb24pOwotCQlkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkgPSBtYXNzYWdlQ2hhcnNldChkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkpOwotCQkvLyBpZiAoZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9PSBudWxsKSB7Ci0JCS8vIGRldGVjdGVkQ2hhcnNldE5hbWUgPSBqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eTsKLQkJLy8gfQotCQlpZiAoIWV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiKSkgewotCQkJYm9vbGVhbiBleHBlY2VkUmVzdWx0ID0gZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoamF2YUNoYXJzZXROYW1lUHJvcGVydHkpOwotCQkJYXNzZXJ0VHJ1ZSgiamF2YSBiYXNlZCBjaGFyc2V0IG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsIGV4cGVjZWRSZXN1bHQpOwotCQl9IGVsc2UgewotCQkJU3RyaW5nIGV4cGVjdGVkRGVmYXVsdCA9IE5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXMudXNlRGVmYXVsdE5hbWVSdWxlcyhudWxsKTsKLQkJCWJvb2xlYW4gRXhwZWN0ZWRSZXN1bHQgPSBleHBlY3RlZERlZmF1bHQuZXF1YWxzKGphdmFDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImphdmEgYmFzZWQgY2hhcnNldCBuYW1lIG5vdCBhcyBleHBlY3RlZCB3aGVuIHBsYXRmb3JtIGRlZmF1bHQgZXhwZWN0ZWQiLCBFeHBlY3RlZFJlc3VsdCk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQgIT0gbnVsbCkgewotCQkJYm9vbGVhbiBleHBlY3RlZFJlc3VsdCA9IGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LmVxdWFscyhkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkpOwotCQkJYXNzZXJ0VHJ1ZSgiZGV0ZWN0ZWQgY2hhcnNldCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZFJlc3VsdCk7Ci0JCX0KLQkJLy8gdGVzdCBpZiBjYW4gcmVhZC93cml0ZSBmaWxlCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KGJ1ZmZlcik7Ci0JCX0KLQkJcmV0dXJuIHJlYWRlcjsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBqdXN0IHRvIGhlbHAgaGFuZGxlIHRyYW5zaXRpb24gZnJvbSB1c2luZwotCSAqIEVuY29kaW5nTWVtdGVudG8gdG8gbm90IHVzaW5nIGVuY29kaW5nTWVtZW50by4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXREZXRlY3RlZENoYXJzZXROYW1lKElDb250ZW50RGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCXJlc3VsdCA9IChTdHJpbmcpIGRlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb25FeHRlbmRlZC5ERVRFQ1RFRF9DSEFSU0VUKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRHb29kRnVsbE1zZyhFeGNlcHRpb24gZSkgewotCQlTdHJpbmcgbXNnID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKTsKLQkJcmV0dXJuIG1zZzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJFVUMtSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTIwMjItSlAiLCAiSVNPLTIwMjItSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiaXNvLTg4NTktMSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCBudWxsLCAidGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIndpbmRvd3MtMTI1MiIsICJDcDEyNTIiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTMiLCAiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNyIsICJJU08tODg1OS03IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTYiLCAiVVRGLTE2IiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTYiLCAiVVRGLTE2IiwgInRlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiRVVDLUpQIiwgIkVVQy1KUCIsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsCi0JLy8gInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLAotCS8vIENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbi5jbGFzcyk7Ci0JLy8gfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsCi0JLy8gVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JLy8gfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLAotCS8vIENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbi5jbGFzcyk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2TEUiLCAiVVRGLTE2TEUiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2TEUiLCAiVVRGLTE2TEUiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RyZWFtQ2FzZUhUTUwoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bSIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0cmVhbUNhc2VKU1AoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcCIsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTc4OTQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLkdlbmVyYXRlRmlsZXM7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHNob3VsZCBjb250YWluIGEgIm1hc3RlciBsaXN0IiBvZiBhbGwgZmlsZW5hbWVzIGdlbmVyYXRlZCBieQotICogdmFyaW91cyBWTSdzIC4uLiB0aGVuIHRoZSB0ZXN0IGluZ29yZXMgaXQgaWYgdGhlIGZpbGVuYW1lJ3Mgbm90IGZvdW5kIGR1ZQotICogdG8gdGhlIFZNIG5vdCBzdXBwb3J0aW5nIGl0LgotICogIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcyBleHRlbmRzIFRlc3RDb2RlZFJlYWRlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5vdFJhbiA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHJvdGVjdGVkIHZvaWQgZG9HZW5UZXN0KFN0cmluZyBjaGFyc2V0TmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGNoYXJzZXROYW1lLCBjaGFyc2V0TmFtZSwgR2VuZXJhdGVGaWxlcy5nZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpICsgIi94bWwvdGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCIsIG51bGwpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRKYXZhQ2hhcnNldCwgU3RyaW5nIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCi0JCS8vIGlmIHRoZXJlIG5vIGZpbGUsIGp1c3QgYXNzdW1lIHRoYXQgaXRzIGR1ZSB0byB3aGljaCBWTSBpcwotCQkvLyBicmluZyB1c2VkLiAoQ291bGQgYmUgaW1wcm92ZWQgaW4gZnV0dXJlIHRvIGF2b2lkIGNvdW50aW5nIGFzIGEKLQkJLy8gdGVzdCkgLSB0aGlzIGNoZWNrIGluIGhlcmUgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9ubHkKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJbm90UmFuKys7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInRlc3Qgbm90IHJhbiBzaW5jZSBjaGFyc2V0IG5vdCBzdXBwb3J0ZWQgYnkgVk06ICIgKyBmaWxlUGF0aCk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3VwZXIuZG9UZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJCRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyTEUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOEoiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0vKiAKLXJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNIAotaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotKi8gCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUJpZyI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLyogCi1yZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTSAKLWh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLSovIAotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVMaXR0bGUiOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlNmE2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50RGVzY3JpcHRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLy8JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JLy8JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPQotCS8vICIvYnVpbGRzL1dvcmtzcGFjZXMvSGVhZFdvcmtzcGFjZS9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JLy8JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZVJvb3QgKyBmaWxlRGlyOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOwotCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIG5lZWRzIHRvIGJlIHN0YXRpYywgc2luY2UgSlVuaXQgY3JlYXRlcyBkaWZmZXJlbmNlIGluc3RhbmNlcyBmb3IgZWFjaAotCS8vIHRlc3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRlc3RDb250ZW50RGVzY3JpcHRpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCXRyeSB7Ci0JCS8vCQkJbmV3IFRlc3RDb2RlZFJlYWRlcigpLmRvQWxsRmlsZXMoKTsKLQkJLy8JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvL1Rlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8JCUlDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKGRvdGVzdEZpbGVzLmV4aXN0cygpKTsKLQkJLy8JCUlSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vCQlhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ICE9IG51bGwgJiYgZXhwZWN0ZWRKYXZhQ2hhcnNldC5pbmRleE9mKCJVVEYtMzIiKSA+IC0xKSB7Ci0JCQlyZXR1cm47IC8vd29uJ3QgdHJ5IDMyIGJpdCByaWdodCBub3cKLQkJfQotCQlleHBlY3RlZEphdmFDaGFyc2V0ID0gbWFzc2FnZUNoYXJzZXQoZXhwZWN0ZWRKYXZhQ2hhcnNldCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCS8vCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0RGVzY3JpcHRpb25Gb3IoZmlsZS5nZXRDb250ZW50cygpLCBmaWxlLmdldE5hbWUoKSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpOwotCS8vCWFzc2VydEVxdWFscygiY29tcGFyaW5nIGZpbGUgYW5kIHN0cmVhbSBjb250ZW50RGVzY3JpcHRpb24iLCBmaWxlQ29udGVudERlc2NyaXB0aW9uLCBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24pOwotCi0JCWFzc2VydE5vdE51bGwoIk51bGwgY29udGVudCBkZXNjcmlwdGlvbiIsIGZpbGVDb250ZW50RGVzY3JpcHRpb24pOwotCQlTdHJpbmcgZm91bmRDaGFyc2V0ID0gZmlsZUNvbnRlbnREZXNjcmlwdGlvbi5nZXRDaGFyc2V0KCk7Ci0JCWZvdW5kQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGZvdW5kQ2hhcnNldCk7Ci0KLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQgPT0gbnVsbCB8fCBleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCVN0cmluZyBwbGF0Zm9ybURlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlhc3NlcnRUcnVlKGZvdW5kQ2hhcnNldC5lcXVhbHMocGxhdGZvcm1EZWZhdWx0KSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlib29sZWFuIGFzRXhwZWN0ZWQgPSBmb3VuZENoYXJzZXQuZXF1YWxzKGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQkJYXNzZXJ0VHJ1ZShmb3VuZENoYXJzZXQgKyAiIGRpZCBub3QgZXF1YWwgdGhlIGV4cGVjdGVkICIgKyBleHBlY3RlZEphdmFDaGFyc2V0ICsgIiAodGhpcyBpcyBhIFZNIGRlcGVuZGVudCB0ZXN0KSIsIGFzRXhwZWN0ZWQpOwotCQl9Ci0KLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmb3VuZENoYXJzZXQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgbWFzc2FnZUNoYXJzZXQoU3RyaW5nIGZvdW5kQ2hhcnNldCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZm91bmRDaGFyc2V0OwotCQlpZiAoIlVURi0xNkxFIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNiI7Ci0JCX0KLQkJZWxzZSBpZiAoIlgtVW5pY29kZUxpdHRsZSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9Ci0JCWVsc2UgaWYgKCJYLVVuaWNvZGVCaWciLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2QkUiOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tMjAyMi1KUCIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJhYmMiLCAidGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ3aW5kb3dzLTEyNTIiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNyIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgidGVzdGp1bmsiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoInRlc3RqdW5rIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0vLwotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIG51bGwpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIG51bGwpOwotCX0KLS8vICBbMjQ5MjE0XSAtIFhNTENvbnRlbnREZXNjcmliZXIgbm8gbG9uZ2VyIHJldHVybnMgY29udGVudCB0eXBlcyBmb3IgaW52YWxpZCBlbmNvZGluZ3MKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IHN0YW5kYWxvbmU9IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBudWxsKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZsZS54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZiZU1hbGZvcm1lZC54bWwiLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4ZDk5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLkdlbmVyYXRlRmlsZXM7Ci0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzIGV4dGVuZHMgVGVzdENvbnRlbnREZXNjcmlwdGlvbiB7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5vdFJhbiA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHJvdGVjdGVkIHZvaWQgZG9HZW5UZXN0KFN0cmluZyBjaGFyc2V0TmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gR2VuZXJhdGVGaWxlcy5nZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpICsgIi94bWwvdGVzdC0iICsgY2hhcnNldE5hbWUgKyAiLnhtbCI7Ci0JCWRvVGVzdChjaGFyc2V0TmFtZSwgZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRKYXZhQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQgIT0gbnVsbCAmJiBleHBlY3RlZEphdmFDaGFyc2V0LmluZGV4T2YoIlVURi0zMiIpID4gLTEpIHsKLQkJCXJldHVybjsgLy93b24ndCB0cnkgMzIgYml0IHJpZ2h0IG5vdwotCQl9Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQotCQkvLyBpZiB0aGVyZSBubyBmaWxlLCBqdXN0IGFzc3VtZSB0aGF0IGl0cyBkdWUgdG8gd2hpY2ggVk0gaXMKLQkJLy8gYnJpbmcgdXNlZC4gKENvdWxkIGJlIGltcHJvdmVkIGluIGZ1dHVyZSB0byBhdm9pZCBjb3VudGluZyBhcyBhCi0JCS8vIHRlc3QpIC0gdGhpcyBjaGVjayBpbiBoZXJlIGZvciBpbml0aWFsIGRlYnVnZ2luZyBvbmx5Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCW5vdFJhbisrOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IG5vdCByYW4gc2luY2UgY2hhcnNldCBub3Qgc3VwcG9ydGVkIGJ5IFZNOiAiICsgZmlsZVBhdGgpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZEphdmFDaGFyc2V0LCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDRVNVLTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDT01QT1VORF9URVhUIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMjMxMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gImhwLXJvbWFuOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTAwNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwODgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwOTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzcwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzg2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0zMzcyMkMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTQzNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03NzUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTgwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg3NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODk3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MkMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OUMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTU0QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTi1HQiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIxMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKb2hhYiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS1NDNTYwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNBcmFiaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ2VudHJhbEV1cm9wZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDcm9hdGlhbiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDeXJpbGxpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNHcmVlayI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNIZWJyZXciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSWNlbGFuZCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbmlhIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1RoYWkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1R1cmtpc2giOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1VrcmFpbmUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlBUQ1AxNTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2TEUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyQkUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLThKIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTg3NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTM2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLS8qIAotcmVtb3ZlZCBmb3IgUFBDIG1hY2hpbmUgd2l0aCBJQk0gVk0gCi1odHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTAzCi0qLyAKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlQmlnIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlTGl0dGxlIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjBlZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVtcC50ZXN0cy5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBnZXRBbmRDcmVhdGVQcm9qZWN0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy8gY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uKCkgewotCQlzdXBlcigpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudFBsYXRmb3JtQ2hhcnNldCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQotCQlJQ29udGVudERlc2NyaXB0aW9uIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IGRvR2V0Q29udGVudFR5cGVCYXNlZE9uU3RyZWFtKGZpbGUpOwotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPbkZpbGUoZmlsZSk7Ci0KLQkJSUNvbnRlbnRUeXBlIGZpbGVDb250ZW50VHlwZSA9IGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZmlsZSBjb250ZW50IHR5cGUgd2FzIG51bGwiLCBmaWxlQ29udGVudFR5cGUpOwotCi0JCUlDb250ZW50VHlwZSBzdHJlYW1Db250ZW50VHlwZSA9IHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbi5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJzdHJlYW0gY29udGVudCB0eXBlIHdhcyBudWxsIiwgc3RyZWFtQ29udGVudFR5cGUpOwotCi0JCWFzc2VydEVxdWFscygiY29tcGFyaW5nIGNvbnRlbnQgdHlwZSBiYXNlZCBvbiBmaWxlIGFuZCBzdHJlYW06ICIsIGZpbGVDb250ZW50VHlwZSwgc3RyZWFtQ29udGVudFR5cGUpOwotCi0JCS8vIGlmIGVxdWFsLCBhYm92ZSwgYXMgZXhwZWN0ZWQsIHRoZW4gb25seSBuZWVkIHRvIGNoZWNrIG9uZS4KLQkJYXNzZXJ0RXF1YWxzKCJjb21wYXJlaW5nIHdpdGggZXhwZWN0ZWQgY29udGVudCB0eXBlIGlkIiwgZXhwZWN0ZWRDb250ZW50VHlwZSwgZmlsZUNvbnRlbnRUeXBlLmdldElkKCkpOwotCi0JfQotCi0JcHJvdGVjdGVkIElDb250ZW50RGVzY3JpcHRpb24gZG9HZXRDb250ZW50VHlwZUJhc2VkT25TdHJlYW0oSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBudWxsOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCXN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldERlc2NyaXB0aW9uRm9yKGlucHV0U3RyZWFtLCBmaWxlLmdldE5hbWUoKSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24pOwotCQlyZXR1cm4gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uOwotCX0KLQotCXByb3RlY3RlZCBJQ29udGVudERlc2NyaXB0aW9uIGRvR2V0Q29udGVudFR5cGVCYXNlZE9uRmlsZShJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZmlsZUNvbnRlbnREZXNjcmlwdGlvbiA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCWFzc2VydE5vdE51bGwoImZpbGUgY29udGVudCBkZXNjcmlwdGlvbiB3YXMgbnVsbCIsIGZpbGVDb250ZW50RGVzY3JpcHRpb24pOwotCQlyZXR1cm4gZmlsZUNvbnRlbnREZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3RGb3JQYXJlbnQoU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCQlJQ29udGVudERlc2NyaXB0aW9uIGNvbnRlbnREZXNjcmlwdGlvbiA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCWlmIChjb250ZW50RGVzY3JpcHRpb24gPT0gbnVsbCkgewotCQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlpbnB1dFN0cmVhbSA9IGZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCQljb250ZW50RGVzY3JpcHRpb24gPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXREZXNjcmlwdGlvbkZvcihpbnB1dFN0cmVhbSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBjb250ZW50RGVzY3JpcHRpb24pOwotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBjb250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudCB0eXBlIHdhcyBudWxsIiwgY29udGVudFR5cGUpOwotCi0JCUlDb250ZW50VHlwZSBwYXJlbnRDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCXdoaWxlIChwYXJlbnRDb250ZW50VHlwZSAhPSBudWxsICYmICFmb3VuZCkgewotCQkJZm91bmQgPSBleHBlY3RlZENvbnRlbnRUeXBlLmVxdWFscyhwYXJlbnRDb250ZW50VHlwZS5nZXRJZCgpKTsKLQkJCXBhcmVudENvbnRlbnRUeXBlID0gcGFyZW50Q29udGVudFR5cGUuZ2V0QmFzZVR5cGUoKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJkaWQgbm90IGZpbmQgJyIgKyBleHBlY3RlZENvbnRlbnRUeXBlICsgIicgaW4gcGFyZW50IGNoYWluIG9mIGJhc2UgdHlwZXMiLCBmb3VuZCk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotLy8JCQkJIERpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0vLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0vLwkJCQkJCWZUZXN0UHJvamVjdCA9IG51bGw7Ci0vLwkJCQkJCXRyeSB7Ci0vLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotLy8JCQkJCQl9Ci0vLwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQkJCQkJfQotLy8JCQkJCX0KLS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBnZXRUZXN0UHJvamVjdCgpIHsKLQkJcmV0dXJuIGZUZXN0UHJvamVjdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMGFmYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UiOwotCQotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGV4cGVjdGVkWFNMQ29udGVudFR5cGUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSI7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGV4cGVjdGVkWE1MQ29udGVudFR5cGUgPSAib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDNQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNGIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvZXVjanAueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0vLyAgWzI1MTc4Nl0gLSBObyBlbmNvZGluZyBzaG91bGQgdHJ5IHRvIGJlIHBpY2tlZCB1cCBieSB0aGUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIG51bGwpOwotLy8JfQotCi0JLyoqCi0JICogVGhpcyBmaWxlIGlzIGlsbGZvcm1lZCBpbiBpdHMgc3BlY2lmaWVkIGNoYXJzZXQKLQkgKiBhbmQgY2hhcmFjdGVycy4gCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotLy8gIFsyNTE3ODZdIC0gTm8gZW5jb2Rpbmcgc2hvdWxkIHRyeSB0byBiZSBwaWNrZWQgdXAgYnkgdGhlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYU0xDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLS8vCX0KLS8vICBbMjUxNzg2XSAtIE5vIGVuY29kaW5nIHNob3VsZCB0cnkgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwN1AoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIG51bGwpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwotCX0KLQkvLyBbMjUwMzkyXSB0aGUgdmVyc2lvbiBudW1iZXIgaXMgaWxsZm9ybWVkIGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCBjb3JyZWN0bHkgYnkgdGhlIFhNTENvbnRlbnREZXNjcmliZXIuCi0JLy8gTWlnaHQgYmUgYWJsZSB0byBmaXggd2hlbiBbMjUxNzg2XSBpcyBjb3JyZWN0ZWQKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIFsyNTAzOTJdIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBpbGxmb3JtZWQgYW5kIHNob3VsZCBub3QgYmUgcGFyc2VkIGNvcnJlY3RseSBieSB0aGUgWE1MQ29udGVudERlc2NyaWJlci4KLQkvLyBNaWdodCBiZSBhYmxlIHRvIGZpeCB3aGVuIFsyNTE3ODZdIGlzIGNvcnJlY3RlZAotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBqYXZhLm5pby5jaGFyc2V0LklsbGVnYWxDaGFyc2V0TmFtZUV4Y2VwdGlvbi5jbGFzcyk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMFdTKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gd2hpdGVzcGFjZSAoQ1JMRikgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbgotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMFdTMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKHNwYWNlIG9ubHkpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24KLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwV1MzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gd2hpdGVzcGFjZSAoc3BhY2UsIHRhYnMsIGFuZCBDUiBvbmx5KSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uCi0JCWRvVGVzdChleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMFAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHRhZyAobm90IGp1c3Qgd2hpdGUgc3BhY2UpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24uCi0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMVAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gbGFyZ2UsIHV0ZjE2LCBidXQgbm8geG1sRGVjbAotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNFAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGlsbGZvcm1lZCwgaXMgaW4gdXRmMTYsIGJ1dCBub3QgaW4gaGVhZGVyLCBub3QgaW4gZW5jb2Rpbmc9IHNwZWMuCi0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNVAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZsZS54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZiZU1hbGZvcm1lZC54bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwiLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWE2MTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlTWFuYWdlcjsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlcyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZlciByZWdpc3RyeSBtdXN0IGV4aXN0IiwgcmVnaXN0cnkgIT0gbnVsbCk7Ci0JCUlDb250ZW50VHlwZVtdIGFsbFR5cGVzID0gcmVnaXN0cnkuZ2V0QWxsQ29udGVudFR5cGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IGFsbFR5cGVzW2ldOwotCQkJSUNvbnRlbnRUeXBlIHBhcmVudFR5cGUgPSBjb250ZW50VHlwZS5nZXRCYXNlVHlwZSgpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludChjb250ZW50VHlwZSk7Ci0KLQkJCQlpZiAocGFyZW50VHlwZSAhPSBudWxsKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIChleHRlbmRzICIgKyBwYXJlbnRUeXBlICsgIikiKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCX0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICIgKyBjb250ZW50VHlwZS5nZXROYW1lKCkpOwotCQkJfQotCQkJU3RyaW5nW10gZmlsZXNwZWNzID0gY29udGVudFR5cGUuZ2V0RmlsZVNwZWNzKElDb250ZW50VHlwZS5GSUxFX0VYVEVOU0lPTl9TUEVDIHwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJCWlmIChERUJVRykgewotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgZmlsZXNwZWNzLmxlbmd0aDsgaisrKSB7Ci0JCQkJCVN0cmluZyBmaWxlc3BlYyA9IGZpbGVzcGVjc1tqXTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICIgKyBmaWxlc3BlYyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGFkNTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSU92ZXJ3cml0ZVF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JSW1wb3J0U3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSW1wb3J0T3BlcmF0aW9uOwotCi0vKioKLSAqIEltcG9ydHMgemlwcGVkIGZpbGVzIGludG8gdGhlIHRlc3Qgd29ya3NwYWNlLiBEZWxldGVzIGFsbCBwcm9qZWN0cyBpbgotICogd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFVuemlwVXRpbGl0eSB7Ci0JY2xhc3MgTXlPdmVyd3JpdGVRdWVyeSBpbXBsZW1lbnRzIElPdmVyd3JpdGVRdWVyeSB7Ci0JCXB1YmxpYyBTdHJpbmcgcXVlcnlPdmVyd3JpdGUoU3RyaW5nIHBhdGhTdHJpbmcpIHsKLQkJCXJldHVybiBBTEw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9KRUNUX1pJUFNfRk9MREVSID0gIlByb2plY3RUZXN0RmlsZXMiOwotCXByaXZhdGUgTGlzdCBmQ3JlYXRlZFByb2plY3RzID0gbnVsbDsKLQotCXB1YmxpYyBQcm9qZWN0VW56aXBVdGlsaXR5KCkgewotCQkvLyBmb3IgZGVsZXRpb24gbGF0ZXIKLQkJZkNyZWF0ZWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZVRvSW1wb3J0Ci0JICogICAgICAgICAgICB0aGUgZmlsZSB5b3Ugd2lzaCB0byBpbXBvcnQKLQkgKiBAcGFyYW0gZm9sZGVyUGF0aAotCSAqICAgICAgICAgICAgdGhlIGNvbnRhaW5lciBwYXRoIHdpdGhpbiB0aGUgd29ya3NwYWNlCi0JICovCi0JcHVibGljIHZvaWQgaW1wb3J0RmlsZShGaWxlIGZpbGVUb0ltcG9ydCwgU3RyaW5nIGZvbGRlclBhdGgpIHsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcG9ydFByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl0cnkgewotCQkJaWYgKGZpbGVUb0ltcG9ydC5leGlzdHMoKSkgewotCQkJCUlQYXRoIGNvbnRhaW5lclBhdGggPSBuZXcgUGF0aChmb2xkZXJQYXRoKTsKLQkJCQkvL2ZDcmVhdGVkUHJvamVjdHMuYWRkKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJU3RyaW5nIGluRmlsZU5hbWUgPSBpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7IC8vImM6L2V4YW1wbGUuemlwIjsKLQkJCS8vIFNwZWNpZnkgZGVzdGluYXRpb24gd2hlcmUgZmlsZSB3aWxsIGJlIHVuemlwcGVkCi0JCQkvL1N0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9Ci0JCQkvLyAiZDovZWNsaXBzZWRldi9NNV9TU0VfVEVTVFNfV09SS1NQQUNFLyI7IC8vImM6L3RlbXAvIjsKLQkJCUZpbGUgc291cmNlWmlwRmlsZSA9IG5ldyBGaWxlKGluRmlsZU5hbWUpOwotCQkJRmlsZSB1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGVzdGluYXRpb25EaXJlY3RvcnkpOwotCQkJLy8gT3BlbiBaaXAgZmlsZSBmb3IgcmVhZGluZwotCQkJWmlwRmlsZSB6aXBGaWxlID0gbmV3IFppcEZpbGUoc291cmNlWmlwRmlsZSwgWmlwRmlsZS5PUEVOX1JFQUQpOwotCQkJLy8gQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZQotCQkJRW51bWVyYXRpb24gemlwRmlsZUVudHJpZXMgPSB6aXBGaWxlLmVudHJpZXMoKTsKLQkJCVN0cmluZyBwcm9qZWN0Rm9sZGVyTmFtZSA9IG51bGw7Ci0JCQlJUHJvamVjdCBjdXJyZW50UHJvamVjdCA9IG51bGw7Ci0JCQkvLyBQcm9jZXNzIGVhY2ggZW50cnkKLQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCS8vIGdyYWIgYSB6aXAgZmlsZSBlbnRyeQotCQkJCVppcEVudHJ5IGVudHJ5ID0gKFppcEVudHJ5KSB6aXBGaWxlRW50cmllcy5uZXh0RWxlbWVudCgpOwotCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4dHJhY3Rpbmc6ICIgKyBlbnRyeSk7Ci0JCQkJRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnksIGN1cnJlbnRFbnRyeSk7Ci0JCQkJLy8gZ3JhYiBmaWxlJ3MgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLQkJCQlGaWxlIGRlc3RpbmF0aW9uUGFyZW50ID0gZGVzdEZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQkJCS8vIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaWYgbmVlZGVkCi0JCQkJZGVzdGluYXRpb25QYXJlbnQubWtkaXJzKCk7Ci0JCQkJLy8gZXh0cmFjdCBmaWxlIGlmIG5vdCBhIGRpcmVjdG9yeQotCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOwotCQkJCQkvLyBlc3RhYmxpc2ggYnVmZmVyIGZvciB3cml0aW5nIGZpbGUKLQkJCQkJYnl0ZSBkYXRhW10gPSBuZXcgYnl0ZVtCVUZGRVJdOwotCQkJCQkvLyB3cml0ZSB0aGUgY3VycmVudCBmaWxlIHRvIGRpc2sKLQkJCQkJRmlsZU91dHB1dFN0cmVhbSBmaWxlT3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzdEZpbGUpOwotCQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gZGVzdCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oQlVGRkVSKTsKLQkJCQkJLy8gcmVhZCBhbmQgd3JpdGUgdW50aWwgbGFzdCBieXRlIGlzIGVuY291bnRlcmVkCi0JCQkJCWJvb2xlYW4gZW9mID0gZmFsc2U7Ci0JCQkJCWludCBuQnl0ZXMgPSAwOwotCQkJCQl3aGlsZSAoIWVvZikgewotCQkJCQkJbkJ5dGVzID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpOwotCQkJCQkJaWYgKG5CeXRlcyAhPSAtMSkgewotCQkJCQkJCWRlc3Qud3JpdGUoZGF0YSwgMCwgbkJ5dGVzKTsKLQkJCQkJCX0KLQkJCQkJCWVsc2UgewotCQkJCQkJCWVvZiA9IHRydWU7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZGVzdC5mbHVzaCgpOwotCQkJCQlkZXN0LmNsb3NlKCk7Ci0JCQkJCWZpbGVPdXRwdXRTdHJlYW0ud3JpdGUoZGVzdC50b0J5dGVBcnJheSgpKTsKLQkJCQkJZmlsZU91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCQlpcy5jbG9zZSgpOwotCQkJCQlpZiAocHJvamVjdEZvbGRlck5hbWUgIT0gbnVsbCkKLQkJCQkJCWltcG9ydEZpbGUoZGVzdEZpbGUsIHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIG5lZWQgaGFuZGxlIHRvIHRoZSBtYWluIHByb2plY3QgZm9sZGVyIHRvIGNyZWF0ZQotCQkJCQkvLyBjb250YWluZXJQYXRoCi0JCQkJCS8vIHVubGlrZSB2ZXJzaW9uIGluIHNzZS50ZXN0cywgd2UgZG9uJ3QgY3JlYXRlIHByb2plY3QKLQkJCQkJLy8gZm9yCi0JCQkJCS8vIGV2ZXJ5IGRpcmVjdG9yeQotCQkJCQkvLwkJCQkJaWYocHJvamVjdEZvbGRlck5hbWUgPT0gbnVsbCkgewotCQkJCQkvLwkJCQkJCXByb2plY3RGb2xkZXJOYW1lID0gZGVzdEZpbGUuZ2V0TmFtZSgpOwotCQkJCQkvLwkJCQkJCWZDcmVhdGVkUHJvamVjdHMuYWRkKHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCQkKLQkJCQkJLy8JCQkJCQljdXJyZW50UHJvamVjdCA9Ci0JCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJemlwRmlsZS5jbG9zZSgpOwotCQkJLy8gZml4ZXMgd29ya3NwYWNlIG1ldGFkYXRhIGZvciB0aGUgcHJvamVjdAotCQkJLy8gZm9yIGNsZWFuIHN0YXJ0dXAgbmV4dCBydW4KLQkJCWlmIChjdXJyZW50UHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJUGF0aCBwcm9qZWN0TG9jYXRpb24gPSBuZXcgUGF0aChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSk7Ci0JCQkJCWNyZWF0ZVByb2plY3QoY3VycmVudFByb2plY3QsIHByb2plY3RMb2NhdGlvbiwgbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2V4KSB7Ci0JCQkJCWNleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSB3c1Jvb3QuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0ucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCX0KLQkJd3NSb290LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIERlbGV0ZSBwcm9qZWN0cyBjcmVhdGVkICh1bnppcHBlZCBhbmQgaW1wb3J0ZWQpIGJ5IHRoaXMgdXRpbGl0eQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3RbXSBwcm9qZWN0cyA9IGdldENyZWF0ZWRQcm9qZWN0cygpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXByb2plY3RzW2ldLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uY2xvc2UobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgU3RyaW5nIG5hbWUgPSBwcm9qZWN0TmFtZTsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8JCQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vCQkJCUlQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJdHJ5IHsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkJLy8ganVzdCB0cnkgYWdhaW4gKG5vdCBzdXJlIHdoeSB0aGV5IGFyZSBub3QgYmVpbmcKLQkJCQkJCS8vIGRlbGV0ZWQpCi0JCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gSVByb2plY3RzIHRoYXQgd2VyZSB1bnppcHBlZCBhbmQgaW1wb3J0ZWQgaW50byB0aGUgd29ya3NwYWNlIGJ5Ci0JICogICAgICAgICB0aGlzIHV0aWxpdHkKLQkgKi8KLQlwdWJsaWMgSVByb2plY3RbXSBnZXRDcmVhdGVkUHJvamVjdHMoKSB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCVN0cmluZ1tdIHByb2plY3ROYW1lcyA9IChTdHJpbmdbXSkgZkNyZWF0ZWRQcm9qZWN0cy50b0FycmF5KG5ldyBTdHJpbmdbZkNyZWF0ZWRQcm9qZWN0cy5zaXplKCldKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0TmFtZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0TmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldID0gd3NSb290LmdldFByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdHM7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdEphdmFQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyByZXN5bmNoCi0JCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJLy9jaGFuZ2UgcHJlcmVxcyB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IGJhY2sgaW4KLQkJSVByb2plY3QgcHJvaiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCS8vIG5lZWQgdG8gYWRkIGphdmEgbmF0dXJlLCBvciBlbHNlIHByb2plY3Qgd29uJ3QgImV4aXN0KCkiIGluIHRoZQotCQkvLyBqYXZhIGVsZW1lbnQgc2Vuc2UKLQkJU3RyaW5nW10gbmF0dXJlSWRzID0geyJvcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlIn07Ci0JCWlmICghcHJvai5pc09wZW4oKSkgewotCQkJcHJvai5vcGVuKG51bGwpOwotCQl9Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2ouZ2V0RGVzY3JpcHRpb24oKTsKLQkJZGVzYy5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJcHJvai5zZXREZXNjcmlwdGlvbihkZXNjLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoSVByb2plY3QgZlByb2plY3QpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSBmUHJvamVjdDsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCS8vV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4obnVsbCk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCS8vUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q3ZjdkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi1jbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKLQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykgewotCQkvLyBub29wCi0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCQkvLyBub29wCi0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCQkvLyBub29wCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2Rpbmcvd3JpdGUvVGVzdENvZGVkV3JpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2Rpbmcvd3JpdGUvVGVzdENvZGVkV3JpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyNTIxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcud3JpdGU7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db2RlZFN0cmVhbUNyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nUnVsZTsKLQotcHVibGljIGNsYXNzIFRlc3RDb2RlZFdyaXRlIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBBIHRhYmxlIG9mIGhleCBkaWdpdHMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4RGlnaXQgPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdCdWZmZXIgc0J1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKDIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJ5dGVUb0hleChieXRlIGJ5dGVjaGFyKSB7Ci0JCXNCdWZmLnNldExlbmd0aCgwKTsKLQkJaW50IGxvdyA9IGJ5dGVjaGFyICYgMHhGOwotCQlpbnQgaGkgPSAoYnl0ZWNoYXIgPj4gNCkgJiAweEY7Ci0JCXNCdWZmLmFwcGVuZCh0b0hleChoaSkpOwotCQlzQnVmZi5hcHBlbmQodG9IZXgobG93KSk7Ci0JCXJldHVybiBzQnVmZi50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYSBuaWJibGUgdG8gYSBoZXggY2hhcmFjdGVyCi0JICogCi0JICogQHBhcmFtIG5pYmJsZQotCSAqICAgICAgICAgICAgdGhlIG5pYmJsZSB0byBjb252ZXJ0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNoYXIgdG9IZXgoaW50IG5pYmJsZSkgewotCQlyZXR1cm4gaGV4RGlnaXRbKG5pYmJsZSAmIDB4RildOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRXcml0ZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRXcml0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zXCIlPiI7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LmpzcCIsIGpzcCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGUiLCBqc3AsICJJU08tODg1OS0zIiwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVidWdQcmludChTdHJpbmcgdGVzdG5hbWUsIFN0cmluZyBvcmlnaW5hbFN0cmluZywgU3RyaW5nIGVuY29kaW5nLCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdG5hbWUpOwotCQlieXRlW10gYnl0ZXMgPSBvdXRwdXRTdHJlYW0udG9CeXRlQXJyYXkoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludChieXRlVG9IZXgoYnl0ZXNbaV0pKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJaWYgKGVuY29kaW5nID09IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ5dGVzKSk7Ci0KLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ5dGVzLCBlbmNvZGluZykpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZVVURjE2QkUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcganNwID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi0xNkJFXCIlPiI7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LmpzcCIsIGpzcCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVVVEYxNkJFIiwganNwLCAiVVRGLTE2QkUiLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJU3RyaW5nIHhtbFN0cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtMTZcIj8+PHRhZz50ZXN0IHRleHQ8L3RhZz4iOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS54bWwiLCB4bWxTdHJpbmcpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlciIsIHhtbFN0cmluZywgIlVURi0xNiIsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZXN0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJU3RyaW5nIHRleHQgPSAidGVzdCB0ZXh0IjsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkueG1sIiwgdGV4dCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVzdCIsIHRleHQsIG51bGwsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MRW5jb2RpbmdUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MRW5jb2RpbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWIxYzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBYTUxFbmNvZGluZ1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAieG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZVJvb3QgKyBmaWxlRGlyOwotCi0JcHVibGljIFhNTEVuY29kaW5nVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy9JbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJdHJ5IHsKLQkJCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSAoKFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkgaWYgdGhyb3dzIGV4Y2VwdGlvbi4KLQkJCWVuc3VyZUNhblJlYWQoZmlsZW5hbWUsIGZvdW5kSUFOQUVuY29kaW5nLCBpc3RyZWFtKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MRW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIklsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJJU08tODg1OS0xIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgaWFuYUluRmlsZSwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogQ2F1dGlvbiwgd2hlbiB0aGlzIGZpbGUgcHJpbnRzIG91dCBpbiBjb25zb2xlICh3aGVuIGRlYnVnIHNldCB0byB0cnVlLCBpdCBhcHBlYXJzIAotCSAqIGluY29ycmVjdCAoZHVlIHRvIGZvbnQgcHJvYmxlbXMgaW4gY29uc29sZSkuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqIE5vdGU6IFVURi0xNiA9PSBVVEYtMTZCRQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEY4M0J5dGVCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGOFdpdGgzQnl0ZUJPTS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2TEVNYWxmb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZU1hbGZvcm1lZC54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCRU1hbGZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlTWFsZm9ybWVkLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDNjMzc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgWE1MSGVhZFRva2VuaXplclRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAieG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZFbmNvZGluZyA9IG51bGw7Ci0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gZkZpbmFsVG9rZW47Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBleHBlY3RlZEZpbmFsVG9rZW5UeXBlKSB7Ci0KLQkJWE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IFRlc3RzUGx1Z2luLmdldEJ5dGVSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IFhNTEhlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igb3BlbmluZyBmaWxlIFwiIiArIGZpbGVuYW1lICsgIlwiIik7Ci0JCX0KLQotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSBudWxsOwotCQl0cnkgewotCQkJcGFyc2UodG9rZW5pemVyKTsKLQkJCXJlc3VsdFZhbHVlID0gZkVuY29kaW5nOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZCBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBzY2FubmluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWRGaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgZkZpbmFsVG9rZW4uZ2V0VHlwZSgpLCBleHBlY3RlZEZpbmFsVG9rZW5UeXBlLmVxdWFscyhmRmluYWxUb2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCS8vIFRPRE86IHRoaXMgdGVzdCBicmFuY2ggbmVlZHMgdG8gYmUgaW1wcm92ZWQgLi4uIGRvZXNuJ3QKLQkJCQkvLyBmYWlsCi0JCQkJLy8gYXMgaXQgc2hvdWxkCi0JCQkJLy8gKHN1Y2ggYXMgd2hlbiB0b2tlbml6ZXIgY2hhbmdlZCB0byByZXR1cm4gZWFybHkgd2hlbgotCQkJCS8vIFVuaWNvZGUKLQkJCQkvLyBzdHJlYW0gZm91bmQpLgotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VmFsdWUgPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBwYXJzZShYTUxIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJU3RyaW5nIHRva2VuVHlwZSA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJLy8gbm9ybWFsbHkgInBhcnNpbmciIHRoZSB0b2tlbnMgc2hvdWxkIGJlIGRvbmUgYnkgcGFyc2VyCi0JCQkvLyBAc2VlLCBYTUxSZXNvdXJjZUVuY29kb2luZ0RldGVjdG9yCi0JCQkvLyBidXQgd2UnbGwKLQkJCS8vIGRvIGl0IGhlcmUgZm9yIGEgbGl0dGxlCi0JCQkvLyBtb3JlIGluZGVwZW5kZW50IHRlc3QuCi0JCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2QkUpIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGMTZCRUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZMRSkgewotCQkJCWZFbmNvZGluZyA9ICJVVEYxNkxFSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGODNCeXRlQk9NSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBYTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlhNTERlbEVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCXRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodG9rZW5UeXBlKSkgewotCQkJCQkJZkVuY29kaW5nID0gdG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJLy8gZm9yIHRlc3RpbmcKLQkJZkZpbmFsVG9rZW4gPSB0b2tlbjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNMZWdhbFN0cmluZyhTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5TdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VbkRlbGltaXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBOb3JtYWwgWE1MRGVjbGFyYXRpb24gd2l0aCBkZWZhdWx0IGVuY29kaW5nIHNwZWNpZmllZCAoVVRGLTgpCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vcm1hbENhc2UueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGEgVVRGLTE2IGZpbGUgKFVuaWNvZGUgYnl0ZXMgaW4gQk9NKS4gU28sIHRoZSB0b2tlbml6ZXIgYnkKLQkgKiBpdHNlbGYgY2FuJ3QgcmVhZCBjb3JyZWN0bHkuIFJldHVybnMgbnVsbCBpbiAicHVyZSIgdG9rZW5pemVyIHRlc3QsIGJ1dAotCSAqIGVuY29kaW5nIGRldGVjdG9yIGNhc2Ugc2hvdWxkIHN0aWxsIGhhbmRsZSBzaW5jZSBsb29rcyBmb3IgYnl0ZXMgZmlyc3QuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdFVURjE2LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkJFSW5TdHJlYW0iKTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBjaG9rZSBvbiBlbXB0eSBmaWxlLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RVVDSlAoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJldWNqcC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiRVVDLUpQIik7Ci0JfQotCi0JLyoqCi0JICogRXh0ZW5kZWQgWE1MIERlY2xhcmF0aW9uIHRoYXQgY29udGFpbnMgJ3N0YW5kYWxvbmUnIGF0dHJpYnV0ZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRyYUF0dHJDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8qKgotCSAqIEEgY2FzZSB3aXRoIGEgdmFsaWQgZW5jb2RpbmcsIGJ1dCBleHRyYSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBub3QKLQkgKiB2YWxpZC9tZWFuaW5nZnVsLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRyYUp1bmtDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdEV4dHJhSnVuay54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgMiBxdW90ZXMsIG9uZSBhbmQgZW5kIG9mIHZlcnNpb24gdmFsdWUgYW5kIG9uZSBhdCBiZWdpbm5pbmcgb2YKLQkgKiBlbmNvZGluZyB2YWx1ZS4gSW4gdGhpcyBjYXNlLCB0b2tlbml6ZXIgaGFuZGxlcyBhcyB1bmRlbGltaXRlIHN0cmluZywKLQkgKiBidXQgaWYgd2UgZXZlciBtb2RpZml5IHRvIGFsc28gbG9vayBmb3IgJ3ZlcnNpb24nLCB0aGVuIHdvdWxkIG5vdCB3b3JrCi0JICogdGhlIHNhbWUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBYTUxEZWNsIGVuZCB0YWcgLi4uIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNhZmVseSBndWVzcy4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgZW5kIHF1b3RlIG9uIFVURi04IGF0dHJpYnV0ZSwgc28gcGlja3MgdXAgZm9sbG93aW5nIGF0dHJpYnRlCi0JICogdG9vLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDMueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04IHN0YW5kYWxvbmU9Iik7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBlbmQgcXVvdGUgb24gVVRGLTggYXR0cmlidXRlLCBidXQgdGhlbiBYTUxEZWNsRW5kcywgc28gc2hvdWxkCi0JICogYmUgYWJsZSB0byBoYW5kbGUKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkNCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQ0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCX0KLQotCS8qKgotCSAqIFRlc3Qgb2YgbWlzc2luZyBlbmQgcXVvdGUgb24gZW5jb2RpbmcgdmFsdWUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0JfQotCi0JLyoqCi0JICogRW1wdHkgc3RyaW5nIGFzIGVuY29kaW5nIHZhbHVlOyAoQW5kLCBtYWxmb3JtZWQgaW5wdXQsIGZvciBVVEYtOCAuLi4KLQkgKiBzaG91bGQgbm90IGVmZmVjdCByZXN1bHRzIG9mIHRoaXMgbGV2ZWwgb2YgdGVzdCkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBFbXB0eSBzdHJpbmcgYXMgZW5jb2RpbmcgdmFsdWU7IChBbmQsIG1hbGZvcm1lZCBpbnB1dCwgZm9yIFVURi04IC4uLgotCSAqIHNob3VsZCBub3QgZWZmZWN0IHJlc3VsdHMgb2YgdGhpcyBsZXZlbCBvZiB0ZXN0KS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueHNsIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIiIpOwotCX0KLQotCS8qKgotCSAqIFhNTERlY2xhcmF0aW9uIG5vdCBhbGwgb24gc2FtZSBsaW5lCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE11bHRpTGluZUNhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0TXVsdGlMaW5lLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBObyBlbmNvZGluZyBpbiBYTUxEZWNsYXJhdGlvbgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA/SXMgdGhpcyBhIGR1cD8KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZ0Nhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbCBYTUxEZWNsYXJhdGlvbiB3aXRoIElTTy0xIHNwZWNpZmllZAotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIE5vIFhNTERlY2xhcmF0aW9uIGF0IGFsbC4gKEludmFsaWQsIGJ1dCBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MRGVjbCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2wueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogSGFyZCB0byBoYW5kbGUgc2FmZWx5IChtYXkgYXBwZWFyIGluIGNvbW1lbnQsIGZvciBleGFtcGxlKS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxEZWNsQXRGaXJzdCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBqdXN0IHRvIG1ha2Ugc3VyZSB0aGUgc2Nhbm5pbmcgZW5kcyBiZWZvcmUgZW5kIG9mIGZpbGUgaXMKLQkgKiByZWFjaGVkLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTERlY2xJbkxhcmdlRmlsZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5NQVhfQ0hBUlNfUkVBQ0hFRCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0c2hpZnRqaXMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJzaGlmdGppcy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiU2hpZnRfSklTIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRVdpdGhKYXBhbmVzZUNoYXJzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2TEVJblN0cmVhbSIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVXaXRoSmFwYW5lc2VDaGFycygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZCRUluU3RyZWFtIik7Ci0JfQotCi0JLyoqCi0JICogQSBjb21tb24gY2FzZS4KLQkgKiAKLQkgKi8KLQkgcHVibGljIHZvaWQgdGVzdFVURjhXaXRoM0J5dGVCT00oKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEY4V2l0aDNCeXRlQk9NLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEY4M0J5dGVCT01JblN0cmVhbSIpOwotCX0KLQlwdWJsaWMgdm9pZCBVVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZMRUluU3RyZWFtIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCRU1hbGZvcm1lZCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmVNYWxmb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkJFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFTWFsZm9ybWVkKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZU1hbGZvcm1lZC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxNYWxmb3JtZWRJbnB1dFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxNYWxmb3JtZWRJbnB1dFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZTA5OWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0Lk1hbGZvcm1lZElucHV0RXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLS8qKgotICogRklYTUU6IHRoaXMgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNyZWF0ZSBhICJmaWxlIHBlZWtlciI/IEJ1dCwKLSAqIGl0cyBub3Qgb3RoZXJ3aXNlZCB1c2VkIC0tIGRlbGV0ZSBpZiBub3QgZml4ZWQvaW1wcm92ZWQgc29vbgotICogWE1MTWFsZm9ybWVkSW5wdXRUZXN0cwotICovCi0KLXB1YmxpYyBjbGFzcyBYTUxNYWxmb3JtZWRJbnB1dFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0KLQlwdWJsaWMgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBmb3IgYSBmaWxlLCBmaWxlbmFtZSB0aGF0IHNob3VsZCB0aHJvdyBhCi0JICogTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIGF0IGNoYXJhY3RlciwgZXhwZWN0ZWRQb3NpdGlvbi4gVGhpcwotCSAqIGhhcHBlbnMgd2hlbiBubyBlbmNvZGluZyBpcyBzcGVjaWZpZWQsIHNvIHRoZSBkZWZhdWx0IGlzIHVzZWQsIGJ1dAotCSAqIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZG9lcyBub3QgcmVjb2duaXplCi0JICovCi0Jdm9pZCBkb1Rlc3RNYWxmb3JtZWRJbnB1dChTdHJpbmcgZmlsZW5hbWUsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvciwgaW50IGV4cGVjdGVkUG9zaXRpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUV4Y2VwdGlvbiBmb3VuZEV4Y2VwdGlvbiA9IG51bGw7Ci0JCWludCBiYWRDaGFyUG9zaXRpb24gPSAtMTsKLQkJRmlsZSBmaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCS8vIElFbmNvZGVkRG9jdW1lbnQgZG9jID0KLQkJLy8gZGV0ZWN0b3IuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGZpbGVuYW1lLCBpc3RyZWFtKTsKLQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKSBkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZm91bmRJQU5BRW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCWlzdHJlYW0uY2xvc2UoKTsKLQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQotCQkvLyBub3csIHRyeSByZWFkaW5nIGFzIHBlciBlbmNvZGluZwotCQlpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIHNraXAgQk9NIGZvciB0aGlzIGNhc2UKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGlucHV0U3RyZWFtLnJlYWQoKSk7Ci0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dFN0cmVhbS5yZWFkKCkpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRTdHJlYW0ucmVhZCgpKTsKLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGlucHV0U3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0KLQkJdHJ5IHsKLQkJCS8vIGp1c3QgdHJ5IHJlYWRpbmcgLi4uIHNob3VsZCB0aHJvdyBleGNlcHRpb24KLQkJCS8vIGV4Y2VwdGlvbikKLQkJCXJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBhcyBleHBlY3RlZCwgbm93IGRvIGRldGFpbGVkIGNoZWNraW5nLgotCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJCWNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJCXJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQkJaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQkJdHJ5IHsKLQkJCQloYW5kbGVNYWxGb3JtZWRJbnB1dF9EZXRhaWxDaGVja2luZyhyZWFkZXIsIGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwgc2UpIHsKLQkJCQlmb3VuZEV4Y2VwdGlvbiA9IHNlOwotCQkJCWJhZENoYXJQb3NpdGlvbiA9IHNlLmdldENoYXJQb3NpdGlvbigpOwotCQkJfQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCi0JCX0KLQkJLy8gaGFuZGxlIGFkanVzdG1lbnRzIGhlcmUgZm9yIFZNIGRpZmZlcm5jZXM6Ci0JCS8vIGZvciBub3cgaXRzIGVpdGhlciA0OSBvciA0OSArIDIgQk9NcyAoNTEpCi0JCS8vIGNhbiBiZSBzbWFydGluZyBsYXRlci4KLQkJYXNzZXJ0VHJ1ZSgiTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24gYXMgZXhwZWN0ZWQgZm9yIGZpbGVuYW1lOiAiICsgZmlsZW5hbWUgKyAiIEV4Y2VwdGlvbiB0aHJvd246IiArIGZvdW5kRXhjZXB0aW9uLCBmb3VuZEV4Y2VwdGlvbiBpbnN0YW5jZW9mIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCk7Ci0JCWFzc2VydFRydWUoIldyb25nIGNoYXJhY3RlciBwb3NpdGlvbiBkZXRlY3RlZCBpbiBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbi4gIEV4cGVjdGVkOiAiICsgZXhwZWN0ZWRQb3NpdGlvbiArICIgRm91bmQ6ICIgKyBiYWRDaGFyUG9zaXRpb24sIChiYWRDaGFyUG9zaXRpb24gPT0gZXhwZWN0ZWRQb3NpdGlvbikgfHwgYmFkQ2hhclBvc2l0aW9uID09IGV4cGVjdGVkUG9zaXRpb24gLSAyKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0WFNMTWFsZm9ybWVkSW5wdXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhzbCI7Ci0JLy8gZG9UZXN0TWFsZm9ybWVkSW5wdXQoZmlsZW5hbWUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSwgMjExKTsKLQkvLyB9Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odEJ1ZmZbMF0pOwotCQkJfQotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQkvKgotCSAqIHJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotCSAqLwotCS8vIHB1YmxpYyB2b2lkIHRlc3RYTUxNYWxmb3JtZWRJbnB1dCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueG1sIjsKLQkvLyBkb1Rlc3RNYWxmb3JtZWRJbnB1dChmaWxlbmFtZSwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpLCA1MSk7Ci0JLy8gfQotCS8vIHNpbmNlIGFib3ZlIHRlc3Qgd2FzIG9ubHkgb25lIGltIHRoaXMgY2xhc3MsIHB1dCBpbiB0aGlzIG5vIG9wIHRvIGF2b2lkCi0JLy8gYSBmYWlsdXJlIGR1ZSB0byBubyB0ZXN0cyBpbiBjbGFzcyEKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9PcCgpIHsKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaGFuZGxlTWFsRm9ybWVkSW5wdXRfRGV0YWlsQ2hlY2tpbmcoUmVhZGVyIHJlYWRlciwgU3RyaW5nIGVuY29kaW5nTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwgewotCQlpbnQgY2hhclBvc3Rpb24gPSAtMTsKLQkJY2hhclBvc3Rpb24gPSBnZXRDaGFyUG9zdGlvbk9mRmFpbHVyZShyZWFkZXIpOwotCQkvLyBhbGwgb2YgdGhhdCBqdXN0IHRvIHRocm93IG1vcmUgYWNjdXJhdGUgZXJyb3IKLQkJLy8gbm90ZTogd2UgZG8gdGhlIGNvbnZlcnNpb24gdG8gaWFuYU5hbWUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIGxvY2FsCi0JCS8vIHZhcmlhYmxlLAotCQkvLyBiZWNhdXNlIHRoaXMgaXMgdWx0aW1hdGVseSBvbmx5IGZvciB0aGUgdXNlciBlcnJvciBtZXNzYWdlICh0aGF0Ci0JCS8vIGlzLAotCQkvLyB0aGUgZXJyb3Igb2NjdXJyZWQKLQkJLy8gaW4gY29udGV4dCBvZiBqYXZhRW5jb2RpbmdOYW1lIG5vIG1hdHRlciB3aGF0IGlhbmFFbmNvZGluZ05hbWUgaXMKLQkJdGhyb3cgbmV3IE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbChlbmNvZGluZ05hbWUsIGNoYXJQb3N0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRDaGFyUG9zdGlvbk9mRmFpbHVyZShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpbnQgY2hhclBvc2l0aW9uID0gMTsKLQkJaW50IGNoYXJSZWFkID0gLTE7Ci0JCWludCByZXN1bHQgPSAtMTsKLQkJYm9vbGVhbiBlcnJvckZvdW5kID0gZmFsc2U7Ci0JCWRvIHsKLQkJCXRyeSB7Ci0JCQkJaWYgKHJlYWRlci5yZWFkeSgpKSB7Ci0JCQkJCWNoYXJSZWFkID0gcmVhZGVyLnJlYWQoKTsKLQkJCQl9Ci0JCQkJaWYgKERFQlVHKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjaGFyUG9zaXRpb24gKyAiOiAiICsgZXNjYXBlKChjaGFyKSBjaGFyUmVhZCwgdHJ1ZSkpOwotCQkJCX0KLQkJCQljaGFyUG9zaXRpb24rKzsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdGhpcyBpcyBleHBlY3RlZCwgc2luY2Ugd2UncmUgZXhwZWN0aW5nIGZhaWx1cmUsCi0JCQkJLy8gc28gbm8gbmVlZCB0byBkbyBhbnl0aGluZy4KLQkJCQllcnJvckZvdW5kID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoKGNoYXJSZWFkICE9IC0xICYmICFlcnJvckZvdW5kKSAmJiByZWFkZXIucmVhZHkoKSk7Ci0KLQkJaWYgKGVycm9yRm91bmQpCi0JCQlyZXN1bHQgPSBjaGFyUG9zaXRpb247Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IC0xOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGVzY2FwZShjaGFyIGFDaGFyLCBib29sZWFuIGVzY2FwZVNwYWNlKSB7Ci0KLQkJU3RyaW5nQnVmZmVyIG91dEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3dpdGNoIChhQ2hhcikgewotCQkJY2FzZSAnICcgOgotCQkJCWlmIChlc2NhcGVTcGFjZSkKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJyAnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xcJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXHQnIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ3QnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xuJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCduJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdccicgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgncicpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXGYnIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ2YnKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQgOgotCQkJCWlmICgoYUNoYXIgPCAweDAwMjApIHx8IChhQ2hhciA+IDB4MDA3ZSkpIHsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgndScpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiAxMikgJiAweEYpKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gOCkgJiAweEYpKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gNCkgJiAweEYpKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleChhQ2hhciAmIDB4RikpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJaWYgKHNwZWNpYWxTYXZlQ2hhcnMuaW5kZXhPZihhQ2hhcikgIT0gLTEpCi0JCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKGFDaGFyKTsKLQkJCQl9Ci0JCX0KLQotCQlyZXR1cm4gb3V0QnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhIG5pYmJsZSB0byBhIGhleCBjaGFyYWN0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gbmliYmxlCi0JICogICAgICAgICAgICB0aGUgbmliYmxlIHRvIGNvbnZlcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2hhciB0b0hleChpbnQgbmliYmxlKSB7Ci0JCXJldHVybiBoZXhEaWdpdFsobmliYmxlICYgMHhGKV07Ci0JfQotCi0JLyoqIEEgdGFibGUgb2YgaGV4IGRpZ2l0cyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhEaWdpdCA9IHsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRid9OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzcGVjaWFsU2F2ZUNoYXJzID0gIj06IFx0XHJcblxmIyEiOwotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc2OTgxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLkVuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0YzQwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0gYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NTcwZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JS0tIGpzZjpjb2RlQmVoaW5kIGxhbmd1YWdlPSJqYXZhIiBsb2NhdGlvbj0iL0phdmFTb3VyY2UvcGFnZWNvZGUvdGVzdC9LYWVydTUuamF2YSIgLS0lPjwlLS0gL2pzZjpjb2RlQmVoaW5kIC0tJT4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiIHByZWZpeD0iaCIlPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL3d3dy5pYm0uY29tL2pzZi9odG1sX2V4dGVuZGVkIiBwcmVmaXg9Imh4IiU+Ci08SFRNTD4KLTxIRUFEPgotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2NvcmUiIHByZWZpeD0iZiIgJT4KLTwlQCBwYWdlIAotbGFuZ3VhZ2U9ImphdmEiCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyIKLXBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIgotJT4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08TElOSyByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi90aGVtZS9zdHlsZXNoZWV0LmNzcyIKLQl0aXRsZT0iU3R5bGUiPgotPFRJVExFPmthZXJ1LmpzcDwvVElUTEU+Ci08L0hFQUQ+Ci08Zjp2aWV3PgotCTxCT0RZPgotCTxoeDpzY3JpcHRDb2xsZWN0b3IgaWQ9InNjcmlwdENvbGxlY3RvcjEiPgotCQk8aDpmb3JtIHN0eWxlQ2xhc3M9ImZvcm0iIGlkPSJmb3JtMSI+Ci0JCQmPs5RGCi0JCQmPs5RGCi0JCQmPs5RGCi0JCQk8aDpzZWxlY3RPbmVNZW51IGlkPSJDb21ibzMwIiBzdHlsZUNsYXNzPSJDb21ibzMwIiB0YWJpbmRleD0iMjYiPgotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0ij9iMlI7miPiPiiIgaXRlbUxhYmVsPSKP2IyUjuaI+I+KIiAvPgotCQkJPC9oOnNlbGVjdE9uZU1lbnU+Ci0JCQk8aDpzZWxlY3RPbmVNZW51IGlkPSJDb21ibzMxIiBzdHlsZUNsYXNzPSJDb21ibzMxIiB0YWJpbmRleD0iMjciPgotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0ia3lvdG8iIGl0ZW1MYWJlbD0ia3lvdG8iIC8+Ci0JCQk8L2g6c2VsZWN0T25lTWVudT4KLQkJPC9oOmZvcm0+Ci0JPC9oeDpzY3JpcHRDb2xsZWN0b3I+Ci0JPC9CT0RZPgotPC9mOnZpZXc+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MzcwNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPCUtLSBqc2Y6Y29kZUJlaGluZCBsYW5ndWFnZT0iamF2YSIgbG9jYXRpb249Ii9KYXZhU291cmNlL3BhZ2Vjb2RlL3Rlc3QvS2FlcnU1LmphdmEiIC0tJT48JS0tIC9qc2Y6Y29kZUJlaGluZCAtLSU+DQotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvaHRtbCIgcHJlZml4PSJoIiU+DQotPCVAdGFnbGliIHVyaT0iaHR0cDovL3d3dy5pYm0uY29tL2pzZi9odG1sX2V4dGVuZGVkIiBwcmVmaXg9Imh4IiU+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2NvcmUiIHByZWZpeD0iZiIgJT4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyINCi1wYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vdGhlbWUvc3R5bGVzaGVldC5jc3MiDQotCXRpdGxlPSJTdHlsZSI+DQotPFRJVExFPmthZXJ1LmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxmOnZpZXc+DQotCTxCT0RZPg0KLQk8aHg6c2NyaXB0Q29sbGVjdG9yIGlkPSJzY3JpcHRDb2xsZWN0b3IxIj4NCi0JCTxoOmZvcm0gc3R5bGVDbGFzcz0iZm9ybSIgaWQ9ImZvcm0xIj4NCi0JCQmPs5RGDQotCQkJj7OURg0KLQkJCY+zlEYNCi0JCQk8aDpzZWxlY3RPbmVNZW51IGlkPSJDb21ibzMwIiBzdHlsZUNsYXNzPSJDb21ibzMwIiB0YWJpbmRleD0iMjYiPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSKP2IyUjuaI+I+KIiBpdGVtTGFiZWw9Io/YjJSO5oj4j4oiIC8+DQotCQkJPC9oOnNlbGVjdE9uZU1lbnU+DQotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMSIgc3R5bGVDbGFzcz0iQ29tYm8zMSIgdGFiaW5kZXg9IjI3Ij4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0ia3lvdG8iIGl0ZW1MYWJlbD0ia3lvdG8iIC8+DQotCQkJPC9oOnNlbGVjdE9uZU1lbnU+DQotCQk8L2g6Zm9ybT4NCi0JPC9oeDpzY3JpcHRDb2xsZWN0b3I+DQotCTwvQk9EWT4NCi08L2Y6dmlldz4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjU2ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiRVVDLUpQIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAio82j0yCj0KW0pbelw6WvIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NDc2OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy0yMDIyLUpQIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAiGyRCI00jUxsoQiAbJEIjUCU0JTclQyUvGyhCIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyOWNkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIlNISUZUX0pJUyI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIoJsgnIggm+DU4NWg2KDTiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmMDZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1CT0RZIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCAiTVMgU2FucyBTZXJpZiI7DQotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCi0JYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQotfQ0KLQ0KLVREIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQl0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1USCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcjsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotSDEgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTRwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGNlbnRlcg0KLX0NCi0NCi1IMiB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcg0KLX0NCi0NCi1IMyB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IGl0YWxpYyAgDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzk5N2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhNGU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2M4YTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0NCi0NCi0gICAgQGNoYXJzZXQgIklTTy04ODU5LTYiOw0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE1MWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YzA1ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmVNYWxmb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmVNYWxmb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODUyN2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5NGZmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZU1hbGZvcm1lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZU1hbGZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGQ2NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ0VTVS04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNFU1UtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjdhNTQ0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ0VTVS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkNFU1UtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ09NUE9VTkRfVEVYVC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DT01QT1VORF9URVhULnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZmI3MTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DT01QT1VORF9URVhULnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkNPTVBPVU5EX1RFWFQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUwYjE2Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzOTc3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlOTI5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmExM2MwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjE4MDMwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjIzMTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IyMzEyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NDkyZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjIzMTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IyMzEyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQksueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYmJkNDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQksueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTAwNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTAwNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzdiYTc1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwMDYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwMDYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OTU4ZTkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTczZDNhYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDQzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzQwYzE5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2Uy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0NlMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RlMjBhNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0NlMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDg4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDg4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YTUxYTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA4OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA4OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwOTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwOTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhMzQ0My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDk4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDk4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzNjZWY0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTExMTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjkwYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTExNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMjQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMjQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU1OTZjNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTI0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMTI0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjcyYTVkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzNjMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzQy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2M0MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE4MTI0ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM2M0MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzcwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzcwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MzljODkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM3MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM3MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjOTBlOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzgxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWFmMjhhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzODMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzg2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzg2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZDk5Y2UuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM4NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTMzNzIyQy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMzM3MjJDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNTkyZWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMzM3MjJDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0zMzcyMkMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS00MzcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTQzNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA0ZWYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTQzNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tNDM3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzM3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03MzcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI4NTM1Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03MzcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTczNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTc3NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYzk0NDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS03NzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04MDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTgwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDI4ZmNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTgwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4N2Q5MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTRkNWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDM1NDdjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhNGI1Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjBjOTEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTVmMTRhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5YjI1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiODIyOTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkxMGVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJhNzExNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNjczNTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzNlNTc3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0Uy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0Uy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODNhZWI4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NFMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NFMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDdkNWRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmYTI2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZjY3NTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzM4MDFhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZlZTBjMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg3NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODc0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzI1MGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODc0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NzQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04OTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg5Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWIxNTk2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg5Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODk3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0MTdlMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTkyMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNmI4MjYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05MjIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MzIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkzMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQ2ZmUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkzMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTMyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzZTViZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0MkMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0MkMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzZTM4ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDJDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDJDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQxNDI2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0M0MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0M0MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRhOTFlYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDNDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDNDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkYTIyMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNWFjZGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDlDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDlDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjQ1YzYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5Qy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQ5QyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNTY2YjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTRDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTRDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNjVjMTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTU0Qy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTU0QyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04tR0IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04tR0IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2YjU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLUdCLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUNOLUdCIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2YzZGEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjdjMTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODA0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYWI4My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNzQ5Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlZDYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzODk5Y2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNmZkNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGY1N2Q4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4NWMyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0yIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDk0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjk5MzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg2YmY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS01Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NDRiZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNlMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNlMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5YWQ5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTZTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTZTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlOTVkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGQzMDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgzOTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS05Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyMzNkOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTMDIwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjA4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkOTkzNGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjA4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJUzAyMDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIxMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDI5ZjYzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIxMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVMwMjEyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1Kb2hhYi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1Kb2hhYi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTA3Y2NiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSm9oYWIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSm9oYWIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwNDVlNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUlUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SVS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2NkZGEwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SVS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVJVIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1VLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDhmM2MuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1VIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LU0M1NjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtTQzU2MDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg1OTQ3OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtTQzU2MDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS1NDNTYwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQXJhYmljLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0FyYWJpYy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmUwMjdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQXJhYmljLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0FyYWJpYyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ2VudHJhbEV1cm9wZS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDZW50cmFsRXVyb3BlLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjBkNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDZW50cmFsRXVyb3BlLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0NlbnRyYWxFdXJvcGUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0Nyb2F0aWFuLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0Nyb2F0aWFuLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MGFiM2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDcm9hdGlhbi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNDcm9hdGlhbiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3lyaWxsaWMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3lyaWxsaWMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBlM2M5Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0N5cmlsbGljLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0N5cmlsbGljIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNHcmVlay54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNHcmVlay54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGZhZDYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjR3JlZWsueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjR3JlZWsiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0hlYnJldy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNIZWJyZXcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiNTQ5Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0hlYnJldy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNIZWJyZXciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0ljZWxhbmQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSWNlbGFuZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGFkNDdkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSWNlbGFuZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNJY2VsYW5kIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFmMGQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW4ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjUm9tYW4iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuaWEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW5pYS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjZhNGI5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW5pYS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNSb21hbmlhIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUaGFpLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1RoYWkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZGFjZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1RoYWkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjVGhhaSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVHVya2lzaC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUdXJraXNoLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZDY4MjYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUdXJraXNoLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1R1cmtpc2giPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1VrcmFpbmUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVWtyYWluZS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGJjOTUzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVWtyYWluZS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNVa3JhaW5lIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1QVENQMTU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVBUQ1AxNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3NjdiYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVBUQ1AxNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iUFRDUDE1NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI0ZTYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDMyYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlRJUy02MjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWE4YjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVUy1BU0NJSSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjlkYzUyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNThjMGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQyZTBkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTBkNTA4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YTliZjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBhN2Y4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyTEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2ZjNiYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOEoueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLThKLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjY1OWQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOEoueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLThKIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVCaWcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlQmlnLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MWI3MGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVCaWcueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlTGl0dGxlLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUxpdHRsZS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTRiOWJjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlTGl0dGxlLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LWhwLXJvbWFuOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1ocC1yb21hbjgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU5ODMwNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LWhwLXJvbWFuOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJocC1yb21hbjgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkNjU2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYzBjMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYzU4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllNmFlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNjI4Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NzI3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMDA0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NlMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2Uy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTg3MjY0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTZTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTVhNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzVlOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTg3NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTg3NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmMzZDEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy04NzQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy04NzQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTMyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTMyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZjI2YjUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTkzMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg3OWZjZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTM2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtOTM2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmQzNDgxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YzNiYzYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTk1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NGRkZGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKKysrIC9kZXYvbnVsbApAQCAtMSw1MjUgKzAsMCBAQAotMTMxDQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDRVNVLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDT01QT1VORF9URVhUIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMjMxMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gImhwLXJvbWFuOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTAwNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NlMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwODgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwOTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMjQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjNDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzcwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzg2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0zMzcyMkMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTQzNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzM3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03NzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTgwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg3NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODk3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTMyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MkMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzQyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OUMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTU0QyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTi1HQiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjAxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIxMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKb2hhYiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SVSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS1NDNTYwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNBcmFiaWMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ2VudHJhbEV1cm9wZSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDcm9hdGlhbiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDeXJpbGxpYyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNHcmVlayI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNIZWJyZXciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSWNlbGFuZCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbmlhIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1RoYWkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1R1cmtpc2giOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1VrcmFpbmUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlBUQ1AxNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04SiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTZTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy04NzQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTMyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVCaWciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUxpdHRsZSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTAzMjRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNS1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTM5Nzc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU5MjliLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTEzYzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjE4MDMwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQksueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJiYmQ0Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQksueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjdjMTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODA0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYWI4My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWQ2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2ZmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4NWMyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDk0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjk5MzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS00Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg2YmY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NDRiZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTk1ZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS03Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkMzAxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MzkzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2E0MmQ4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3MGI3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMTItMTk5MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDQ1ZTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjRlNjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMzJhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlRJUy02MjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlYThiMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVUy1BU0NJSSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzU1MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1OGMwYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDJlMGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjZmM2JiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkNjU2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYzBjMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYzU4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllNmFlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNjI4Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NzI3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMDA0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5NWE2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjNWU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGNmZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0zMWoiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkYzY0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1DTiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDhlMzdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLVRXIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMDdmZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1KSVMwMjA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWFmODdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1Kb2hhYiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgwNmIzMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtTVM5NTAtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0M2RmYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LWV1Yy1qcC1saW51eCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJmMTBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtbXN3aW4tOTM2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGM5M2Y0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk0OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZTUzYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNjhmMjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLTQ4DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1LUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMTItMTk5MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMzFqIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtZXVjLWpwLWxpbnV4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLVRXIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSklTMDIwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpvaGFiIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtTVM5NTAtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1tc3dpbi05MzYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk0OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMDMyNGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1LUhLU0NTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZlNWE1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Mzk3NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTkyOWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMTNjMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCMTgwMzAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQksueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCSy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmJiZDQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCSy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQksiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2MxNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjc4MDRhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBhYjgzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlZDYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDZmZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTg1YzIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0yIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM0OTQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmOTkzNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODZiZjkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS01Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ0NGJmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlOTVkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGQzMDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgzOTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYTQyZDguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJU19YMDIwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjcwYjc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJU19YMDIxMi0xOTkwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwNDVlNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNGU2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iU2hpZnRfSklTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQzMmE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVElTLTYyMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2VhOGIwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNTUzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzU4YzBiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMmUwZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmYzYmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQ2NTZmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmJjMGMzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGFjNTg1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWU2YWVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA2MjhmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjY3MjcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUwMDQ5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDk1YTYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM1ZTlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4Y2ZkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTMxaiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRjNjQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OGUzN2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1FVUMtVFciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQwN2ZkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUpJUzAyMDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYWY4N2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUpvaGFiIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODA2YjMxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1NUzk1MC1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjQzZGZiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtZXVjLWpwLWxpbnV4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYmYxMGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1tc3dpbi05MzYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YzkzZjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LXdpbmRvd3MtOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDhlNTNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2OGYyNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotNDgNCi0JcHVibGljIHZvaWQgdGVzdEZpbGUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTX1gwMjAxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIxMi0xOTkwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2TEUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0zMWoiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1FVUMtQ04iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1ldWMtanAtbGludXgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1FVUMtVFciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1KSVMwMjA4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSm9oYWIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1NUzk1MC1IS1NDUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LW1zd2luLTkzNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtd2luZG93cy05NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4YjVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGNhNjBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFdpbk5UOyBVKSBbTmV0c2NhcGVdIj4KLTxNRVRBIGNvbnRlbnQ9InRleHQvY3NzIiBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiPgotPHRpdGxlPnNtb2tlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPiBTbW9rZSBUZXN0IC0gWE1MIEVkaXRvcjwvaDI+Ci1MYXN0IHVwZGF0ZWQ6IEp1bmUgMjUsIDIwMDEKLTxQPlRoaXMgU21va2UgVGVzdCBwcmltYXJpbHkgZm9jdXNlcyBvbiB0aGUgUlRQIHBvcnRpb24gb2YgdGhlIFhNTCAKLUVkaXRpb3IsIHdoaWNoIGlzIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci4gSXQgYWxzbyBwZXJmb3JtcyAKLXNvbWUgaW50ZWdyYXRpb24gdGVzdGluZy4gRm9yIGV4YW1wbGUsIGl0IHRlc3RzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIAotdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzIG9mIHRoZSBYTUwgRWRpdG9yLCBhcyB3ZWxsIGFzIHdpdGggdGhlIAotT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGZpbGVzIGNyZWF0ZWQgCi10aHJvdWdoIHRoZSBYTUwgRmlsZSB3aXphcmQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFhNTCBDYXRhbG9nIGFyZSAKLXN1cHBvcnRlZCBhcyBleHBlY3RlZC48L1A+Ci08UD48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+Tk9URTwvQj46IFhNTCBmaWxlcyBhcmUgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB0aGF0IHRoaW5ncyBhcHBlYXIgCi1leGFjdGx5IGFzIG5vdGVkLjwvRk9OVD48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2V0dXA8L0ZPTlQ+PC9IMj4KLTxQPjxCPlN0YXJ0aW5nIENsZWFuPC9CPjwvUD4KLTx1bD4KLSAgICA8bGk+IERlbGV0ZSBhbnkgZXhpc3Rpbmcgd29ya2JlbmNoPC9saT4KLSAgICA8bGk+IFN0YXJ0IEVjbGlwc2U8L2xpPgotPC91bD4KLTxQPjxCPk9wZW4gYW4gWE1MIFBlcnNwZWN0aXZlPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5PcGVuIFBlcnNwZWN0aXZlPC9CPiB0b29sYmFyIGJ1dHRvbiBpbiB0aGUgdXBwZXIgbGVmdDwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5PdGhlci4uLjwvQj48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+WE1MPC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIHZpZXdzIGFwcGVhciBpbiB0aGUgWE1MIHBlcnNwZWN0aXZlOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlIGxvY2F0aW9uIG9mIHRoZSBPdXRsaW5lIGFuZCBOYXZpZ2F0b3Igdmlld3MgYXJlIHJldmVyc2VkIGZyb20gdGhlIFJlc291cmNlIGFuZCBXZWIgcGVyc3BlY3RpdmVzLiBEbyB3ZSB3YW50IHRvIHRyeSB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgcGVyc3BlY3RpdmVzPyBBbHNvLCBJIG9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2NCB0byBlbmFibGUgZWFzeSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgdmlldyBmcm9tIHdpdGhpbiB0aGUgWE1MIHBlcnNwZWN0aXZlLiBJZiB0aGlzIHZpZXcgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIFBlcnNwZWN0aXZlIGJlY2F1c2UgaXRzIHVzZSBpcyBsaW1pdGVkLCB0aGVuIHJlY29tbWVuZCB3ZSBhdCBsZWFzdCBwcm92aWRlIGEgU2hvdyBvciBIaWRlIFByb3BlcnRpZXMgVmlldyB0b29sYmFyIGJ1dHRvbiAoc2ltaWxhciB0byB0aGUgYnV0dG9ucyB0aGF0IFBhZ2UgRGVzaWduZXIgcHJvdmlkZXMpLjwvRk9OVD48L0xJPgotPC9VTD4KLTxQPjxCPlByb2plY3QgQ3JlYXRpb24gYW5kIEZpbGUgSW1wb3J0czxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPkNyZWF0ZSBhIFByb2plY3QsIDxCPlhNTFRlc3QyPC9CPiA8L0xJPgotICAgIDxMST5JbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlcyBpbnRvIHRoaXMgcHJvamVjdDoKLSAgICA8VUw+Ci0gICAgICAgIDxMST48Qj5QdXJjaGFzZU9yZGVyLnhzZDwvQj48L0xJPgotICAgICAgICA8TEk+PEI+SW52b2ljZS5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEI+Sm9iRGVzYy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+V2lyZWxlc3MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPjwvTEk+Ci0gICAgPExJPjxCPkFUUy5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEZPTlQgY29sb3I9IiNmZjAwMDAiPmFueSBvdGhlcnM/PC9GT05UPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICBDcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5DcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIHNjcmF0Y2g8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycyBhbmQgdGhlIEZpbmlzaCBidXR0b24gaXMgZGlzYWJsZWQuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5ERUZFQ1Q6PC9CPiAxNzc2NjAgLSBYTUwgRmlsZSB3aXphcmQ6IGRpc2FibGUgRmluaXNoIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZTwvRk9OVD4uPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbVNjcmF0Y2g8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nOgotICAgIDxVTD4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBhcHBlYXJzIGluIHRoZSBOYXZpZ2F0b3Igdmlldy48L0xJPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGlzIG9wZW4gdG8gdGhlIERlc2lnbiBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yIGFuZCBoYXMgZm9jdXMuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gdGFiIGFwcGVhcnMgYmVmb3JlIHRoZSBTb3VyY2UgdGFiIGluIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZSBzaG93IG5vIGNvbnRlbnQuPC9MST4KLSAgICAgICAgPExJPnRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzIHNob3cgbm90aGluZy48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U3dpdGNoIHRvIHRoZSBTb3VyY2UgcGFnZS4gVmVyaWZ5IHRoZSBjdXJzb3IgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlJpZ2h0IG1vdXNlIGJ1dHRvbiAyIGFuZCB2ZXJpZnkgYSBwb3B1cCBtZW51IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FsIGxpc3QgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OzwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyBpcyBpbnNlcnRlZCBhbmQgYXBwZWFycyBzeW50YXggaGlnaGxpZ2h0ZWQgYW5kIGFuIGVudHJ5IGFwcGVhcnMgZm9yIGl0IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIFhNTCBkZWNsYXJhdGlvbiBhbmQgdmVyaWZ5IDxCPnZlcnNpb248L0I+IGFuZCA8Qj5lbmNvZGluZzwvQj4gYXBwZWFyIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGlzIHVzZWQgdG8gd29yaywgYnV0IG5vdyBpdCdzIG5vdCB3b3JraW5nLiBPcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjIgLSBYTUwgZGVjbGFyYXRpb24gYXR0cmlidXRlcyBub3QgYXBwZWFyaW5nIGluIFByb3BlcnRpZXMgdmlldy4gSWYgd2UgZGVjaWRlIHRvIG5vdCB0cmVhdCB2ZXJzaW9uIGFuZCBlbmNvZGluZyBhcyBhdHRyaWJ1dGVzLCB0aGVuIHRoaXMgc3RlcCBzaG91bGQgYmUgcmVtb3ZlZC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+Q29udGludWUgdG8gdGhlIG5leHQgc2VjdGlvbi48L0xJPgotPC9VTD4KLTxQPjxCPklkZW50aWZ5IGEgbG9jYWwgRFREICg8L0I+dmVyaWZpZXMgYSBEVEQgaXMgaW1tZWRpYXRlbHkgcmVjb2duaXplZDsgaW4gdGhlIHBhc3QsIHlvdSBoYWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgV29ya2JlbmNoPEI+KTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlR5cGUgdGhlIGZvbGxvd2luZyBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uIGluIDxCPmZyb21TY3JhdGNoLnhtbDwvQj46IDxCPiZsdDshRE9DVFlQRSBJbnZvaWNlIFNZU1RFTSAmcXVvdDtJbnZvaWNlLmR0ZCZxdW90OyZndDs8L0I+LiBUaGUgdGV4dCBzaG91bGQgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGFzIHlvdSB0eXBlIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBnZXQgYWRkZWQgdG8gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi5WZXJpZnkgb25seSA8Qj5JbnZvaWNlPC9CPiBhbmQgPEI+Y29tbWVudDwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0LiAoPEI+Tk9URTwvQj46IDxCPkludm9pY2U8L0I+IGlzIHRoZSByb290IGVsZW1lbnQpPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SW52b2ljZTwvQj4gYXMgYSBzZWxlY3Rpb24uIFZlcmlmeSB0aGUgSW52b2ljZSBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGluc2VydGVkIGludG8gdGhlIFNvdXJjZSBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJldHdlZW4gdGhlbS4gQW4gZWxlbWVudCBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBJbnZvaWNlIGluIHRoZSBPdXRsaW5lIHZpZXcuICg8Qj5OT1RFPC9CPjogWE1MIGlzIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgeW91IHNlZSBJbnZvaWNlIGFuZCBub3QgaW52b2ljZSBldmVyeXdoZXJlKS48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhcnMgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGluIHRoZSBvcmRlciBzaG93bik6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JdGVtIGlzIGFwcGVhcmluZyBiZWZvcmUgSGVhZGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gc29ydCB0aGUgbGlzdCBhbHBoYWJldGljYWxseS4gVGhhdCBtZWFucyB0aGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGQgdGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCBkZWZpbml0aW9uIGZvciBJbnZvaWNlIGluIHRoZSBEVEQuIEluIG90aGVyIHdvcmRzLCB1c2VycyBzaG91bGQgc2VlIGNoaWxkIHRhZ3MgbGlzdGVkIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jaW5nIG9yZGVyIGluIHRoZSBEVEQsIHdoaWNoIHRoZSBEVEQgRWRpdG9yIHNob3dzLiBWaW9sYXRpbmcgdGhlIHNlcXVlbmNpbmcgb3JkZXIgY2F1c2VzIGFuIFhNTCBmaWxlIHRvIGJlY29tZSBub3QgdmFsaWQuIDxCPkRFRkVDVDo8L0I+IDE3NzY2ODwvRk9OVD4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5IZWFkZXI8L0xJPgotICAgICAgICA8TEk+SXRlbTwvTEk+Ci0gICAgICAgIDxMST5jb21tZW50PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkhlYWRlcjwvQj4gYXMgYSBzZWxlY3Rpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2Ugbm93IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJlZm9yZSA8Qj5pbnZvaWNlTnVtYmVyPC9CPjo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI4MyIgc3JjPSJpZGVudGlmeURURC5qcGciIHdpZHRoPSI0ODUiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5IZWFkZXI8L0I+IGFwcGVhcnMgbmVzdGVkIHVuZGVyIDxCPkludm9pY2U8L0I+IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgPExJPkNsb3NlIHRoaXMgZmlsZSwgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB3aGVuIHByb21wdGVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuPC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IHRoZSBjaGFuZ2VzIHdlcmUgc2F2ZWQuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlLiBWZXJpZnkgbm8gc2F2ZSBjaGFuZ2VzIHByb21wdCBhcHBlYXJzLjwvTEk+Ci08L1VMPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYW4gaW1wb3J0ZWQgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5GaWxlLSZndDtOZXctJmd0O1hNTCBGaWxlPC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGUgZnJvbSBhIERURCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tTG9jYWxEVEQ8L0I+PC9MST4KLSAgICAgICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2U8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5JbXBvcnQgRmlsZTwvQj4gYnV0dG9uCi0gICAgPFVMPgotICAgICAgICA8TEk+VXNlIHRoZSBCcm93c2UgYnV0dG9uIHRvIGZpbmQgPEI+dGVzdGNhc2UuZHRkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXIuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhbHJlYWR5IGZpbGxlZCBpbi4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+IHRvIGNsb3NlIHRoZSBJbXBvcnQgRmlsZSB3aXphcmQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+RXhwYW5kIDxCPlhNTHRlc3QyPC9CPiBhbmQgdGhlbiBzZWxlY3QgPEI+dGVzdGNhc2UuZHRkPC9CPi4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldhcyBleHBlY3RpbmcgdG8gc2VlIHRoZSBpbXBvcnRlZCBmaWxlIHNlbGVjdGVkIGluIHRoZSBXb3JrYmVuY2ggZmlsZXMgbGlzdCwgYnV0IGl0IHdhc24ndC4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZS48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+dGVzdGNhc2U8L0I+IGFzIHRoZSBSb290IEVsZW1lbnQuPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSByZXF1aXJlZCBjb250ZW50IG9ubHk8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj50ZXN0Y2FzZS5kdGQ8L0I+IGFwcGVhcnMgYXMgdGhlIFN5c3RlbSBJZC48L0xJPgotICAgIDxMST5TZWxlY3QgRmluaXNoLiBWZXJpZnkgPEI+ZnJvbUxvY2FsRFRELnhtbDwvQj4gYXBwZWFycyBpbiB0aGUgWE1MIEVkaXRvci4gVmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5MCIgc3JjPSJpbXBvcnREVEQuanBnIiB3aWR0aD0iNjYwIj48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTciIHNyYz0ib3V0bGluZTEuanBnIiB3aWR0aD0iNjU1Ij48L0xJPgotICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5oZWFkZXI8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzIGFwcGVhciBpbiB0aGUgCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHZpZXc6Ci0gICAgICAgIDxUQUJMRSBib3JkZXI9IjEiPgotICAgICAgICAgICAgPFRCT0RZPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPjxCPlByb3BlcnR5PC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPjxCPlZhbHVlPC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5jYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPndlYnRvb2w8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+bnVtYmVyPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+aWR2YWx1ZTA8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3RhdGU8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5BY2Nlc3NhYmlsaXR5PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YlN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgPC9UQk9EWT4KLSAgICAgICAgPC9UQUJMRT4KLSAgICAgICAgPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj50ZXN0QnVja2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgYSBwcm9wZXJ0eSBvZiA8Qj50eXBlPC9CPgotICAgICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDxCPkNvbXBvbmVudFRlc3Q8L0I+LgotICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4gCi0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGUgdmFsdWVzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgdXNlIGNvbnRlbnQgYXNzaXN0IHRvIGluc2VydCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSA8Qj5jYXRlZ29yeTwvQj4gYXR0cmlidXRlIGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgPEI+c3BhY2U8L0I+IGFuZCB0aGVuIGhpdCBwcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IG9ubHkgPEI+c3RhdGU8L0I+IGFuZCA8Qj5zdWJTdWJDYXRlZ29yeTwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0IChjb250ZW50IGFzc2lzdCBpcyBzbWFydCBlbm91Z2ggbm90IHRvIGxpc3QgYW55IGF0dHJpYnV0ZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBzdGFydCB0YWcgc2luY2UgYXR0cmlidXRlcyBjYW4gb25seSBhcHBlYXIgb25jZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+c3RhdGU8L0I+LjwvTEk+ICAgCi0gICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnN0YXRlPSJVbmRlckNvbnN0cnVjdGlvbiI8L0I+IGlzIGluc2VydGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoY29udGVudCBhc3Npc3QgYXV0b21hdGljYWxseSBpbnNlcnRzIGFueSBkZWZhdWx0IHZhbHVlcy4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgUHJvcGVydGllcyB2aWV3LCB1cGRhdGUgdGhlIDxCPnN0YXRlPC9CPiBhdHRyaWJ1dGUgdmFsdWUgdG8gIlVuZGVyUmV2aWV3IiAKLSAgICAgICAgICAgIChhIHB1bGxkb3duIGxpc3Qgb2YgdmFsdWVzIHNob3VsZCBiZSBhdmFpbGFibGUpLiBWZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQKLSAgICAgICAgICAgIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcy4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIDxCPmhlYWRlcjwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIEF0dHJpYnV0ZS0+c3ViU3ViQ2F0ZWdvcnk8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUgKGl0J3Mgc21hcnQKLSAgICAgICAgICAgICAgICBlbm91Z2ggdG8ga25vdyB3aGljaCBhdHRyaWJ1dGVzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IC4uLiBsaWtlIGNvbnRlbnQgCi0gICAgICAgICAgICAgICAgYXNzaXN0LiBDb29sISkuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIGluIGEgdmFsdWUgb2YgPEI+S2V5Ym9hcmQgc3VwcG9ydDwvQj4uPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXc8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSB0aGF0IHJlZmVyZW5jZXMgYSByZW1vdGUgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+T3BlbiB0aGUgPEI+V2lyZWxlc3MueG1sPC9CPiBmaWxlLjwvTEk+Ci0gICAgPExJPlZlcmlmeSBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIFNvdXJjZSBwYWdlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjIzOSIgc3JjPSJ3aXJlbGVzcy5qcGciIHdpZHRoPSI2NTYiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgCi0gICAgICAgIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIxODkiIHNyYz0ib3V0bGluZTIuanBnIiB3aWR0aD0iNjU2Ij48L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGNvbnRlbnQgYXNzaXN0IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5EZWZlY3QgMTc2Mzc5IChpbiB2ZXJpZnkgc3RhdGUsIGJ1dCBzdGlsbCBub3Qgd29ya2luZyk8L0ZPTlQ+LjwvTEk+Ci0gICAgICAgIDxVTD4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCBvbiB0aGUgbmV3IGxpbmUuPC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKGluIHRoZSBvcmRlciBzaG93bik6IAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5oZWFkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGVtcGxhdGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jYXJkPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlR5cGUgYSBzcGFjZSBiZWZvcmUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb24gdGhlIGNhcmQgc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKG5vdCBuZWNlc3NhcmlseSBpbiB0aGUKLSAgICAgICAgICAgICAgIG9yZGVyIHNob3duKS4gCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRpdGxlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmV3Y29udGV4dDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9yZGVyZWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST54bWw6bGFuZzwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9uZW50ZXJiYWNrd2FyZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9udGltZXI8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnBvc3Q8L0I+IGFuZCA8Qj5nZXQ8L0I+IGFwcGVhciBhcyBwcm9wb3NhbHMuPC9MST4KLSAgICAgICAgPC9VTD4KLSAgICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+Y2FyZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotICAgICAgICAgICAgPEI+Y2FyZDwvQj4gdGFnIGFwcGVhciBhcyBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE5vIHZhbHVlcyBzaG91bGQgYXBwZWFyIGZvciB0aGVzZSBwcm9wZXJ0aWVzLjwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj5wb3N0ZmllbGQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnBvc3RmaWVsZDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywKLSAgICAgICAgICAgIG5vbmUgb2Ygd2hpY2ggc2hvdWxkIGhhdmUgYSB2YWx1ZToKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmFtZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnZhbHVlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgZWxlbWVudHMvdGFncykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNvcHkgYW5kIHBhc3RlIHRoZSA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Tm90aWNlIHRoZSByYW5nZSBvZiB0aGUgPEI+Y2FyZDwvQj4gdGFnIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gYXJlYS48L0xJPgotICAgICAgICAgICAgPExJPkNvcHkgdGhpcyByYW5nZSBvZiBsaW5lcyB1c2luZyB0aGUgPEI+RWRpdC0+Q29weTwvQj4gcHVsbGRvd24gbWVudSBzZWxlY3Rpb24uPC9MST4KLSAgICAgICAgICAgIDxMST5QYXN0ZSBhZnRlciB0aGUgPEI+Y2FyZDwvQj4gZW5kIHRhZyB1c2luZyBDdHJsK1YuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIHdlcmUgcGFzdGVkIG4gdGhlIFNvdXJjZSBwYWdlLgotICAgICAgICAgICAgICAgIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzIAotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW5vdGhlciA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj53bWw8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQ2hpbGQtPmNhcmQ8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS4gTk9URTogaXQgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkIG91dAotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBvcmlnaW5hbCBjYXJkIHRhZywgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgdGhhdCBhIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuIDwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4gCi08L1VMPgotPFA+PEI+Q3JlYXRlIGFuZCBWYWxpZGF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgc2NoZW1hPC9CPjxCUj4KLQotPFA+KHRoZXNlIHN0ZXBzIGFyZSB0YWtlbiBmcm9tIHRoZSAnRGVzaWduJyBzbW9rZSB0ZXN0LCBleGNlcHQgdGhlIFNvdXJjZSBQYWdlIGlzIHRoZSBmb2N1cyk8L1A+Ci08dWw+Ci08bGk+Ci1SaWdodCBtb3VzZSBidXR0b24gMiBvbiB0aGUgUHVyY2hhc2VPcmRlci54c2QgYW5kIHNlbGVjdCA8Yj5DcmVhdGUgWE1MCi1GaWxlPC9iPi48L2xpPgotCi08bGk+Ci1BY2NlcHQgdGhlIGRlZmF1bHQgZmlsZSBuYW1lcy48L2xpPgotCi08bGk+Ci1JbiB0aGUgU2VsZWN0IFJvb3QgRWxlbWVudCBwYWdlLCBjaG9vc2UgPGI+cHVyY2hhc2VPcmRlcjwvYj4gYXMgcm9vdCBlbGVtZW50LjwvbGk+Ci0KLTxsaT4KLUNob29zZSA8Yj5DcmVhdGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNvbnRlbnQ8L2I+IHRvIGNyZWF0ZSBhIG1pbmltYWwKLWRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLUVudGVyIDxiPnBvPC9iPiBhcyB0aGUgbmFtZXNwYWNlIHByZWZpeC48L2xpPgotCi08bGk+T24gRmluaXNoLCBhIFB1cmNoYXNlT3JkZXIueG1sIGlzIGNyZWF0ZWQgYW5kIHRoZSBYTUwgRWRpdG9yIGlzIG9wZW5lZC4gKFNlbGVjdCBTb3VyY2UgUGFnZSBpZiBub3QgYWxyZWFkeSB0aGVyZS4pPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgc2hvdWxkIGJlIGludmFsaWQuPC9saT4KLQotPGxpPgotRG91YmxlIGNsaWNrIG9uIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBzaG91bGQgYmUgcG9zaXRpb25lZCB0byB0aGUgbGluZQotaW4gZXJyb3IsIGkuZS4gdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZS4gSXQgaXMgaW52YWxpZCBiZWNhdXNlIHRoZQotdmFsdWUgaXMgbm90IHNldCB0byBtYXRjaCB0aGUgWE1MIHNjaGVtYSBwYXR0ZXJuIGZhY2V0ICJkMy1bQS1aXXsyfSIgKDMKLWRpZ2l0cyBmb2xsb3dlZCBieSAyIGNoYXJhY3RlcnMpLjwvbGk+Ci0KLTxsaT5JbiB0aGUgU291cmNlIFZpZXcsIGxvY2F0ZSB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlIHVuZGVyIGVsZW1lbnQgaXRlbS4KLUVudGVyIHRoZSB2YWx1ZSAzMzMtQUIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC9VTD4KLTxVTD4KLSAgPExJPgotICA8SFI+PC9MST4KLSAgPGxpPlBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlICZsdDtpdGVtcyZndDsgdGFnIGFuZCBiZXN1cmUgIml0ZW0iIGlzIAotICBsaXN0ZWQgaW4gdGhlIGNvbnRlbnQgYXNzaXN0IGxpc3QuIDwvbGk+Ci08bGk+UmVuYW1lIHRoZSBwdXJjaGFzZU9yZGVyLnhzZCB0bywgc2F5LCBwdXJjaGFzZU9yZGVySE9MRC54c2Q8L2xpPgotPGxpPlZlcmlmeSB0aGF0IGNvbnRlbnQgYXNzaXN0IHN0aWxsIGdpdmVzIHlvdSAiaXRlbSIgYXMgYWJvdmUuPC9saT4KLTxsaT5Ob3cgc2VsZWN0IHRoZSAiUmVsb2FkIERlcGVuZGFuY2llcyIgYnV0dG9uLjwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgbm93IGNvbnRlbnQgYXNzaXN0IG5vIGxvbmdlciBsaXN0cyBhbnkgaXRlbXMgb3RoZXIgCi10aGF0IHRoZSBtYWNybyAiY29tbWVudCIuPC9saT4KLTxsaT5SZXBlYXQgbWFraW5nIHB1cmNoYXNlT3JkZXIueHNkIHdvcmthYmxlIGFnYWluLjwvbGk+Ci08L3VsPgotPFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48L1A+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIGZvciBhIHNoaXBwZWQgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPgotPEJSPgotW3B1dCBpbiBvcHRpb25hbCBzZWN0aW9uIC4uIHRoaXMgaXNuJ3QgYSBjdXN0b21lciBzY2VuZXJpb108QlI+Ci1UbyB2ZXJpZnkgdGhhdCBzaGlwcGVkIERURHMgYXJlIHdvcmtpbmc6PEJSPgotPFVMPgotPExJPgotVXNlIGEgd2ViIHByb2plY3Qgd2l0aCBhIHN0YW5kYXJkIHdlYi54bWwgZmlsZSBpbiBpdC4gQmUgc3VyZSAKLXRoZXJlIGlzIG5vIHdlYi1hcHBfMl8yLmR0ZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIEluIHRoZSB3ZWIueG1sIGZpbGUgCi1pdHNlbGYsIG1hbmdsZSB0aGUgd2ViLWFwcF8yXzIuZHRkIGZpbGVuYW1lIGluIHRoZSBzeXN0ZW0gaWQgYSBsaXR0bGUsIHN1Y2ggYXMgCi1jaGFuZ2UgaXQgdG8geGViLWFwcF8yXzIuZHRkIHRvIGJlIHN1cmUgaXQgY2FuJ3QgYmUgZm91bmQgdmlhIHRoZQotbm9ybWFsIGh0dHAgbWV0aG9kIChUaGlzIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgZm9yIHRoZSBmdW50aW9uIHRvIHdvcmssCi1pdHMganVzdCB0byBiZSBzdXJlIG9ubHkgdGhlIGNhdGFsb2cgZnVuY3Rpb24gaXMgaW4gZWZmZWN0KS4KLTwvTEk+Ci08TEk+Ci1HbyB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZSwgYW5kIG9wZW4gdGhlIFhNTCBDYXRhbG9nLiBWZXJpZnkgdGhlcmUgCi1pcyBhbiBlbnRyeSBmb3IgLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOLgotPC9MST4KLTxMST4KLU9uY2UgYWxsIHRoZSBwcmVwIHdvcmsgaXMgZG9uZSAoZmlsZXMgZGVsZXRlZCwgdGV4dCBtb2RpZmllZCksIHlvdSBzaG91bGQgCi1leGl0IGFuZCByZXN0YXJ0IEVjbGlwc2UgdG8gYmUgc3VyZSB5b3UgaGF2ZSBhIGZyZXNoIHN0YXJ0LgotPC9MST4KLTxMST4KLU9wZW4gdGhlIHdlYi54bWwgZmlsZSBhbmQgYmUgc3VyZSB0aGF0IGNvbnRlbnQgYXNzaXN0IHdvcmtzIGZvciB0aGF0IGZpbGUuCi1Gb3IgZXhhbXBsZSwgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgJmx0Oy9kaXNwbGF5LW5hbWUmZ3Q7IHRhZywgY3RybC1zcGFjZSAKLXNob3VsZCBwcm92aWRlIGEgbG9uZyBsaXN0IG9mIGVsZW1lbnRzLCBzdGFydGluZyB3aXRoIHNlcnZsZXQsIHNlcnZsZXQtbWFwcGluZywgZXRjLgotVGhpcyBpbmRpY2F0ZXMgdGhlIHNoaXBwZWQgRFREIGZ1bmN0aW9uIGlzIHdvcmtpbmcgYW5kIGNvbmZpZ3VyZWQgCi1jb3JyZWN0bHkgKGF0IGxlYXN0IGZvciB0aGUgd2ViLnhtbCBmaWxlKS4KLTwvTEk+Ci08L1VMPgotPC9QPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBuZXcgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPGI+VGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSAnRGVzaWduJyBTbW9rZSBUZXN0OiBYTUwgQ2F0YWxvZyBmb3IgWE1MIFNjaGVtYTwvYj4KLTx1bD4KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQ8L2xpPgotCi08bGk+Ci1DcmVhdGUgYSBuZXcgcHJvamVjdCwgWE1MVGVzdDI8L2xpPgotCi08bGk+Ci1Nb3ZlIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBpbnRvIFhNTFRlc3QyLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCi12YWxpZC4gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGdpdmUgeW91IGEgaGludCB0aGF0IHRoZSBmaWxlIFB1cmNoYXNlT3JkZXIueHNkCi1jYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIFdpbmRvdy0+UHJlZmVyZW5jZXMgYW5kIHNlbGVjdCB0aGUgWE1MIENhdGFsb2cuPC9saT4KLQotPGxpPgotRW50ZXIgdGhlIHBhaXIgPGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSBmOlxlY2xpcHNlXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPjwvbGk+Ci0KLTxicj5PciBhbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5Ci1vZiB0aGUgd29ya2JlbmNoIGFzIGZvbGxvd3M6Ci08YnI+PGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSAuXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPgotPGxpPgotQ2xpY2sgb24gdGhlIFJlbG9hZCBidXR0b24gdG8gcmVsb2FkIHRoZSBjYXRhbG9nIHNldHRpbmdzLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvdWw+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgU2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGU8L0I+PEJSPgotKE5PVEU6IHRoZSA8Qj5JZGVudGlmeSBhIGxvY2FsIERURDwvQj4gdGVzdCBjYXNlIHRlc3RzIHRoZSBzYXZlIHByb21wdCBvbiBhIGZpbGUgY2xvc2UuKTwvUD4KLTxVTD4KLSAgPExJPklmIGFueSBmaWxlcyBhcmUgb3Blbiwgc2VsZWN0IDxCPkZpbGUtJmd0O0Nsb3NlIEFsbDwvQj4gKG9yIDxCPkN0cmwrU2hpZnQrRjQ8L0I+KSB0byBjbG9zZSB0aGVtLjwvTEk+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBczwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlIEFzPC9CPiB0b29sYmFyIGJ1dHRvbiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGRpc2FibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhlIERlc2lnbiBwb3B1cCBtZW51IGFsc28gaGFkIGEgU2F2ZSBzZWxlY3Rpb24uIE9wZW4gYSBzdWdnZXN0aW9uIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+bm8gPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgU291cmNlIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChjaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBlbmFibGVkPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGVuYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgPExJPmEgPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+SGl0IDxCPkN0cmwrUzwvQj4uIDwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+RmlsZS0mZ3Q7U2F2ZSBBbGw8Qj48L0I+LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5TYXZlPC9CPiBmcm9tIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+Q2xvc2UgYW5kIHRoZW4gcmVvcGVuIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIHByZXZpb3VzIHN0ZXBzIGFwcGVhciBpbiB0aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMuPC9MST4KLTwvVUw+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGUgYWNyb3NzIG11bHRpcGxlIHBlcnNwZWN0aXZlcyAob3B0aW9uYWwpPC9CPjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZS48L0xJPgotICA8TEk+T3BlbiBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBieToKLSAgPFVMPgotICAgIDxMST48Qj5zZWxlY3RpbmcgUGVyc3BlY3RpdmUtJmd0O09wZW4tJmd0O090aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPndoaWxlIGhvbGRpbmcgZG93biB0aGUgPEI+U2hpZnQ8L0I+IGtleSwgc2VsZWN0IDxCPlhNTDwvQj4uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+VmVyaWZ5IGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ1dHRvbiBhcHBlYXJzIGluIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIHRoZSBXb3JrYmVuY2ggdG8gcmVwcmVzZW50IHRoaXMgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5PcGVuIHRoZSBzYW1lIHhtbCBmaWxlIGFzIGluIHRoZSBmaXJzdCBzdGVwIGFib3ZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5IGluIGJvdGggWE1MIFBlcnNwZWN0aXZlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSAqIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiIG9mIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgZXZlbiB3aGVuIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiBUYWxrIHRvIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+TWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZXNlIGNoYW5nZXMgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGFuZCByZXNwb25kIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbiBhcHBsaWVzIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotPC9VTD4KLTxQPjxCPlZhbGlkYXRpbmcgYSBub24gd2VsbCBmb3JtZWQgWE1MIEZpbGUgKG5vIERURC9TY2hlbWEpPC9CPjxCUj4KLShOT1RFOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgYmUgdHlwZWQgaW4uIFRoaXMgdGVzdCBjYXNlIHRyaWVzIHRvIGNvdmVyIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIGVycm9ycyB0aGF0IHJlbmRlciBhbiBYTUwgZmlsZSBhcyBub3QgYmVpbmcgd2VsbC1mb3JtZWQuIEl0IGlzIG5vdCBpbnRlbmRlZCB0byB2ZXJpZnkgdGhhdCBhbGwgcG9zc2libGUgZXJyb3JzIGFyZSBiZWluZyBkZXRlY3RlZCBhbmQgZ3JhY2VmdWxseSBoYW5kbGVkLiApPC9QPgotPFVMPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+PExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5Ob25XZWxsRm9ybWVkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7LjwvQj48L0xJPgotICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbi48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IGNvbW1lbnQuPC9MST4KLSAgPExJPkVtYmVkIG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBpbiB0aGUgY29tbWVudC4gCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGNhbiBub3QgYmUgZW1iZWRkZWQgd2l0aGluIGEgY29tbWVudCk8L0ZPTlQ+PC9MST4KLSAgPExJPlR5cGUgaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBhcyBzaG93biBiZWxvdzogCi0gICAgICAgIDxGT05UIGNvbG9yPSIjZmYwMDAwIj4oSSBjYW4ndCBzaG93IHRoZSBsaW5lcyB1bnRpbCBkZWZlY3QgMTc3NzU1IGlzIGZpeGVkIC4uLiB1bnRpbCB0aGVuLCBoZXJlJ3MgdGhlIHR5cGUgb2YgdGhpbmdzIHRoYXQgY2F1c2UgCi0gICAgICAgIGEgZG9jdW1lbnQgdG8gbm90IGJlIHdlbGwtZm9ybWVkKTo8L0ZPTlQ+Ci0gIDxVTD4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgdGhhdCBkb24ndCBtYXRjaCBpbiB0aGVpciBjYXNlIHNlbnNpdGl2aXR5IAotICAgICAgICAoZS5nLiwgJmx0O3RhZyZndDsgYW5kICZsdDsvVGFnJmd0OykuIDwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHdoZXJlIHRoZSBzdGFydCB0YWcgY29udGFpbnMgYW4gYXR0cmlidXRlIHZhbHVlIHRoYXQgaXMgbm90IAotICAgICAgICBlbmNsb3NlZCBpbiBxdW90ZXMuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCwgYnV0IG5vdCBYTUwpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSB0YWdzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBuZXN0ZWQuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYSBjaGlsZCB0YWcgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGl0cyBwYXJlbnQgdGFnKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCB0YWcgd2l0aG91dCBhIGNvcnJlc29uZGluZyBlbmQgdGFnLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGFsbCBzdGFydCB0YWdzIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIHRhZyB1bmxlc3MgdGhlIAotICAgICAgICB0YWcgaXMgYW4gZW1wdHkgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBjYW4gYmUgdXNlZCAoJmx0O3Nob3J0VGFnLyZndDspKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+ZG8gbm90IHByb3ZpZGUgYW4gYXR0cmlidXRlIHZhbHVlICg9JnF1b3Q7dmFsdWUmcXVvdDspLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwgZm9yIHRob3NlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIAotICAgICAgICBvbmx5IG9uZSB2YWx1ZSwgYnV0IGl0J3Mgbm90IHZhbGlkIGluIFhNTCk8L0ZPTlQ+PC9MST4KLSAgICAgPExJPmRlZmluZSBhbiBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi0gICAgICAgICBsaW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotICAgICAgICAgYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIERURDwvQj48L1A+Ci08VUw+Ci08TEk+T3BlbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+LjwvTEk+Ci08TEk+RGVsZXRlIGEgY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZSBzdGFydCB0YWdzIChtaXN0eXBpbmcgYSB0YWcgaXMgbm90IHVuY29tbW9uKS48L0xJPgotPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgd2l0aGluIHRoZSBiYWQgdGFnLiBWZXJpZnkgYSBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBhcmVhCi1vZiB0aGUgV29ya2JlbmNoIGluZGljYXRpbmcgdGhhdCB0aGUgYmFkIHRhZyBpcyBhbiB1bmtub3duIHRhZy48L0xJPgotPExJPlNlbGVjdCB0aGUgPEI+VmFsaWRhdGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgYW5kIGFuIGVycm9yIG1hcmtlciBhcHBlYXJzIGluIHRoZSBTb3VyY2UgcGFnZQotdG8gZmxhZyB0aGUgaW52YWxpZCB0YWcuPC9MST4KLTxMST5TZWxlY3QgPEI+RWRpdC0+VW5kbzwvQj4gZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5WZXJpZnkgdGhlIGJhZCB0YWcgZXJyb3Igbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcuPC9MST4KLTxMST5SZW1vdmUgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBpbmRpY2F0aW5nIHRoYXQgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBpcyBtaXNzaW5nPC9MST4KLTxMST5DbG9zZSB0aGUgZmlsZSwgcmVzcG9uZGluZyA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci08TEk+RG91YmxlLWNsaWNrIG9uIHRoZSBlcnJvciBpbiB0aGUgVGFza3MgdmlldywgYW5kIHZlcmlmeSA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+IG9wZW5zIHRvIHRoZQotYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuPC9MST4KLTxMST5IZXJlJ3Mgc29tZSBvdGhlciB2aW9sYXRpb25zIHRoYXQgY2FuIGJlIGF0dGVtcHRlZDoKLTxVTD4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZS48L0xJPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlIHZhbHVlLjwvTEk+Ci08TEk+U3BlY2lmeSBjaGlsZCB0YWdzIG91dCBvZiBzZXF1ZW5jaW5nIG9yZGVyPC9MST4KLTxMST5WaW9sYXRlIHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciBmb3IgYSB0YWcgKGUuZy4sIGlmIHRoZSBEVEQgc2hvd3MgPywgdGhlbiBvbmx5Ci0wIG9yIDEgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBpcyBwZXJtaXR0ZWQpLgotPC9VTD48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLWxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi1hbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLTxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotPCEtLSAgcmVtb3ZlZCBzaW5jZSBkb25lIGVsc2V3aGVyZSBhcyBwYXJ0IG9mIG90aGVyIHNjZW5lcmlvcwotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBTY2hlbWE8L0I+PEJSPgotLS0+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMgKG9wdGlvbmFsKTwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPlVzaW5nIHRoZSBBdXRvIENvbXBsZXRpb24gQ29udGVudCBBc3Npc3QgUHJlZmVyZW5jZTwvQj48QlI+Ci08VUw+Ci08TEk+T3BlbiBhIGFueSBYTUwgZmlsZSB0aGF0IGhhcyBlbm91Z2ggdGFncyB0byBwcm92aWRlIHN5bnRheCBoaWdodGxpZ2h0aW5nLjwvTEk+Ci08TEk+V2hpbGUgdGhhdCBmaWxlIGlzIGxlZnQgb3BlbiwgZ28gdG8gdGhlIFByZWZlcmVuY2VzIHBhZ2UsIHNlbGVjdAotWE1MIEVkaXRvciwgdGhlbiBTb3VyY2UgU3R5bGVzLiA8L0xJPgotPExJPk9uIHRoYXQgcGFnZSwgdXNlIHRoZSBtb3VzZSB0byAic2VsZWN0IiBhIHRhZyBuYW1lLiBUaGUgdGFnIG5hbWUgaXMgbm90IGxpdGVyYWxseQotc2VsZWN0ZWQsIGJ1dCB3aGVuIHlvdSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBleGFtcGxlIHRleHQsIHRoZSBsaXN0Ci1hYm92ZSBpdCB3aWxsIGRpc3BsYXkgdGhlIHR5cGUgb2YgZWxlbWVudCBpdCBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgY29sb3JzIGFyZS48L0xJPgotPExJPkZvciAidGFnIG5hbWUiLCBzZWxlY3QgdGhlIGJvbGQgY2hlY2sgYm94LiBUaGVuIHByZXNzIEFwcGx5LCBhbmQgeW91IHNob3VsZAotc2VlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgaW4geW91ciBhY3RpdmUgZWRpdG9yLjwvTEk+Ci08TEk+U2VsZWN0ICJEZWZhdWx0cyIgYW5kIG1ha2Ugc3VyZSB0aGUgdGFnIG5hbWVzIGFyZSBzZXQgYmFjayB0byBub3QgYm9sZC48L0xJPgotPC9VTD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTxQPjxCPkRvdWJsZS1DbGlja2luZyBXaXRoaW4gdGhlIFNvdXJjZTwvQj4gPEJSPgotKE5PVEU6IGlmIHlvdSBjb250aW51ZSB0byBkb3VibGUtY2xpY2sgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWxlY3Rpb24gYXJlYSB3aWxsIGNvbnRpbnVlIHRvIGV4cGFuZC4gV2hlbiB0aGUgbWF4aW11bSByZWdpb24gYXJlYSBoYXMgYmVlbiByZWFjaGVkLCB0aGUgbmV4dCBkb3VibGUtY2xpY2sgd2lsbCBjYXVzZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLiBTbywgdGhlIHNlbGVjdGlvbnMgd2lsbCB3cmFwL2N5Y2xlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIDxCPkpvYkRlc2MueG1sPC9CPi48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiB0YWcgY29udGVudDoKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPk1pZGRsZXdhcmU8L0I+IG9uIGxpbmUgNy48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+TWlkZGxld2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tm90IHN1cmUgd2hhdCB0aGUgUHJvcGVydGllcyB2aWV3IGlzIHN1cHBvc2VkIHRvIHNob3cuIEl0IGdvZXMgYmxhbmsuIFNlZSBkZWZlY3QgMTc3NzUzLiBBbHNvLCA8Qj5NaWRkbGV3YXJlPC9CPiB3YXNuJ3Qgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFzIGhhZCBleHBlY3RlZC4gVGhlIERlc2lnbiBwYWdlIG9ubHkgc2VlbXMgdG8gc3RheSBpbiBzeW5jIGF0IHRoZSBlbGVtZW50L3RhZyBsZXZlbCBsaWtlIHRoZSBPdXRsaW5lIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYWJvdXQgdGhpcy48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+QXBwbGljYXRpb24gYW5kIE1pZGRsZXdhcmUgU29mdHdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gcmVtYWlucyB0byBiZSB0aGUgb25seSB0aGluZyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYSB0YWcgbmFtZToKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPkhvd1RvQXBwbHk8L0I+IG9uIGxpbmUgNjEuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSwgRGVzaWduIHBhZ2UsIGFuZCBPdXRsaW5lIHZpZXcuIAotICAgICAgICA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKSBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Qj5Ib3dUb0FwcGx5PC9CPiBzaG91bGQgcmVtYWluIHNlbGVjdGVkIGluCi0gICAgICAgIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSB2aWV3LiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgbmFtZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrRW5kPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5kaXN0cmlidXRlPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZTwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrSG9tZTwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlNjcm9sbCBkb3duIHN1Y2ggdGhhdCBsaW5lIDYxIGlzIHZpc2libGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5pbnRlcm5hbDwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmludGVybmFsPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotPC9VTD4KLQotPFA+PEI+Rm9ybWF0dGluZyBhIEZpbGUgQ3JlYXRlZCBieSBEaWZmZXJlbnQgRWRpdG9yczwvQj48QlI+Ci08dWw+Ci08bGk+Ci1JbXBvcnQgdGhlIDxiPkpvYlBvc3RpbmcuZHRkPC9iPiBhbmQgPGI+Sm9iRGVzYy54bWw8L2I+PC9saT4KLQotPGxpPgotT3BlbiB0aGUgSm9iRGVzYy54bWwuIENoZWNrIHRoZSBzb3VyY2UgZm9yIGluZGVudGF0aW9uIHRvIHNlZSBpZiBpdCBwcmVzZXJ2ZXMKLXRoZSB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudC48L2xpPgotCi08bGk+Ci1UaGUgb3JpZ25hbCBkb2N1bWVudCB1c2VzIHNwYWNlcyBhbmQgdGFicywgc28gdGhlIGZvcm1hdHRpbmcgd2lsbCBhcHBlYXIgYSBsaXR0bGUgd3JvbmcuCi1CeSB1c2luZyB0aGUgcmlnaHQvbGVmdCBhcnJvd3MsIHZlcmlmeSB0aGF0IHNvbWUgc3BhY2UgaXMgc3BhY2VzIGFuZCBzb21lIHNwYWNlCi1pcyB0YWIgY2hhcmFjdGVycy48L2xpPgotPExJPlVzZSAnZm9ybWF0IGRvY3VtZW50JyB0byBiZSBzdXJlIGl0IGZvcm1hdHMuIDwvTEk+Ci08TEk+VGhlIGRlZmF1bHQgaXMgdG8gZm9ybWF0IHdpdGggc3BhY2VzIC4uLiB2ZXJpZnkgb25seSBzcGFjZXMgcmVtYWluIGluIGZpbGUsIG5vdCB0YWIgY2hhcmFjdGVzLiAKLShKdXN0IGEgbGl0dGxlIG1vdmVtZW50IHdpdGggdGhlIGFycm93IGtleXMgc2hvdWxkIHN1ZmZpY2UuPC9MST4KLTxMST5HbyB0byB0aGUgcHJlZmVyZW5jZSBwYWdlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IHNldHRpbmdzIGZvciB0aGUgWE1MIEVkaXRvcgotdG8gdXNlIHRoZSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgNCBzcGFjZXMuIFdoaWxlIHRoZXJlLCB2ZXJpZnkgdGhhdCB0aGUgZGlhbG9nCi13aWxsIG5vdCBhbGxvdyBvdGhlciB2YWx1ZXMgdG8gYmUgaW50ZXJlZCBleGNlcHQgIndoaXRlc3BhY2UiIC4uLidcdCdzIGFuZCBibGFua3MuCi08L0xJPgotPExJPkZvcm1hdCB0aGUgZG9jdW1lbnQgYWdhaW4gYW5kIGJlIHN1cmUgdGhpcyB0aW1lIHRhYiBjaGFyYWN0ZXJzIHdlcmUgdXNlZC48L0xJPgotPC91bD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5PdGhlciB0ZXN0IGNhc2VzPC9GT05UPjwvQj48L0gyPgotPFA+PEI+QXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIGEgbmV3IGZpbGUgdHlwZTwvQj48L1A+Ci08VUw+Ci0gIDxMST5XaW5kb3ctJmd0O1ByZWZlcmVuY2VzPEI+PC9CPi48L0xJPgotICA8TEk+RXhwYW5kIDxCPldvcmtiZW5jaDwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5GaWxlIEVkaXRvcnM8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFkZCBhIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNwZWNpZnkgYSBmaWxlIHR5cGUgb2YgPEI+Ki5zZXQ8L0I+IGFuZCB0aGVuIGNsb3NlIHRoZSBBZGQgZGlhbG9nLjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+Ki5zZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMuPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIHRoZSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+WE1MIEVkaXRvcjwvQj4gZnJvbSB0aGUgbGlzdCBvZiBlZGl0b3JzLiBWZXJpZnkgaXQgYXBwZWFycyB3aXRoIGl0cyBvd24gc3BlY2lhbCBpY29uLiBDbG9zZSB0aGUgZGlhbG9nLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tk9URTogd2FpdGluZyB0byBoZWFyIGJhY2sgZnJvbSBPVEkgb24gaG93IGNhbiBwcmV2ZW50IDIgWE1MIEVkaXRvciBlbnRyaWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBsaXN0LjwvRk9OVD48L0xJPgotICA8TEk+VmVyaWZ5IDxCPlhNTCBFZGl0b3I8L0I+IGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgZWRpdG9yIG5vdyBmb3IgdGhlIDxCPiouc2V0PC9CPiBmaWxlIHR5cGUuPC9MST4KLSAgPExJPk9wZW4gPEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+IGZyb20gdGhlIE5hdmlnYXRvciB2aWV3LiBWZXJpZnkgaXQgb3BlbnMgdG8gdGhlIFhNTCBFZGl0b3IuPC9MST4KLTwvVUw+Ci08UD48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+VEhFIEVORCE8L0ZPTlQ+PC9QPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiY2RkMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy9EVEQvIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+Ci08TUVUQSBjb250ZW50PSJ0ZXh0L2NzcyIgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIj4KLTx0aXRsZT5zbW9rZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj4gU21va2UgVGVzdCAtIFhNTCBFZGl0b3I8L2gyPgotTGFzdCB1cGRhdGVkOiBKdW5lIDI1LCAyMDAxCi08UD5UaGlzIFNtb2tlIFRlc3QgcHJpbWFyaWx5IGZvY3VzZXMgb24gdGhlIFJUUCBwb3J0aW9uIG9mIHRoZSBYTUwgCi1FZGl0aW9yLCB3aGljaCBpcyB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuIEl0IGFsc28gcGVyZm9ybXMgCi1zb21lIGludGVncmF0aW9uIHRlc3RpbmcuIEZvciBleGFtcGxlLCBpdCB0ZXN0cyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAKLXRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcyBvZiB0aGUgWE1MIEVkaXRvciwgYXMgd2VsbCBhcyB3aXRoIHRoZSAKLU91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3MuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCBmaWxlcyBjcmVhdGVkIAotdGhyb3VnaCB0aGUgWE1MIEZpbGUgd2l6YXJkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBYTUwgQ2F0YWxvZyBhcmUgCi1zdXBwb3J0ZWQgYXMgZXhwZWN0ZWQuPC9QPgotPFA+PEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPk5PVEU8L0I+OiBYTUwgZmlsZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXBwZWFyIAotZXhhY3RseSBhcyBub3RlZC48L0ZPTlQ+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNldHVwPC9GT05UPjwvSDI+Ci08UD48Qj5TdGFydGluZyBDbGVhbjwvQj48L1A+Ci08dWw+Ci0gICAgPGxpPiBEZWxldGUgYW55IGV4aXN0aW5nIHdvcmtiZW5jaDwvbGk+Ci0gICAgPGxpPiBTdGFydCBFY2xpcHNlPC9saT4KLTwvdWw+Ci08UD48Qj5PcGVuIGFuIFhNTCBQZXJzcGVjdGl2ZTxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+T3BlbiBQZXJzcGVjdGl2ZTwvQj4gdG9vbGJhciBidXR0b24gaW4gdGhlIHVwcGVyIGxlZnQ8L0xJPgotICAgIDxMST5TZWxlY3QgPEI+T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPlhNTDwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyB2aWV3cyBhcHBlYXIgaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSBsb2NhdGlvbiBvZiB0aGUgT3V0bGluZSBhbmQgTmF2aWdhdG9yIHZpZXdzIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBSZXNvdXJjZSBhbmQgV2ViIHBlcnNwZWN0aXZlcy4gRG8gd2Ugd2FudCB0byB0cnkgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHBlcnNwZWN0aXZlcz8gQWxzbywgSSBvcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjQgdG8gZW5hYmxlIGVhc3kgYWNjZXNzIHRvIHRoZSBQcm9wZXJ0aWVzIHZpZXcgZnJvbSB3aXRoaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZS4gSWYgdGhpcyB2aWV3IGlzbid0IGluY2x1ZGVkIGluIHRoZSBQZXJzcGVjdGl2ZSBiZWNhdXNlIGl0cyB1c2UgaXMgbGltaXRlZCwgdGhlbiByZWNvbW1lbmQgd2UgYXQgbGVhc3QgcHJvdmlkZSBhIFNob3cgb3IgSGlkZSBQcm9wZXJ0aWVzIFZpZXcgdG9vbGJhciBidXR0b24gKHNpbWlsYXIgdG8gdGhlIGJ1dHRvbnMgdGhhdCBQYWdlIERlc2lnbmVyIHByb3ZpZGVzKS48L0ZPTlQ+PC9MST4KLTwvVUw+Ci08UD48Qj5Qcm9qZWN0IENyZWF0aW9uIGFuZCBGaWxlIEltcG9ydHM8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5DcmVhdGUgYSBQcm9qZWN0LCA8Qj5YTUxUZXN0MjwvQj4gPC9MST4KLSAgICA8TEk+SW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgaW50byB0aGlzIHByb2plY3Q6Ci0gICAgPFVMPgotICAgICAgICA8TEk+PEI+UHVyY2hhc2VPcmRlci54c2Q8L0I+PC9MST4KLSAgICAgICAgPExJPjxCPkludm9pY2UuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxCPkpvYkRlc2MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPldpcmVsZXNzLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj48L0xJPgotICAgIDxMST48Qj5BVFMuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5hbnkgb3RoZXJzPzwvRk9OVD48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBzY3JhdGNoPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMgYW5kIHRoZSBGaW5pc2ggYnV0dG9uIGlzIGRpc2FibGVkLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+REVGRUNUOjwvQj4gMTc3NjYwIC0gWE1MIEZpbGUgd2l6YXJkOiBkaXNhYmxlIEZpbmlzaCBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2U8L0ZPTlQ+LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21TY3JhdGNoPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZzoKLSAgICA8VUw+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgYXBwZWFycyBpbiB0aGUgTmF2aWdhdG9yIHZpZXcuPC9MST4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBpcyBvcGVuIHRvIHRoZSBEZXNpZ24gcGFnZSBvZiB0aGUgWE1MIEVkaXRvciBhbmQgaGFzIGZvY3VzLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIHRhYiBhcHBlYXJzIGJlZm9yZSB0aGUgU291cmNlIHRhYiBpbiB0aGUgWE1MIEVkaXRvci48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2Ugc2hvdyBubyBjb250ZW50LjwvTEk+Ci0gICAgICAgIDxMST50aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cyBzaG93IG5vdGhpbmcuPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlN3aXRjaCB0byB0aGUgU291cmNlIHBhZ2UuIFZlcmlmeSB0aGUgY3Vyc29yIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5SaWdodCBtb3VzZSBidXR0b24gMiBhbmQgdmVyaWZ5IGEgcG9wdXAgbWVudSBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbCBsaXN0IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDs8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5ICZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsgaXMgaW5zZXJ0ZWQgYW5kIGFwcGVhcnMgc3ludGF4IGhpZ2hsaWdodGVkIGFuZCBhbiBlbnRyeSBhcHBlYXJzIGZvciBpdCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBYTUwgZGVjbGFyYXRpb24gYW5kIHZlcmlmeSA8Qj52ZXJzaW9uPC9CPiBhbmQgPEI+ZW5jb2Rpbmc8L0I+IGFwcGVhciBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhpcyB1c2VkIHRvIHdvcmssIGJ1dCBub3cgaXQncyBub3Qgd29ya2luZy4gT3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjYyIC0gWE1MIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgbm90IGFwcGVhcmluZyBpbiBQcm9wZXJ0aWVzIHZpZXcuIElmIHdlIGRlY2lkZSB0byBub3QgdHJlYXQgdmVyc2lvbiBhbmQgZW5jb2RpbmcgYXMgYXR0cmlidXRlcywgdGhlbiB0aGlzIHN0ZXAgc2hvdWxkIGJlIHJlbW92ZWQuPC9GT05UPjwvTEk+Ci0gICAgPExJPkNvbnRpbnVlIHRvIHRoZSBuZXh0IHNlY3Rpb24uPC9MST4KLTwvVUw+Ci08UD48Qj5JZGVudGlmeSBhIGxvY2FsIERURCAoPC9CPnZlcmlmaWVzIGEgRFREIGlzIGltbWVkaWF0ZWx5IHJlY29nbml6ZWQ7IGluIHRoZSBwYXN0LCB5b3UgaGFkIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIFdvcmtiZW5jaDxCPik8L0I+PC9QPgotPFVMPgotICAgIDxMST5UeXBlIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbiBpbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+OiA8Qj4mbHQ7IURPQ1RZUEUgSW52b2ljZSBTWVNURU0gJnF1b3Q7SW52b2ljZS5kdGQmcXVvdDsmZ3Q7PC9CPi4gVGhlIHRleHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZCBhcyB5b3UgdHlwZSBhbmQgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgZ2V0IGFkZGVkIHRvIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBjcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbi48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uVmVyaWZ5IG9ubHkgPEI+SW52b2ljZTwvQj4gYW5kIDxCPmNvbW1lbnQ8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdC4gKDxCPk5PVEU8L0I+OiA8Qj5JbnZvaWNlPC9CPiBpcyB0aGUgcm9vdCBlbGVtZW50KTwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkludm9pY2U8L0I+IGFzIGEgc2VsZWN0aW9uLiBWZXJpZnkgdGhlIEludm9pY2Ugc3RhcnQgYW5kIGVuZCB0YWdzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTb3VyY2UgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZXR3ZWVuIHRoZW0uIEFuIGVsZW1lbnQgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgSW52b2ljZSBpbiB0aGUgT3V0bGluZSB2aWV3LiAoPEI+Tk9URTwvQj46IFhNTCBpcyBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHlvdSBzZWUgSW52b2ljZSBhbmQgbm90IGludm9pY2UgZXZlcnl3aGVyZSkuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXJzIGluIHRoZSBwcm9wb3NhbCBsaXN0IChpbiB0aGUgb3JkZXIgc2hvd24pOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SXRlbSBpcyBhcHBlYXJpbmcgYmVmb3JlIEhlYWRlci4gVGhlIGRlZmF1bHQgaXMgbm90IHRvIHNvcnQgdGhlIGxpc3QgYWxwaGFiZXRpY2FsbHkuIFRoYXQgbWVhbnMgdGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkIHRhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgSW52b2ljZSBpbiB0aGUgRFRELiBJbiBvdGhlciB3b3JkcywgdXNlcnMgc2hvdWxkIHNlZSBjaGlsZCB0YWdzIGxpc3RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VxdWVuY2luZyBvcmRlciBpbiB0aGUgRFRELCB3aGljaCB0aGUgRFREIEVkaXRvciBzaG93cy4gVmlvbGF0aW5nIHRoZSBzZXF1ZW5jaW5nIG9yZGVyIGNhdXNlcyBhbiBYTUwgZmlsZSB0byBiZWNvbWUgbm90IHZhbGlkLiA8Qj5ERUZFQ1Q6PC9CPiAxNzc2Njg8L0ZPTlQ+Ci0gICAgPFVMPgotICAgICAgICA8TEk+SGVhZGVyPC9MST4KLSAgICAgICAgPExJPkl0ZW08L0xJPgotICAgICAgICA8TEk+Y29tbWVudDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5IZWFkZXI8L0I+IGFzIGEgc2VsZWN0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgU291cmNlIG5vdyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZWZvcmUgPEI+aW52b2ljZU51bWJlcjwvQj46PElNRyBib3JkZXI9IjAiIGhlaWdodD0iODMiIHNyYz0iaWRlbnRpZnlEVEQuanBnIiB3aWR0aD0iNDg1Ij48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SGVhZGVyPC9CPiBhcHBlYXJzIG5lc3RlZCB1bmRlciA8Qj5JbnZvaWNlPC9CPiBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gIDxMST5DbG9zZSB0aGlzIGZpbGUsIGFuZCByZXNwb25kIDxCPlllczwvQj4gd2hlbiBwcm9tcHRlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSB0aGUgY2hhbmdlcyB3ZXJlIHNhdmVkLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZS4gVmVyaWZ5IG5vIHNhdmUgY2hhbmdlcyBwcm9tcHQgYXBwZWFycy48L0xJPgotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGFuIGltcG9ydGVkIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+RmlsZS0mZ3Q7TmV3LSZndDtYTUwgRmlsZTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlIGZyb20gYSBEVEQgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbUxvY2FsRFREPC9CPjwvTEk+Ci0gICAgICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+SW1wb3J0IEZpbGU8L0I+IGJ1dHRvbgotICAgIDxVTD4KLSAgICAgICAgPExJPlVzZSB0aGUgQnJvd3NlIGJ1dHRvbiB0byBmaW5kIDxCPnRlc3RjYXNlLmR0ZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgYWxyZWFkeSBmaWxsZWQgaW4uIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPiB0byBjbG9zZSB0aGUgSW1wb3J0IEZpbGUgd2l6YXJkPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkV4cGFuZCA8Qj5YTUx0ZXN0MjwvQj4gYW5kIHRoZW4gc2VsZWN0IDxCPnRlc3RjYXNlLmR0ZDwvQj4uIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5XYXMgZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW1wb3J0ZWQgZmlsZSBzZWxlY3RlZCBpbiB0aGUgV29ya2JlbmNoIGZpbGVzIGxpc3QsIGJ1dCBpdCB3YXNuJ3QuIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPnRlc3RjYXNlPC9CPiBhcyB0aGUgUm9vdCBFbGVtZW50LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgcmVxdWlyZWQgY29udGVudCBvbmx5PC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+dGVzdGNhc2UuZHRkPC9CPiBhcHBlYXJzIGFzIHRoZSBTeXN0ZW0gSWQuPC9MST4KLSAgICA8TEk+U2VsZWN0IEZpbmlzaC4gVmVyaWZ5IDxCPmZyb21Mb2NhbERURC54bWw8L0I+IGFwcGVhcnMgaW4gdGhlIFhNTCBFZGl0b3IuIFZlcmlmeSB0aGUgU291cmNlIHBhZ2UgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTAiIHNyYz0iaW1wb3J0RFRELmpwZyIgd2lkdGg9IjY2MCI+PC9MST4KLSAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjk3IiBzcmM9Im91dGxpbmUxLmpwZyIgd2lkdGg9IjY1NSI+PC9MST4KLSAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+aGVhZGVyPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IHZhbHVlcyBhcHBlYXIgaW4gdGhlIAotICAgICAgICAgICAgUHJvcGVydGllcyB2aWV3OgotICAgICAgICA8VEFCTEUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDxUQk9EWT4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj48Qj5Qcm9wZXJ0eTwvQj48L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij48Qj5WYWx1ZTwvQj48L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+Y2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij53ZWJ0b29sPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPm51bWJlcjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPmlkdmFsdWUwPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN0YXRlPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+QWNjZXNzYWJpbGl0eTwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJTdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgIDwvVEJPRFk+Ci0gICAgICAgIDwvVEFCTEU+Ci0gICAgICAgIDwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+dGVzdEJ1Y2tldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IGEgcHJvcGVydHkgb2YgPEI+dHlwZTwvQj4KLSAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiA8Qj5Db21wb25lbnRUZXN0PC9CPi4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+IAotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgYXR0cmlidXRlcyBhbmQgYXR0cmlidXRlIHZhbHVlcykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIHVzZSBjb250ZW50IGFzc2lzdCB0byBpbnNlcnQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgICAgIGZvciB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgPEI+Y2F0ZWdvcnk8L0I+IGF0dHJpYnV0ZSBpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIDxCPnNwYWNlPC9CPiBhbmQgdGhlbiBoaXQgcHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSBvbmx5IDxCPnN0YXRlPC9CPiBhbmQgPEI+c3ViU3ViQ2F0ZWdvcnk8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoY29udGVudCBhc3Npc3QgaXMgc21hcnQgZW5vdWdoIG5vdCB0byBsaXN0IGFueSBhdHRyaWJ1dGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgc3RhcnQgdGFnIHNpbmNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYXBwZWFyIG9uY2UuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPnN0YXRlPC9CPi48L0xJPiAgIAotICAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5zdGF0ZT0iVW5kZXJDb25zdHJ1Y3Rpb24iPC9CPiBpcyBpbnNlcnRlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGNvbnRlbnQgYXNzaXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhbnkgZGVmYXVsdCB2YWx1ZXMuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLiBWZXJpZnkgdGhlIERlc2lnbiBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIFByb3BlcnRpZXMgdmlldywgdXBkYXRlIHRoZSA8Qj5zdGF0ZTwvQj4gYXR0cmlidXRlIHZhbHVlIHRvICJVbmRlclJldmlldyIgCi0gICAgICAgICAgICAoYSBwdWxsZG93biBsaXN0IG9mIHZhbHVlcyBzaG91bGQgYmUgYXZhaWxhYmxlKS4gVmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkCi0gICAgICAgICAgICBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMuCi0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBBdHRyaWJ1dGUtPnN1YlN1YkNhdGVnb3J5PC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51IChpdCdzIHNtYXJ0Ci0gICAgICAgICAgICAgICAgZW5vdWdoIHRvIGtub3cgd2hpY2ggYXR0cmlidXRlcyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkIHlldCAuLi4gbGlrZSBjb250ZW50IAotICAgICAgICAgICAgICAgIGFzc2lzdC4gQ29vbCEpLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSBpbiBhIHZhbHVlIG9mIDxCPktleWJvYXJkIHN1cHBvcnQ8L0I+LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3PC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgdGhhdCByZWZlcmVuY2VzIGEgcmVtb3RlIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPk9wZW4gdGhlIDxCPldpcmVsZXNzLnhtbDwvQj4gZmlsZS48L0xJPgotICAgIDxMST5WZXJpZnkgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGluIHRoZSBTb3VyY2UgcGFnZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyMzkiIHNyYz0id2lyZWxlc3MuanBnIiB3aWR0aD0iNjU2Ij48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIAotICAgICAgICBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMTg5IiBzcmM9Im91dGxpbmUyLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4gCi0gICAgPExJPlZlcmlmeSBjb250ZW50IGFzc2lzdCA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+RGVmZWN0IDE3NjM3OSAoaW4gdmVyaWZ5IHN0YXRlLCBidXQgc3RpbGwgbm90IHdvcmtpbmcpPC9GT05UPi48L0xJPgotICAgICAgICA8VUw+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgb24gdGhlIG5ldyBsaW5lLjwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChpbiB0aGUgb3JkZXIgc2hvd24pOiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+aGVhZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRlbXBsYXRlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2FyZDwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5UeXBlIGEgc3BhY2UgYmVmb3JlIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9uIHRoZSBjYXJkIHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChub3QgbmVjZXNzYXJpbHkgaW4gdGhlCi0gICAgICAgICAgICAgICBvcmRlciBzaG93bikuIAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST50aXRsZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5ld2NvbnRleHQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vcmRlcmVkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+eG1sOmxhbmc8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbmVudGVyYmFja3dhcmQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbnRpbWVyPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHZhbHVlIGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5wb3N0PC9CPiBhbmQgPEI+Z2V0PC9CPiBhcHBlYXIgYXMgcHJvcG9zYWxzLjwvTEk+Ci0gICAgICAgIDwvVUw+Ci0gICAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmNhcmQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbHMgbGlzdGVkIGFib3ZlIGZvciB0aGUKLSAgICAgICAgICAgIDxCPmNhcmQ8L0I+IHRhZyBhcHBlYXIgYXMgcHJvcGVydGllcyBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiBObyB2YWx1ZXMgc2hvdWxkIGFwcGVhciBmb3IgdGhlc2UgcHJvcGVydGllcy48L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+cG9zdGZpZWxkPC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+cG9zdGZpZWxkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsCi0gICAgICAgICAgICBub25lIG9mIHdoaWNoIHNob3VsZCBoYXZlIGEgdmFsdWU6Ci0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5hbWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST52YWx1ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGVsZW1lbnRzL3RhZ3MpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjb3B5IGFuZCBwYXN0ZSB0aGUgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPk5vdGljZSB0aGUgcmFuZ2Ugb2YgdGhlIDxCPmNhcmQ8L0I+IHRhZyBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIGFyZWEuPC9MST4KLSAgICAgICAgICAgIDxMST5Db3B5IHRoaXMgcmFuZ2Ugb2YgbGluZXMgdXNpbmcgdGhlIDxCPkVkaXQtPkNvcHk8L0I+IHB1bGxkb3duIG1lbnUgc2VsZWN0aW9uLjwvTEk+Ci0gICAgICAgICAgICA8TEk+UGFzdGUgYWZ0ZXIgdGhlIDxCPmNhcmQ8L0I+IGVuZCB0YWcgdXNpbmcgQ3RybCtWLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyB3ZXJlIHBhc3RlZCBuIHRoZSBTb3VyY2UgcGFnZS4KLSAgICAgICAgICAgICAgICBWZXJpZnkgdGhlIERlc2lnbiBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcyAKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFub3RoZXIgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+d21sPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIENoaWxkLT5jYXJkPC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuIE5PVEU6IGl0IHNob3VsZCBoYXZlIGdlbmVyYXRlZCBvdXQKLSAgICAgICAgICAgICAgICB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3JpZ2luYWwgY2FyZCB0YWcsIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRoYXQgYSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSBzaG91bGQgbm90IGV4aXN0IGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLiA8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+IAotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbmQgVmFsaWRhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIHNjaGVtYTwvQj48QlI+Ci0KLTxQPih0aGVzZSBzdGVwcyBhcmUgdGFrZW4gZnJvbSB0aGUgJ0Rlc2lnbicgc21va2UgdGVzdCwgZXhjZXB0IHRoZSBTb3VyY2UgUGFnZSBpcyB0aGUgZm9jdXMpPC9QPgotPHVsPgotPGxpPgotUmlnaHQgbW91c2UgYnV0dG9uIDIgb24gdGhlIFB1cmNoYXNlT3JkZXIueHNkIGFuZCBzZWxlY3QgPGI+Q3JlYXRlIFhNTAotRmlsZTwvYj4uPC9saT4KLQotPGxpPgotQWNjZXB0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZXMuPC9saT4KLQotPGxpPgotSW4gdGhlIFNlbGVjdCBSb290IEVsZW1lbnQgcGFnZSwgY2hvb3NlIDxiPnB1cmNoYXNlT3JkZXI8L2I+IGFzIHJvb3QgZWxlbWVudC48L2xpPgotCi08bGk+Ci1DaG9vc2UgPGI+Q3JlYXRlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjb250ZW50PC9iPiB0byBjcmVhdGUgYSBtaW5pbWFsCi1kb2N1bWVudC48L2xpPgotCi08bGk+Ci1FbnRlciA8Yj5wbzwvYj4gYXMgdGhlIG5hbWVzcGFjZSBwcmVmaXguPC9saT4KLQotPGxpPk9uIEZpbmlzaCwgYSBQdXJjaGFzZU9yZGVyLnhtbCBpcyBjcmVhdGVkIGFuZCB0aGUgWE1MIEVkaXRvciBpcyBvcGVuZWQuIChTZWxlY3QgU291cmNlIFBhZ2UgaWYgbm90IGFscmVhZHkgdGhlcmUuKTwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIHNob3VsZCBiZSBpbnZhbGlkLjwvbGk+Ci0KLTxsaT4KLURvdWJsZSBjbGljayBvbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgdG8gdGhlIGxpbmUKLWluIGVycm9yLCBpLmUuIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUuIEl0IGlzIGludmFsaWQgYmVjYXVzZSB0aGUKLXZhbHVlIGlzIG5vdCBzZXQgdG8gbWF0Y2ggdGhlIFhNTCBzY2hlbWEgcGF0dGVybiBmYWNldCAiZDMtW0EtWl17Mn0iICgzCi1kaWdpdHMgZm9sbG93ZWQgYnkgMiBjaGFyYWN0ZXJzKS48L2xpPgotCi08bGk+SW4gdGhlIFNvdXJjZSBWaWV3LCBsb2NhdGUgdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZSB1bmRlciBlbGVtZW50IGl0ZW0uCi1FbnRlciB0aGUgdmFsdWUgMzMzLUFCLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvVUw+Ci08VUw+Ci0gIDxMST4KLSAgPEhSPjwvTEk+Ci0gIDxsaT5QbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSAmbHQ7aXRlbXMmZ3Q7IHRhZyBhbmQgYmVzdXJlICJpdGVtIiBpcyAKLSAgbGlzdGVkIGluIHRoZSBjb250ZW50IGFzc2lzdCBsaXN0LiA8L2xpPgotPGxpPlJlbmFtZSB0aGUgcHVyY2hhc2VPcmRlci54c2QgdG8sIHNheSwgcHVyY2hhc2VPcmRlckhPTEQueHNkPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBjb250ZW50IGFzc2lzdCBzdGlsbCBnaXZlcyB5b3UgIml0ZW0iIGFzIGFib3ZlLjwvbGk+Ci08bGk+Tm93IHNlbGVjdCB0aGUgIlJlbG9hZCBEZXBlbmRhbmNpZXMiIGJ1dHRvbi48L2xpPgotPGxpPlZlcmlmeSB0aGF0IG5vdyBjb250ZW50IGFzc2lzdCBubyBsb25nZXIgbGlzdHMgYW55IGl0ZW1zIG90aGVyIAotdGhhdCB0aGUgbWFjcm8gImNvbW1lbnQiLjwvbGk+Ci08bGk+UmVwZWF0IG1ha2luZyBwdXJjaGFzZU9yZGVyLnhzZCB3b3JrYWJsZSBhZ2Fpbi48L2xpPgotPC91bD4KLTxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PC9QPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSBmb3IgYSBzaGlwcGVkIERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj4KLTxCUj4KLVtwdXQgaW4gb3B0aW9uYWwgc2VjdGlvbiAuLiB0aGlzIGlzbid0IGEgY3VzdG9tZXIgc2NlbmVyaW9dPEJSPgotVG8gdmVyaWZ5IHRoYXQgc2hpcHBlZCBEVERzIGFyZSB3b3JraW5nOjxCUj4KLTxVTD4KLTxMST4KLVVzZSBhIHdlYiBwcm9qZWN0IHdpdGggYSBzdGFuZGFyZCB3ZWIueG1sIGZpbGUgaW4gaXQuIEJlIHN1cmUgCi10aGVyZSBpcyBubyB3ZWItYXBwXzJfMi5kdGQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0aGUgd2ViLnhtbCBmaWxlIAotaXRzZWxmLCBtYW5nbGUgdGhlIHdlYi1hcHBfMl8yLmR0ZCBmaWxlbmFtZSBpbiB0aGUgc3lzdGVtIGlkIGEgbGl0dGxlLCBzdWNoIGFzIAotY2hhbmdlIGl0IHRvIHhlYi1hcHBfMl8yLmR0ZCB0byBiZSBzdXJlIGl0IGNhbid0IGJlIGZvdW5kIHZpYSB0aGUKLW5vcm1hbCBodHRwIG1ldGhvZCAoVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZnVudGlvbiB0byB3b3JrLAotaXRzIGp1c3QgdG8gYmUgc3VyZSBvbmx5IHRoZSBjYXRhbG9nIGZ1bmN0aW9uIGlzIGluIGVmZmVjdCkuCi08L0xJPgotPExJPgotR28gdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2UsIGFuZCBvcGVuIHRoZSBYTUwgQ2F0YWxvZy4gVmVyaWZ5IHRoZXJlIAotaXMgYW4gZW50cnkgZm9yIC0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTi4KLTwvTEk+Ci08TEk+Ci1PbmNlIGFsbCB0aGUgcHJlcCB3b3JrIGlzIGRvbmUgKGZpbGVzIGRlbGV0ZWQsIHRleHQgbW9kaWZpZWQpLCB5b3Ugc2hvdWxkIAotZXhpdCBhbmQgcmVzdGFydCBFY2xpcHNlIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBmcmVzaCBzdGFydC4KLTwvTEk+Ci08TEk+Ci1PcGVuIHRoZSB3ZWIueG1sIGZpbGUgYW5kIGJlIHN1cmUgdGhhdCBjb250ZW50IGFzc2lzdCB3b3JrcyBmb3IgdGhhdCBmaWxlLgotRm9yIGV4YW1wbGUsIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlICZsdDsvZGlzcGxheS1uYW1lJmd0OyB0YWcsIGN0cmwtc3BhY2UgCi1zaG91bGQgcHJvdmlkZSBhIGxvbmcgbGlzdCBvZiBlbGVtZW50cywgc3RhcnRpbmcgd2l0aCBzZXJ2bGV0LCBzZXJ2bGV0LW1hcHBpbmcsIGV0Yy4KLVRoaXMgaW5kaWNhdGVzIHRoZSBzaGlwcGVkIERURCBmdW5jdGlvbiBpcyB3b3JraW5nIGFuZCBjb25maWd1cmVkIAotY29ycmVjdGx5IChhdCBsZWFzdCBmb3IgdGhlIHdlYi54bWwgZmlsZSkuCi08L0xJPgotPC9VTD4KLTwvUD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgbmV3IERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj48SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTxiPlRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgJ0Rlc2lnbicgU21va2UgVGVzdDogWE1MIENhdGFsb2cgZm9yIFhNTCBTY2hlbWE8L2I+Ci08dWw+Ci08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkPC9saT4KLQotPGxpPgotQ3JlYXRlIGEgbmV3IHByb2plY3QsIFhNTFRlc3QyPC9saT4KLQotPGxpPgotTW92ZSB0aGUgUHVyY2hhc2VPcmRlci54c2QgaW50byBYTUxUZXN0Mi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwuIFlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIG5vIGxvbmdlcgotdmFsaWQuIFRoZSBlcnJvciBtZXNzYWdlIHNob3VsZCBnaXZlIHlvdSBhIGhpbnQgdGhhdCB0aGUgZmlsZSBQdXJjaGFzZU9yZGVyLnhzZAotY2FuIG5vIGxvbmdlciBiZSBmb3VuZC48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBXaW5kb3ctPlByZWZlcmVuY2VzIGFuZCBzZWxlY3QgdGhlIFhNTCBDYXRhbG9nLjwvbGk+Ci0KLTxsaT4KLUVudGVyIHRoZSBwYWlyIDxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gZjpcZWNsaXBzZVxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj48L2xpPgotCi08YnI+T3IgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQotb2YgdGhlIHdvcmtiZW5jaCBhcyBmb2xsb3dzOgotPGJyPjxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gLlxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj4KLTxsaT4KLUNsaWNrIG9uIHRoZSBSZWxvYWQgYnV0dG9uIHRvIHJlbG9hZCB0aGUgY2F0YWxvZyBzZXR0aW5ncy48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgIFNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlPC9CPjxCUj4KLShOT1RFOiB0aGUgPEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQ8L0I+IHRlc3QgY2FzZSB0ZXN0cyB0aGUgc2F2ZSBwcm9tcHQgb24gYSBmaWxlIGNsb3NlLik8L1A+Ci08VUw+Ci0gIDxMST5JZiBhbnkgZmlsZXMgYXJlIG9wZW4sIHNlbGVjdCA8Qj5GaWxlLSZndDtDbG9zZSBBbGw8L0I+IChvciA8Qj5DdHJsK1NoaWZ0K0Y0PC9CPikgdG8gY2xvc2UgdGhlbS48L0xJPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAobm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQXM8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZSBBczwvQj4gdG9vbGJhciBidXR0b24gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBkaXNhYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoZSBEZXNpZ24gcG9wdXAgbWVudSBhbHNvIGhhZCBhIFNhdmUgc2VsZWN0aW9uLiBPcGVuIGEgc3VnZ2VzdGlvbiBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPm5vIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAoY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZW5hYmxlZDwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBlbmFibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICAgIDxMST5hIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkhpdCA8Qj5DdHJsK1M8L0I+LiA8L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkZpbGUtJmd0O1NhdmUgQWxsPEI+PC9CPi48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgUHJvcGVydGllcyB2aWV3LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+U2F2ZTwvQj4gZnJvbSB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkNsb3NlIGFuZCB0aGVuIHJlb3BlbiB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBwcmV2aW91cyBzdGVwcyBhcHBlYXIgaW4gdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzLjwvTEk+Ci08L1VMPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlIGFjcm9zcyBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgKG9wdGlvbmFsKTwvQj48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgdG8gdGhlIGZpbGUuPC9MST4KLSAgPExJPk9wZW4gYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnk6Ci0gIDxVTD4KLSAgICA8TEk+PEI+c2VsZWN0aW5nIFBlcnNwZWN0aXZlLSZndDtPcGVuLSZndDtPdGhlci4uLjwvQj48L0xJPgotICAgIDxMST53aGlsZSBob2xkaW5nIGRvd24gdGhlIDxCPlNoaWZ0PC9CPiBrZXksIHNlbGVjdCA8Qj5YTUw8L0I+LjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlZlcmlmeSBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBidXR0b24gYXBwZWFycyBpbiB0aGUgbGVmdGhhbmQgc2lkZSBvZiB0aGUgV29ya2JlbmNoIHRvIHJlcHJlc2VudCB0aGlzIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+T3BlbiB0aGUgc2FtZSB4bWwgZmlsZSBhcyBpbiB0aGUgZmlyc3Qgc3RlcCBhYm92ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseSBpbiBib3RoIFhNTCBQZXJzcGVjdGl2ZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgKiBuZXZlciBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYiBvZiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGV2ZW4gd2hlbiBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gVGFsayB0byBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPk1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24gYXBwbGllcyBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLTwvVUw+Ci08UD48Qj5WYWxpZGF0aW5nIGEgbm9uIHdlbGwgZm9ybWVkIFhNTCBGaWxlIChubyBEVEQvU2NoZW1hKTwvQj48QlI+Ci0oTk9URTogaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGJlIHR5cGVkIGluLiBUaGlzIHRlc3QgY2FzZSB0cmllcyB0byBjb3ZlciBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBlcnJvcnMgdGhhdCByZW5kZXIgYW4gWE1MIGZpbGUgYXMgbm90IGJlaW5nIHdlbGwtZm9ybWVkLiBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHBvc3NpYmxlIGVycm9ycyBhcmUgYmVpbmcgZGV0ZWN0ZWQgYW5kIGdyYWNlZnVsbHkgaGFuZGxlZC4gKTwvUD4KLTxVTD4KLSAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPjxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+Tm9uV2VsbEZvcm1lZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0Oy48L0I+PC9MST4KLSAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24uPC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCBjb21tZW50LjwvTEk+Ci0gIDxMST5FbWJlZCBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgaW4gdGhlIGNvbW1lbnQuIAotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBjYW4gbm90IGJlIGVtYmVkZGVkIHdpdGhpbiBhIGNvbW1lbnQpPC9GT05UPjwvTEk+Ci0gIDxMST5UeXBlIGluIHRoZSByZW1haW5pbmcgbGluZXMgYXMgc2hvd24gYmVsb3c6IAotICAgICAgICA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+KEkgY2FuJ3Qgc2hvdyB0aGUgbGluZXMgdW50aWwgZGVmZWN0IDE3Nzc1NSBpcyBmaXhlZCAuLi4gdW50aWwgdGhlbiwgaGVyZSdzIHRoZSB0eXBlIG9mIHRoaW5ncyB0aGF0IGNhdXNlIAotICAgICAgICBhIGRvY3VtZW50IHRvIG5vdCBiZSB3ZWxsLWZvcm1lZCk6PC9GT05UPgotICA8VUw+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHRoYXQgZG9uJ3QgbWF0Y2ggaW4gdGhlaXIgY2FzZSBzZW5zaXRpdml0eSAKLSAgICAgICAgKGUuZy4sICZsdDt0YWcmZ3Q7IGFuZCAmbHQ7L1RhZyZndDspLiA8L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB3aGVyZSB0aGUgc3RhcnQgdGFnIGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGlzIG5vdCAKLSAgICAgICAgZW5jbG9zZWQgaW4gcXVvdGVzLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwsIGJ1dCBub3QgWE1MKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgdGFncyB0aGF0IGFyZSBub3QgcHJvcGVybHkgbmVzdGVkLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGEgY2hpbGQgdGFnIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBpdHMgcGFyZW50IHRhZyk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgdGFnIHdpdGhvdXQgYSBjb3JyZXNvbmRpbmcgZW5kIHRhZy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhbGwgc3RhcnQgdGFncyBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcgdW5sZXNzIHRoZSAKLSAgICAgICAgdGFnIGlzIGFuIGVtcHR5IHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgc2hvcnRoYW5kIHZlcnNpb24gY2FuIGJlIHVzZWQgKCZsdDtzaG9ydFRhZy8mZ3Q7KSkuPC9GT05UPjwvTEk+Ci0gICAgPExJPmRvIG5vdCBwcm92aWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSAoPSZxdW90O3ZhbHVlJnF1b3Q7KS4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MIGZvciB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSAKLSAgICAgICAgb25seSBvbmUgdmFsdWUsIGJ1dCBpdCdzIG5vdCB2YWxpZCBpbiBYTUwpPC9GT05UPjwvTEk+Ci0gICAgIDxMST5kZWZpbmUgYW4gYXR0cmlidXRlIG1vcmUgdGhhbiBvbmNlIGluIGEgc3RhcnQgdGFnLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotICAgICAgICAgbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLSAgICAgICAgIGFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLQotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBEVEQ8L0I+PC9QPgotPFVMPgotPExJPk9wZW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPi48L0xJPgotPExJPkRlbGV0ZSBhIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGUgc3RhcnQgdGFncyAobWlzdHlwaW5nIGEgdGFnIGlzIG5vdCB1bmNvbW1vbikuPC9MST4KLTxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IHdpdGhpbiB0aGUgYmFkIHRhZy4gVmVyaWZ5IGEgbWVzc2FnZSBhcHBlYXJzIGluIHRoZSBzdGF0dXMgYXJlYQotb2YgdGhlIFdvcmtiZW5jaCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJhZCB0YWcgaXMgYW4gdW5rbm93biB0YWcuPC9MST4KLTxMST5TZWxlY3QgdGhlIDxCPlZhbGlkYXRlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGFuZCBhbiBlcnJvciBtYXJrZXIgYXBwZWFycyBpbiB0aGUgU291cmNlIHBhZ2UKLXRvIGZsYWcgdGhlIGludmFsaWQgdGFnLjwvTEk+Ci08TEk+U2VsZWN0IDxCPkVkaXQtPlVuZG88L0I+IGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+VmVyaWZ5IHRoZSBiYWQgdGFnIGVycm9yIG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3LjwvTEk+Ci08TEk+UmVtb3ZlIHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgaW5kaWNhdGluZyB0aGF0IHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgaXMgbWlzc2luZzwvTEk+Ci08TEk+Q2xvc2UgdGhlIGZpbGUsIHJlc3BvbmRpbmcgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotPExJPkRvdWJsZS1jbGljayBvbiB0aGUgZXJyb3IgaW4gdGhlIFRhc2tzIHZpZXcsIGFuZCB2ZXJpZnkgPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPiBvcGVucyB0byB0aGUKLWFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08TEk+SGVyZSdzIHNvbWUgb3RoZXIgdmlvbGF0aW9ucyB0aGF0IGNhbiBiZSBhdHRlbXB0ZWQ6Ci08VUw+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUuPC9MST4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZSB2YWx1ZS48L0xJPgotPExJPlNwZWNpZnkgY2hpbGQgdGFncyBvdXQgb2Ygc2VxdWVuY2luZyBvcmRlcjwvTEk+Ci08TEk+VmlvbGF0ZSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgZm9yIGEgdGFnIChlLmcuLCBpZiB0aGUgRFREIHNob3dzID8sIHRoZW4gb25seQotMCBvciAxIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgaXMgcGVybWl0dGVkKS4KLTwvVUw+PC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi1saW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci08TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLTwhLS0gIHJlbW92ZWQgc2luY2UgZG9uZSBlbHNld2hlcmUgYXMgcGFydCBvZiBvdGhlciBzY2VuZXJpb3MKLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgU2NoZW1hPC9CPjxCUj4KLS0tPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzIChvcHRpb25hbCk8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Vc2luZyB0aGUgQXV0byBDb21wbGV0aW9uIENvbnRlbnQgQXNzaXN0IFByZWZlcmVuY2U8L0I+PEJSPgotPFVMPgotPExJPk9wZW4gYSBhbnkgWE1MIGZpbGUgdGhhdCBoYXMgZW5vdWdoIHRhZ3MgdG8gcHJvdmlkZSBzeW50YXggaGlnaHRsaWdodGluZy48L0xJPgotPExJPldoaWxlIHRoYXQgZmlsZSBpcyBsZWZ0IG9wZW4sIGdvIHRvIHRoZSBQcmVmZXJlbmNlcyBwYWdlLCBzZWxlY3QKLVhNTCBFZGl0b3IsIHRoZW4gU291cmNlIFN0eWxlcy4gPC9MST4KLTxMST5PbiB0aGF0IHBhZ2UsIHVzZSB0aGUgbW91c2UgdG8gInNlbGVjdCIgYSB0YWcgbmFtZS4gVGhlIHRhZyBuYW1lIGlzIG5vdCBsaXRlcmFsbHkKLXNlbGVjdGVkLCBidXQgd2hlbiB5b3UgY2xpY2sgb24gYW4gZWxlbWVudCBpbiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGUgbGlzdAotYWJvdmUgaXQgd2lsbCBkaXNwbGF5IHRoZSB0eXBlIG9mIGVsZW1lbnQgaXQgaXMsIGFuZCB3aGF0IGl0cyBjdXJyZW50IGNvbG9ycyBhcmUuPC9MST4KLTxMST5Gb3IgInRhZyBuYW1lIiwgc2VsZWN0IHRoZSBib2xkIGNoZWNrIGJveC4gVGhlbiBwcmVzcyBBcHBseSwgYW5kIHlvdSBzaG91bGQKLXNlZSB0aGUgY2hhbmdlIHRha2UgZWZmZWN0IGluIHlvdXIgYWN0aXZlIGVkaXRvci48L0xJPgotPExJPlNlbGVjdCAiRGVmYXVsdHMiIGFuZCBtYWtlIHN1cmUgdGhlIHRhZyBuYW1lcyBhcmUgc2V0IGJhY2sgdG8gbm90IGJvbGQuPC9MST4KLTwvVUw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08UD48Qj5Eb3VibGUtQ2xpY2tpbmcgV2l0aGluIHRoZSBTb3VyY2U8L0I+IDxCUj4KLShOT1RFOiBpZiB5b3UgY29udGludWUgdG8gZG91YmxlLWNsaWNrIGF0IGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGFyZWEgd2lsbCBjb250aW51ZSB0byBleHBhbmQuIFdoZW4gdGhlIG1heGltdW0gcmVnaW9uIGFyZWEgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIG5leHQgZG91YmxlLWNsaWNrIHdpbGwgY2F1c2UgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi4gU28sIHRoZSBzZWxlY3Rpb25zIHdpbGwgd3JhcC9jeWNsZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9QPgotPFVMPgotICA8TEk+T3BlbiA8Qj5Kb2JEZXNjLnhtbDwvQj4uPC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gdGFnIGNvbnRlbnQ6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5NaWRkbGV3YXJlPC9CPiBvbiBsaW5lIDcuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPk1pZGRsZXdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5vdCBzdXJlIHdoYXQgdGhlIFByb3BlcnRpZXMgdmlldyBpcyBzdXBwb3NlZCB0byBzaG93LiBJdCBnb2VzIGJsYW5rLiBTZWUgZGVmZWN0IDE3Nzc1My4gQWxzbywgPEI+TWlkZGxld2FyZTwvQj4gd2Fzbid0IHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhcyBoYWQgZXhwZWN0ZWQuIFRoZSBEZXNpZ24gcGFnZSBvbmx5IHNlZW1zIHRvIHN0YXkgaW4gc3luYyBhdCB0aGUgZWxlbWVudC90YWcgbGV2ZWwgbGlrZSB0aGUgT3V0bGluZSB2aWV3LiBUYWxrIHRvIENyYWlnIGFib3V0IHRoaXMuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkFwcGxpY2F0aW9uIGFuZCBNaWRkbGV3YXJlIFNvZnR3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IHJlbWFpbnMgdG8gYmUgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGEgdGFnIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5Ib3dUb0FwcGx5PC9CPiBvbiBsaW5lIDYxLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UsIERlc2lnbiBwYWdlLCBhbmQgT3V0bGluZSB2aWV3LiAKLSAgICAgICAgPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiB0aGUgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykgaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZS4gPEI+SG93VG9BcHBseTwvQj4gc2hvdWxkIHJlbWFpbiBzZWxlY3RlZCBpbgotICAgICAgICB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgdmlldy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0VuZDwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+ZGlzdHJpYnV0ZTwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0hvbWU8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5TY3JvbGwgZG93biBzdWNoIHRoYXQgbGluZSA2MSBpcyB2aXNpYmxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+aW50ZXJuYWw8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5pbnRlcm5hbDwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPiJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLTwvVUw+Ci0KLTxQPjxCPkZvcm1hdHRpbmcgYSBGaWxlIENyZWF0ZWQgYnkgRGlmZmVyZW50IEVkaXRvcnM8L0I+PEJSPgotPHVsPgotPGxpPgotSW1wb3J0IHRoZSA8Yj5Kb2JQb3N0aW5nLmR0ZDwvYj4gYW5kIDxiPkpvYkRlc2MueG1sPC9iPjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIEpvYkRlc2MueG1sLiBDaGVjayB0aGUgc291cmNlIGZvciBpbmRlbnRhdGlvbiB0byBzZWUgaWYgaXQgcHJlc2VydmVzCi10aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuPC9saT4KLQotPGxpPgotVGhlIG9yaWduYWwgZG9jdW1lbnQgdXNlcyBzcGFjZXMgYW5kIHRhYnMsIHNvIHRoZSBmb3JtYXR0aW5nIHdpbGwgYXBwZWFyIGEgbGl0dGxlIHdyb25nLgotQnkgdXNpbmcgdGhlIHJpZ2h0L2xlZnQgYXJyb3dzLCB2ZXJpZnkgdGhhdCBzb21lIHNwYWNlIGlzIHNwYWNlcyBhbmQgc29tZSBzcGFjZQotaXMgdGFiIGNoYXJhY3RlcnMuPC9saT4KLTxMST5Vc2UgJ2Zvcm1hdCBkb2N1bWVudCcgdG8gYmUgc3VyZSBpdCBmb3JtYXRzLiA8L0xJPgotPExJPlRoZSBkZWZhdWx0IGlzIHRvIGZvcm1hdCB3aXRoIHNwYWNlcyAuLi4gdmVyaWZ5IG9ubHkgc3BhY2VzIHJlbWFpbiBpbiBmaWxlLCBub3QgdGFiIGNoYXJhY3Rlcy4gCi0oSnVzdCBhIGxpdHRsZSBtb3ZlbWVudCB3aXRoIHRoZSBhcnJvdyBrZXlzIHNob3VsZCBzdWZmaWNlLjwvTEk+Ci08TEk+R28gdG8gdGhlIHByZWZlcmVuY2UgcGFnZSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBzZXR0aW5ncyBmb3IgdGhlIFhNTCBFZGl0b3IKLXRvIHVzZSB0aGUgdGFiIGNoYXJhY3RlciBpbnN0ZWFkIG9mIDQgc3BhY2VzLiBXaGlsZSB0aGVyZSwgdmVyaWZ5IHRoYXQgdGhlIGRpYWxvZwotd2lsbCBub3QgYWxsb3cgb3RoZXIgdmFsdWVzIHRvIGJlIGludGVyZWQgZXhjZXB0ICJ3aGl0ZXNwYWNlIiAuLi4nXHQncyBhbmQgYmxhbmtzLgotPC9MST4KLTxMST5Gb3JtYXQgdGhlIGRvY3VtZW50IGFnYWluIGFuZCBiZSBzdXJlIHRoaXMgdGltZSB0YWIgY2hhcmFjdGVycyB3ZXJlIHVzZWQuPC9MST4KLTwvdWw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+T3RoZXIgdGVzdCBjYXNlczwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPkFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byBhIG5ldyBmaWxlIHR5cGU8L0I+PC9QPgotPFVMPgotICA8TEk+V2luZG93LSZndDtQcmVmZXJlbmNlczxCPjwvQj4uPC9MST4KLSAgPExJPkV4cGFuZCA8Qj5Xb3JrYmVuY2g8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+RmlsZSBFZGl0b3JzPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhZGQgYSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TcGVjaWZ5IGEgZmlsZSB0eXBlIG9mIDxCPiouc2V0PC9CPiBhbmQgdGhlbiBjbG9zZSB0aGUgQWRkIGRpYWxvZy48L0xJPgotICA8TEk+VmVyaWZ5IDxCPiouc2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgbGlzdCBvZiBmaWxlIHR5cGVzLjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byB0aGUgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlhNTCBFZGl0b3I8L0I+IGZyb20gdGhlIGxpc3Qgb2YgZWRpdG9ycy4gVmVyaWZ5IGl0IGFwcGVhcnMgd2l0aCBpdHMgb3duIHNwZWNpYWwgaWNvbi4gQ2xvc2UgdGhlIGRpYWxvZy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5PVEU6IHdhaXRpbmcgdG8gaGVhciBiYWNrIGZyb20gT1RJIG9uIGhvdyBjYW4gcHJldmVudCAyIFhNTCBFZGl0b3IgZW50cmllcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgbGlzdC48L0ZPTlQ+PC9MST4KLSAgPExJPlZlcmlmeSA8Qj5YTUwgRWRpdG9yPC9CPiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBub3cgZm9yIHRoZSA8Qj4qLnNldDwvQj4gZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5PcGVuIDxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPiBmcm9tIHRoZSBOYXZpZ2F0b3Igdmlldy4gVmVyaWZ5IGl0IG9wZW5zIHRvIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08L1VMPgotPFA+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzcyMTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBlNGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTMwYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NGNkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD10ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzVVRGMTZsZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiZDUxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzVVRGMTZsZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGQ2MmRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmJlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZmU2OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmJlLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGVmYjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZsZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZDBlNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Pz4NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1ZWIxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/Pg0KLTx0YWc+DQotQXVzdHJhbGnrDQotPC90YWc+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzMzNTlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIg0KLSAgICB2ZXJzaW9uPSIxLjAiDQotICAgIHhtbG5zOnhhbGFuPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdCI+DQotPHhzbDp2YXJpYWJsZSBuYW1lPSJiYWRFbmNvZGluZyI+DQotQXVzdHJhbGnrDQotPC94c2w6dmFyaWFibGU+DQotPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Y2U3NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg5ZTY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iOTkiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NjI0OGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2V0RW5jb2Rpbmc9IklTTy04ODU5LTciJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYyN2JiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotDQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTciICU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM3ZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotSSBmb3VuZCB0aGlzIGNoYW5nZQ0KLQ0KLTwlQCBwYWdlDQotaW1wb3J0PSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiINCi0gcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SlVOSyINCi0lPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PU1FVEFKVU5LIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+UmVzdWx0cyBwYWdlPC9USVRMRT4NCi0NCi08IS0tU3R5bGVzLS0+DQotPFNUWUxFIFRZUEU9InRleHQvY3NzIj4NCi08IS0tDQotQk9EWSB7DQotCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsNCi19DQotSDEgew0KLQljb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50Ow0KLQl0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCi19DQotVEggew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1URCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVRILnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICM5OTk5OTkgIWltcG9ydGFudDsNCi19DQotVEQucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYzsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi0tLT4NCi08L1NUWUxFPg0KLQ0KLQ0KLTwhLS1TdHlsZSBTaGVldC0tPg0KLTxMSU5LIGhyZWY9Ii90L3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08anNwOnVzZUJlYW4gaWQ9InNlbENvbEJlYW5Sb3cxMkJlYW4iIHNjb3BlPSJzZXNzaW9uIiBjbGFzcz0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iIHR5cGU9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIi8+DQotPCUNCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0lPg0KLQ0KLTwlDQotLy9FeGVjdXRlIEJlYW4gTWV0aG9kcw0KLQ0KLQ0KLSU+DQotDQotPCEtLUJhbm5lci0tPg0KLTxIMT5SZXN1bHRzIHBhZ2U8L0gxPg0KLQ0KLTxCUj48QlI+DQotDQotPCEtLSBSZXN1bHQgVGFibGUgLS0+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotPFRCT0RZPg0KLQkJCTxUUj4NCi0JCQk8VEg+VEVTVDJfi42LjouPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfj4qPiY+PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfiY2JjomPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjVyNWo1fPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjo2Ojo6PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0NCi08L1RCT0RZPg0KLTwvVEFCTEUgPg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWEzOWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMjk2NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwOTJlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1hYmMiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTljNmQxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiICANCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUNwMTI1MiINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+aW5WYWxpZEVuY29kaW5nVmFsdWUuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5ZDA0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5ub0VuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIG5vRW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNDMyZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTwlQCBwYWdlDQotcGFnZUVuY29kaW5nPSAiSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTY5MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZDkwOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODc0YTA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgDQotcGFnZUVuY29kaW5nPSJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyIvPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY3OTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIA0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0zIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjI4N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0ODY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08JQ0KLVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCIpOw0KLSU+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2Y5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkMGEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJmOTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGVjMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz1VVEYtOCANCi08dGVzdD4NCi08L3Rlc3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2QwYzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgICAgPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDE3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4NCi0NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTBjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPHRlc3Q+DQotIDwlQCBwYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0NjM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4NCi0NCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotPC90ZXN0Pg0KLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMmM0MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Yjk4NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOWU4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0YzlmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTY5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmZkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmE5YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjcyMzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3M2NiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzJmMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM3ZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+DQotPEhUTUw+DQotPEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9TUVUQUpVTksiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxUSVRMRT5SZXN1bHRzIHBhZ2U8L1RJVExFPg0KLQ0KLTwhLS1TdHlsZXMtLT4NCi08U1RZTEUgVFlQRT0idGV4dC9jc3MiPg0KLTwhLS0NCi1CT0RZIHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KLX0NCi1IMSB7DQotCWNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7DQotCXRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KLX0NCi1USCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQljb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVREIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEgucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OSAhaW1wb3J0YW50Ow0KLX0NCi1URC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjOw0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLS0tPg0KLTwvU1RZTEU+DQotDQotDQotPCEtLVN0eWxlIFNoZWV0LS0+DQotPExJTksgaHJlZj0iL3QvdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxqc3A6dXNlQmVhbiBpZD0ic2VsQ29sQmVhblJvdzEyQmVhbiIgc2NvcGU9InNlc3Npb24iIGNsYXNzPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIgdHlwZT0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iLz4NCi08JQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLSU+DQotDQotPCUNCi0vL0V4ZWN1dGUgQmVhbiBNZXRob2RzDQotDQotDQotJT4NCi0NCi08IS0tQmFubmVyLS0+DQotPEgxPlJlc3VsdHMgcGFnZTwvSDE+DQotDQotPEJSPjxCUj4NCi0NCi08IS0tIFJlc3VsdCBUYWJsZSAtLT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi08VEJPRFk+DQotCQkJPFRSPg0KLQkJCTxUSD5URVNUMl+LjYuOi488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+Pio+Jj488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+JjYmOiY88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+NXI1ajV88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+OjY6Ojo88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQ0KLTwvVEJPRFk+DQotPC9UQUJMRSA+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjODcwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLUkgZm91bmQgdGhpcyBjaGFuZ2UNCi0NCi08JUAgcGFnZQ0KLWltcG9ydD0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iDQotIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0lPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PU1FVEFKVU5LIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+UmVzdWx0cyBwYWdlPC9USVRMRT4NCi0NCi08IS0tU3R5bGVzLS0+DQotPFNUWUxFIFRZUEU9InRleHQvY3NzIj4NCi08IS0tDQotQk9EWSB7DQotCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsNCi19DQotSDEgew0KLQljb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50Ow0KLQl0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCi19DQotVEggew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1URCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVRILnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICM5OTk5OTkgIWltcG9ydGFudDsNCi19DQotVEQucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYzsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi0tLT4NCi08L1NUWUxFPg0KLQ0KLQ0KLTwhLS1TdHlsZSBTaGVldC0tPg0KLTxMSU5LIGhyZWY9Ii90L3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08anNwOnVzZUJlYW4gaWQ9InNlbENvbEJlYW5Sb3cxMkJlYW4iIHNjb3BlPSJzZXNzaW9uIiBjbGFzcz0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iIHR5cGU9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIi8+DQotPCUNCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0lPg0KLQ0KLTwlDQotLy9FeGVjdXRlIEJlYW4gTWV0aG9kcw0KLQ0KLQ0KLSU+DQotDQotPCEtLUJhbm5lci0tPg0KLTxIMT5SZXN1bHRzIHBhZ2U8L0gxPg0KLQ0KLTxCUj48QlI+DQotDQotPCEtLSBSZXN1bHQgVGFibGUgLS0+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotPFRCT0RZPg0KLQkJCTxUUj4NCi0JCQk8VEg+VEVTVDJfi42LjouPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfj4qPiY+PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfiY2JjomPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjVyNWo1fPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjo2Ojo6PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0NCi08L1RCT0RZPg0KLTwvVEFCTEUgPg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMDUxYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxqc3A6cm9vdCB4bWxuczpqc3A9Imh0dHA6Ly9qYXZhLnN1bi5jb20vSlNQL1BhZ2UiIHZlcnNpb249IjEuMiI+DQotPGpzcDpkaXJlY3RpdmUucGFnZSBsYW5ndWFnZT0iamF2YSINCi0JY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiIHBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIiAvPg0KLTxqc3A6dGV4dD48IVtDREFUQVsgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iU0hJRlRfSklTIiA/PiBdXT48L2pzcDp0ZXh0Pg0KLTxqc3A6dGV4dD48IVtDREFUQVsgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPiBdXT48L2pzcDp0ZXh0Pg0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiIC8+DQotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyIgLz4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPg0KLTxsaW5rIGhyZWY9InRoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCINCi0JdHlwZT0idGV4dC9jc3MiIC8+DQotPHRpdGxlPnRlc3RzaGlmdGppcy5qc3A8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi08cD5QbGFjZSB0ZXN0c2hpZnRqaXMuanNwJ3MgY29udGVudCBoZXJlLjwvcD4NCi08L2JvZHk+DQotPC9odG1sPg0KLTwvanNwOnJvb3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiNDdjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgcGFnZUVuY29kaW5nPSJTaGlmdF9KSVMiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U2hpZnRfSklTIiU+DQotPCVAdGFnbGliIHVyaT0iL1dFQi1JTkYvd2Vic2l0ZWRlc2lnbmVyLnRsZCIgcHJlZml4PSJzaXRlZWRpdCIlPg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiINCi0JY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8gSG9tZXBhZ2UgQnVpbGRlciBWZXJzaW9uIDYuNS4wLjAgZm9yIFdpbmRvd3MiPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVNoaWZ0X0pJUyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPFRJVExFPkF1ZGkgQTaNd5P8gtyCxTwvVElUTEU+DQotPExJTksgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCi08TElOSyByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBpZD0id2Vic2l0ZV9zdHlsZSINCi0JaHJlZj0iL0F1ZGkvc2l0ZS1jb21wL3N0eWxlL3NpdGUuY3NzIj4NCi08L0hFQUQ+DQotPEJPRFkgdGV4dD0iIzY2NjY5OSIgbGluaz0iIzY2NjZjYyIgdmxpbms9IiM5OTk5OTkiIGFsaW5rPSIjY2M2NmZmIj4NCi08c2l0ZWVkaXQ6bGF5b3V0Pg0KLQk8c2l0ZWVkaXQ6bGF5b3V0YXJlYSBpZD0iYm9keSI+DQotCQk8SDE+QXVkaSBBNo13k/yC3ILFPC9IMT4NCi0NCi0JCTxESVYgYWxpZ249ImxlZnQiPg0KLQkJPFRBQkxFIHdpZHRoPSI2NDAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCI+DQotCQkJPFRCT0RZPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyIgaGVpZ2h0PSI1Ij48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+jXeT/ILcgsWCzIxviNw8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+MTGMjjwvRk9OVD48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIHdpZHRoPSI1Ij48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjIxNiIgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiIHJvd3NwYW49IjMiPjwvVEQ+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPjIwMDGUTjExjI6NoIFBjp+K+k15IENhcoLwjJ+TooK1jm6C34LpgUI8L0xJPg0KLQkJCQkJCTxMST6XnZdSgs0uLi4NCi0JCQkJCQk8T0w+DQotCQkJCQkJCTxMST4yMDAylE40jI6CxTWUTpbagvCMfYKmgumRT47UgnWCj4KMgpaCj4LJjdeCqYKijMyP4YKqkYqOn4KigsSCooK9gUI8L0xJPg0KLQkJCQkJCQk8TEk+g0eDk4NXg5OCzJTxl82Cs4LJieSWnYKqgsWCq4LIgq2CyILBgsSCq4K9gUI8L0xJPg0KLQkJCQkJCTwvT0w+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+iMiJuoLMjtSO7YKqjPOV4oLGgsiCwYK9gUINCi0JCQkJCQk8T0w+DQotCQkJCQkJCTxMST5WT0xWTyBWNzA8L0xJPg0KLQkJCQkJCQk8TEk+QldNIDMyNWkgdG91cmluZzwvTEk+DQotCQkJCQkJCTxMST5WVyBQYXNzYXJ0IFY2IDQgTW90aW9uPC9MST4NCi0JCQkJCQkJPExJPk1lcmNlZGVzLUJlbnogQyBDbGFzcyBXYWdvbjwvTEk+DQotCQkJCQkJCTxMST5BdWRpIEE0IEF2YW50PC9MST4NCi0JCQkJCQk8L09MPg0KLQkJCQkJCTxCUj4NCi0JCQkJCQmCu4KkgUIggrGCzI6ek1+CxTxCPoJgglWCzYqukVOCyINYg1KBW4N2ik88L0I+gsWCoILBgr2BQjwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyIgd2lkdGg9IjUiIGhlaWdodD0iNSI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+grGCsYKpgueBQYjIibqCzJedl1KCqo7lgsWBQYzzleKO1IKqjWmC54Lqgr2BQjxCUj4NCi0JCQkJCYFpgqCCrYLcgsWC4I6EgsaNyILMjMKQbJNJjuWKz4LJguaC6ILcgreBQoFqDQotCQkJCQk8VUw+DQotCQkJCQkJPExJPlZPTFZPIFY3MCAtIINmg1WDQ4OTgqpYgsWDe4NjgUI8L0xJPg0KLQkJCQkJCTxMST5CV00gMzI1aSB0b3VyaW5nIC0gkoaTcpS8kluCyINUg0ODWYFBiliShkJXTYK+gueCr4LFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+QyBDbGFzcyAtIIm/immCyYypjYeC7YLIgqKDR4OTg1eDk4FBk+CRlYLFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+UGFzc2FydCAtIIm/immCzZajl82TSYK+gqqT4IpPkZWDZoNVg0ODk4LFg3uDY4FCPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQmCu4KkgUKCsYKxgsU8Qj6OY4LBgr2CzILNQTQgQXZhbnQ8L0I+gsWCtYK9gUIgPEJSPg0KLQkJCQkJQTQgMy4wIHF1YXR0cm8gc3BvcnRzgsmOjo/mgrWBQYLGgsSC4ItDgsmT/ILBgsSCtYLcgqKC3IK1gr2BQjxCUj4NCi0JCQkJCYK1gqmCtZStlISXXJLogs0yMDAylE4yjI6CxoLMgrGCxoLFgUGCu4KxgtyCxZHSgsaCpILGiOqTeILNjIiC34LcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJl0KI6oFBi0OCyYLIgsGCxIKigr2CzILNjrqT4ILMg1SDQ4NZgsaDZ4OJg5ODTpdll8qCqlY3MILJlOSC14KpgsiC6I+sgrOCrYLIgumCxoKigqSTX4LFgrWCvYFCPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+MTKMjpKGj3s8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJCTxURD48QlI+DQotCQkJCQkyjI6C3ILFkdKCxoKkgsaOdoLBgsSCooLpj/OR1ILFgUFBNILMkseJwY/ulfGC8JO+guaCpILGjnaCooNmg0KBW4OJgVuCyZengr+K8YLogsGCvYLGgrGC64FBklOTloLMiWOLxoLMlfuCqpVzjd2CxZNYkreCxphigvCCtYLcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJgruCsYLFgUFWT0xWT4KpgueCzI/mguiKt4KmgUGJxpGwjVyQrIFpNJBsgWqC8I1sgqaC6YLGQTaCqoKoiqmC34LGgsyCsYLGgUIgPEI+ib+KaY23guCRlZT1k5mC8I1sgqaC6YLGQTQgQXZhbnQNCi0JCQkJCTMuMCBxdWF0dHJvIHN1cG9ydILGQTYgQXZhbnQgMy4wIHF1YXRycm+CzI23gqqC2YLGgvGCx4LIgqI8L0I+gsaCzIKxgsaBQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCY1YgsmJuo7mguiDTIODg5ODeYFbg5OShoLFgUGRvIpDik+DgYFbg0qBW4KpgueCzI7mkdaCpoLMj+qNh4FBjbiS6Ip6gXs8Qj6CUoJPlpyJfjwvQj6De4Fbg2mDWILGgsiC6IFBgsaCwYLEguCCqJSDgqKTvoq0gqqPb4LcgreBQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYK7grWCxIFBlE6T4JRbjtSJwpRcgsiK85ZdkEaBaYNWg4uDb4Fbg4yDQ4NOg4GDXoOKg2KDToFqgsyCYIJVgqoxkeSN3YzJgqqCoILpgsaCzIKxgsaBQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYLFgUGMi4vHgrGCzJhigsmP5oLBgsQoj+aCuYLnguqCxIFIgWqBQTxCPjxGT05UIGNvbG9yPSIjY2MzM2ZmIj5BNiAzLjAgQXZhbnQgcXVhdHRybw0KLQkJCQkJMjAwMiBNb2RlbDwvRk9OVD48L0I+gvCNd5P8jIiS6IK1gtyCtYK9gUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+jXeT/IyIkuiBSYFJPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yMiJLogsyXnZdSgvCC3ILGgt+C6YLGgUE8L0ZPTlQ+gUE8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCB3aWR0aD0iMjE2IiBiZ2NvbG9yPSIjMDA2NmNjIiB2YWxpZ249InRvcCI+PC9URD4NCi0JCQkJCTxURCB3aWR0aD0iNDIwIj4NCi0JCQkJCTxVTD4NCi0JCQkJCQk8TEk+kbyCzIzzleKO1ILGlOSKcoK1gsSBQYN7g2aDQoKoguaC0Y7Uk+CL84rUgsyDZoNVg0ODk4LwkeWCooLJi0OCyZP8gsGCvYFCPC9MST4NCi0JCQkJCQk8TEk+gmCCU4LFgs2CdYJWgk+CyZTkgteO1JPgg1iDeYFbg1iCqou3gq2CyILBgsSCtYLcgqSBQjwvTEk+DQotCQkJCQkJPExJPoNOg0GDZ4ONgUWDVoNYg2WDgIFpc2tpgqqO75ahgsiCzILFguKCzYLoc25vdyBkcml2ZYLJgs00V0SCqpd+grWCrYLELi4uKTwvTEk+DQotCQkJCQkJPExJPpJsiPiCq4LGk8GVyom6juaC6INMg4ODk4N5gVuDk5KGgr6CwYK9jpaBRoF8gWo8L0xJPg0KLQkJCQkJPC9VTD4NCi0JCQkJCTwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48Rk9OVA0KLQkJCQkJCWNvbG9yPSIjZmZmZmZmIj6Nd5P8grWCvYOCg2aDiyCCqILmgtEgkseJwYNJg3aDVoOHg5M8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiPjwvVEQ+DQotCQkJCQk8VEQ+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPoOCg2aDiw0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPjxCPjxGT05UIGNvbG9yPSIjY2MzM2ZmIj5BNiAzLjAgQXZhbnQgcXVhdHRybyAyMDAyIE1vZGVsPC9GT05UPjwvQj4NCi0JCQkJCQkJPC9MST4NCi0JCQkJCQkJPExJPo/agrWCrYLNgmCClYKEgomCzINJg3SDQoNWg4ODi4N5gVuDV4LwgrKXl4Ktgr6Cs4KigUIoIDxBDQotCQkJCQkJCQlocmVmPSJodHRwOi8vd3d3LmF1ZGkuY28uanAvbW9kZWxzL2luZGV4Lmh0bWwiPmh0dHA6Ly93d3cuYXVkaS5jby5qcC9tb2RlbHMvaW5kZXguaHRtbDwvQT4NCi0JCQkJCQkJKTwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST6De4Nmg0KBRYNKg4mBWw0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPoNWg4uDb4Fbg4yDQ4NOg4GDXoOKg2KDTjwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST6Sx4nBg0mDdoNWg4eDkw0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPoOLgVuDdINBg5ODZYNpl3CDQYOTg0+Di4NYg3mBW4NUgVsggWmLQIpCjq6Sk47Uj+qXmJdwgsyCvYLfgWo8L0xJPg0KLQkJCQkJCQk8TEk+g4mDUYNig1eDZ4OMg0MgKINYg0yBW5TCgUWDdYFbg2OBQY5xi5+CzJbsi4WTuYvvgvCQz4LdjZ6C3oK9gt+CzJNEj5yCr5dwgWo8L0xJPg0KLQkJCQkJCQk8TEk+g2+Dk4NwgVuV24zsl3CDiYNvgVsggWmNyILMl3aWXYLFLi4uLi4pPC9MST4NCi0JCQkJCQkJPExJPoNYg16DYoNog4yDWIFFg16DQ4OEIC0gg3WDioNXg1iDZ4OTIIN1g4qDVYNig048L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+MXN0IINDg5ODdoOMg2KDVoOHg5M8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIGhlaWdodD0iNSI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIj48SU1HIHNyYz0iaW1hZ2UyMTEuanBnIg0KLQkJCQkJCWJvcmRlcj0iMCIgd2lkdGg9IjE5NSIgaGVpZ2h0PSIxMzAiPjwvVEQ+DQotCQkJCQk8VEQ+jXeT/IyIkuiCqYLngUGUTpaWgsyNUYK9gr6CtYKijp6K+oLFgrWCvYKqMo9UitSCxo+tgrWCxJRbjtSBQjxCUj4NCi0JCQkJCTOT+ozjgsmVY4/qgsmCcoKLgomCyY1zgq2XXJLogsWCtYK9gsyCxYFBg1iDXoNig2iDjINYkZWShYK1gsSC4ILngqKC3IK1gr2BQjxCUj4NCi0JCQkJCTxVTD4NCi0JCQkJCQk8TEk+PEZPTlQgY29sb3I9IiNmZjAwZmYiPjxGT05UIGNvbG9yPSIjZmYwMGZmIj48Qj5Qcm9zLjwvQj48L0ZPTlQ+PC9GT05UPg0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPoNYg4CBW4NZgsiDR4OTg1eDk4FCPC9MST4NCi0JCQkJCQkJPExJPojAkuiCtYK9kZaC6IFplFuO1IK1gsQzk/qM44LMg1iDbYFbgUWDaIOJg0ODdYLNgsaCxILgifWTS4LFgrWCvYFqgUI8L0xJPg0KLQkJCQkJCQk8TEk+j+OOv4LFjUyCoo66k+CBQjwvTEk+DQotCQkJCQkJCTxMST6OdoLBgr2C5oLoguCIq4KtgsiCopRSlO+BaY2CkayC8Ircgt+BQYy7jd2VvYvPNi41S20vTIFCgWo8L0xJPg0KLQkJCQkJCQk8TEk+iliShoLFgqCC3ILok6+Cto7UgvCMqYKpgq+CyIKigUaBfIFqPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQkJPExJPjxCPjxGT05UIGNvbG9yPSIjMDAwMDMzIj5Db25zLjwvRk9OVD48L0I+DQotCQkJCQkJPFVMPg0KLQkJCQkJCQk8TEk+lVePgJOLjdqCzIJtgoGCloKJgsmDcoFbg1KDk4KqlXSCooLEgqKCyIKigUI8QlI+DQotCQkJCQkJCYFpj2GR2I/ulfGCqoJ1gmiCYoJygr6Cr4LFgs2Vc49claqBQojIkU+OhJdwgrWCxIKigr2DcINDg0mDaoNBjtAginmDaYNygs2Xx4KpgsGCvYFCgWo8L0xJPg0KLQkJCQkJCQk8TEk+iNmP7YLIgq2C54KikryCro2Vgq2DioNBgqqJmILqgumBQiCDZ4OJg5ODToLwikqCr4LpgsaO6IKqkF6CwY2VgUI8L0xJPg0KLQkJCQkJCQk8TEk+gr+C5YLBgsaC04LtgtOC7YK1gr2Rq4nxguiBQjwvTEk+DQotCQkJCQkJCTxMST6CdYJWgk+CxpTkgteBQYy4gsGCxIK1gtyCwYK9g2eDiYOTg06XZZfKgUI8L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+glCDloyOg4yDfIFbg2eCyZGxgq0uLi4uLi4uLjwvRk9OVD48QQ0KLQkJCQkJCWhyZWY9ImF1ZGlfMW1vbnRoLmh0bWwiPjxJTUcgc3JjPSJiMDE2bGlzLmdpZiIgd2lkdGg9IjE2Ig0KLQkJCQkJCWhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC9BPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJPC9UQk9EWT4NCi0JCTwvVEFCTEU+DQotCQk8L0RJVj4NCi0JPC9zaXRlZWRpdDpsYXlvdXRhcmVhPg0KLTwvc2l0ZWVkaXQ6bGF5b3V0Pg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MDY5MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhMWJjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/PgotPHRhZz4KLUF1c3RyYWxp6wotPC90YWc+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2NjQ4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPgotPHhzbDp2YXJpYWJsZSBuYW1lPSJiYWRFbmNvZGluZyI+Ci1BdXN0cmFsaesKLTwveHNsOnZhcmlhYmxlPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkOGFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmVjOThmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWVjNTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk4MTEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dGVzdD4KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvZXVjanAueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1OWJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvZXVjanAueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+Ci08UGVyc29uPgotCTxBZGRyZXNzPgotCQk8Q2l0eT7C58/CPC9DaXR5PgotCQk8U3RhdGU+v8DG4MDuPC9TdGF0ZT4KLQkJPFppcD5NMUMgNUMyPC9aaXA+Ci0JCTxDb3VudHJ5Psb8y9w8L0NvdW50cnk+Ci0JPC9BZGRyZXNzPgotCTxOYW1lPgotCQk8Rmlyc3Q+sOzPujwvRmlyc3Q+Ci0JCTxMYXN0Ps7rzNo8L0xhc3Q+Ci0JPC9OYW1lPgotPC9QZXJzb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NGJjZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PgotPFBlcnNvbj4KLQk8QWRkcmVzcz4KLQkJPENpdHk+keWYYTwvQ2l0eT4KLQkJPFN0YXRlPpBfk96Q7DwvU3RhdGU+Ci0JCTxaaXA+TTFDIDVDMjwvWmlwPgotCQk8Q291bnRyeT6T+pZ7PC9Db3VudHJ5PgotCTwvQWRkcmVzcz4KLQk8TmFtZT4KLQkJPEZpcnN0PojqmFk8L0ZpcnN0PgotCQk8TGFzdD6X6ZbYPC9MYXN0PgotCTwvTmFtZT4KLTwvUGVyc29uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwOTVlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIGFiY2Q9ImVmYyIKLQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIAotCi0gPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ1YzFmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MTFhMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIGVuY29kaW5nPVVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjQyMmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9VVRGLTggCi08dGVzdD4KLTwvdGVzdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWVhZTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCBzdGFuZGFsb25lPSJ5ZXMiPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTBjNjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOD8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNjNmYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAKLQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIAotCi0gPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiOGU5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAgID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YWEyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4KLQotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2NTQ5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4KLSA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1ZmM1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4KLQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1ZGJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDllODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzlkNGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDViNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotICAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiOGQwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0JCi0JICAgICAgCQkgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZmZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZlMzdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmJlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M4Y2RmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZU1hbGZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZU1hbGZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YjUzMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2bGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2bGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDliYTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlTWFsZm9ybWVkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlTWFsZm9ybWVkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlZmNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYmRjMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3Y2NkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi14bWx1aXRlc3RzLmphcgotamF2YUNvbXBpbGVyLnhtbHVpdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlNjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODA5YzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHhtbHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cywKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLnVpLmlkZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ1MDI1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHhtbHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIGljb25zLwotamFycy5jb21waWxlLm9yZGVyID0geG1sdWl0ZXN0cy5qYXIKLXNvdXJjZS54bWx1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC54bWx1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvYnJrcF9vYmouZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MzFmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZWViNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi1CdW5kbGUtTmFtZS4wID0gWE1MIFVJIFRlc3RzCi12aWV3Lm5hbWUuMCA9IEVtYmVkZGVkIFhNTCBTdHJ1Y3R1cmVkIFRleHQgVmlld2VyCi0KLWNvbnRlbnRUeXBlVGVzdFhNTDk5LmN0PVRlc3QgWE1MIHN1Yi1jb250ZW50LXR5cGUKLWNvbnRlbnRUeXBlVGVzdFhNTDk5LmVkaXRvcj1UZXN0IFhNTCBzdWItY29udGVudC10eXBlIGVkaXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU1NWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCi0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0WE1MIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RYTUwiPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIHRlc3QgZm9yIGJyZWFrcG9pbnQgZXJyb3IgaGFuZGxpbmcgLS0+Ci0JCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuYnJlYWtwb2ludCI+Ci0JCTxicmVha3BvaW50Q29udHJpYnV0aW9uCi0JCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnByb3ZpZGVycy50ZXN0Ij4KLQkJPHByb3ZpZGVyCi0JCWNvbnRlbnRUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSxvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5CcmVha3BvaW50RXJyb3JQcm92aWRlciIKLQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuQnJlYWtwb2ludEVycm9yUHJvdmlkZXIiPgotCQk8L3Byb3ZpZGVyPgotCQk8L2JyZWFrcG9pbnRDb250cmlidXRpb24+Ci0JCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbmRlZEVkaXRvckFjdGlvbnMiPgotCQk8ZWRpdG9yQ29udHJpYnV0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmFjdGlvbnMiPgotCQkJPGFjdGlvbgotCQkJCXBvcHVwbWVudVBhdGg9Imdyb3VwLmVkaXRvciIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5FbmFibGVXYXJuaW5nQWN0aW9uIgotCQkJCW1lbnViYXJQYXRoPSJlZGl0L01lbnVBZGRpdGlvbnMiCi0JCQkJaWNvbj0iaWNvbnMvYnJrcF9vYmouZ2lmIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkVuYWJsZVdhcm5pbmdBY3Rpb24iPgotCQkJPC9hY3Rpb24+Ci0JCTwvZWRpdG9yQ29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLSAgICAgICBpZD0ieG1sLnVpLnRlc3RzMSIKLSAgICAgICBuYW1lPSIlQnVuZGxlLU5hbWUuMCIKLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+Ci0JCTxlZGl0b3IKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmskVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIgotICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3JYTUwiCi0gICAgICAgIGRlZmF1bHQ9ImZhbHNlIgotICAgICAgICBmaWxlbmFtZXM9IioueG1sOTkiCi0gICAgICAgIGljb249Imljb25zL3NvdXJjZUVkaXRvci5naWYiCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrJFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciIKLSAgICAgICAgbmFtZT0iJWNvbnRlbnRUeXBlVGVzdFhNTDk5LmVkaXRvciIKLSAgICAgICAgc3ltYm9saWNGb250TmFtZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmNvbnRlbnR0eXBlLmNvbnRlbnRUeXBlcyI+Ci0gICAgICAgIDxjb250ZW50LXR5cGUKLQkJCWZpbGUtZXh0ZW5zaW9ucz0ieG1sOTkiCi0JCQlwcmlvcml0eT0ibG93IgotCQkJbmFtZT0iJWNvbnRlbnRUeXBlVGVzdFhNTDk5LmN0IgotCQkJaWQ9InhtbDk5c291cmNlIgotCQkJYmFzZS10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIj4KLQkJPC9jb250ZW50LXR5cGU+Ci0JPC9leHRlbnNpb24+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmNvbW1lbnRFbGVtZW50SGFuZGxlciI+Ci0JCTxoYW5kbGVyLWN1c3RvbQotCQkJY29tbWVudHR5cGU9InhtbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmNvbW1lbnRlbGVtZW50LkNvbW1lbnRFbGVtZW50SGFuZGxlckZvckZvbyI+Ci0JCQk8c3RhcnR3aXRoIHByZWZpeD0iJCI+PC9zdGFydHdpdGg+Ci0JCTwvaGFuZGxlci1jdXN0b20+Ci0JPC9leHRlbnNpb24+Ci0gCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuZWRpdG9yQ29uZmlndXJhdGlvbiI+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9InNvdXJjZVJlY29uY2lsaW5nTGlzdGVuZXIiIHRhcmdldD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MQ29kZUZvbGRpbmdUZXN0Ii8+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2Jhc2ljWEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmNiZWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9jb252MlhIVE1MLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI1YzZiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pZGVudGlmeURURC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjODY0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxNWQ2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2ltcG9ydERURC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUxLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQyMWI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMi5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI0NTNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3NldHVwRmlsZXMvV2lyZWxlc3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmU2YTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3N0cmljdFhIVE1MLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGNkMGVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ZpbGVzL0pvYkRlc2NFUlJPUi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2FmdGVyX3Bhc3RlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGJmNTQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWYxZWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYmVmb3JlX3Bhc3RlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvaW52YWxpZF9kdGQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMGJiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYTAzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfbXVsdGlfZXJyb3IuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX3Vua25vd25fZWxlbWVudC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0M2FjYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyODg2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dfZG9jdHlwZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MzcyMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93b3V0X2RvY3R5cGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2QyNDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd3JvbmdfZHRkLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3UwMTFhbmkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDYzYWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3dpcmVsZXNzLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZjY2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJmYWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5Xb3JrYmVuY2hDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFRlc3QgdGhlIFhNTCBkZWxlZ2F0aW5nIHNvdXJjZSB2YWxpZGF0b3IuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLQlEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MIHNvdXJjZVZhbGlkYXRvciA9IG5ldyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MKCk7Ci0JCi0JLyoqCi0JICogVGVzdCB0aGF0IGZpbGVzIHRoYXQgY29udGFpbiBub24tOGJpdCBjaGFycyBhcmUgdmFsaWRhdGVkCi0JICogY29ycmVjdGx5LiBpLmUuIERvIG5vdCBwcm9kdWNlIGluY29ycmVjdCB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb244Qml0Q2hhcnMoKQotCXsKLQkJU3RyaW5nIHByb2pOYW1lID0gIlByb2plY3QiOwotCQlTdHJpbmcgZmlsZU5hbWUxID0gImludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sIjsKLQkJU3RyaW5nIGZpbGVOYW1lMiA9ICJpbnRlcm5hdGlvbmFsLnhzZCI7Ci0JCQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJCXRyeSB7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKHByb2pOYW1lICsgIi8iICsgZmlsZU5hbWUxKSk7Ci0JCWlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJZmlsZS5jcmVhdGUoRmlsZUxvY2F0b3Iub3BlblN0cmVhbShYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSwgbmV3IFBhdGgoIi90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbCIpLCBmYWxzZSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKHByb2pOYW1lICsgIi8iICsgZmlsZU5hbWUyKSk7Ci0JCWlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJZmlsZS5jcmVhdGUoRmlsZUxvY2F0b3Iub3BlblN0cmVhbShYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSwgbmV3IFBhdGgoIi90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZCIpLCBmYWxzZSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQgPSBuZXcgV29ya2JlbmNoQ29udGV4dCgpOwotCQlMaXN0IGZpbGVMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCQlmaWxlTGlzdC5hZGQoIi8iICsgcHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTEpOwotCQljb250ZXh0LnNldFZhbGlkYXRpb25GaWxlVVJJcyhmaWxlTGlzdCk7Ci0JCVRlc3RSZXBvcnRlciByZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJdHJ5ewotCQkJc291cmNlVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJfQotCQljYXRjaChWYWxpZGF0aW9uRXhjZXB0aW9uIGUpewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQkKLQkJYXNzZXJ0RmFsc2UoIk1lc3NhZ2VzIHdlcmUgcmVwb3J0ZWQgb24gdmFsaWQgZmlsZSAxLiIsIHJlcG9ydGVyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCQkKLQkJV29ya2JlbmNoQ29udGV4dCBjb250ZXh0MiA9IG5ldyBXb3JrYmVuY2hDb250ZXh0KCk7Ci0JCUxpc3QgZmlsZUxpc3QyID0gbmV3IEFycmF5TGlzdCgpOwotCQlmaWxlTGlzdDIuYWRkKCIvIiArIHByb2pOYW1lICsgIi8iICsgZmlsZU5hbWUyKTsKLQkJY29udGV4dDIuc2V0VmFsaWRhdGlvbkZpbGVVUklzKGZpbGVMaXN0Mik7Ci0JCVRlc3RSZXBvcnRlciByZXBvcnRlcjIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCXRyeXsKLQkJCXNvdXJjZVZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0MiwgcmVwb3J0ZXIyKTsKLQkJfQotCQljYXRjaChWYWxpZGF0aW9uRXhjZXB0aW9uIGUpewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQkKLQkJYXNzZXJ0RmFsc2UoIk1lc3NhZ2VzIHdlcmUgcmVwb3J0ZWQgb24gdmFsaWQgZmlsZSAyLiIsIHJlcG9ydGVyMi5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQl9Ci0JCi0JLyoqCi0JICogUmVncmVzc2lvbiB0ZXN0IGZvciBCdWcgMjg1Mjg1Ci0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwjdGVzdFJlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52YWxpZGF0aW9uLlRlc3RIVE1MVmFsaWRhdG9yI3Rlc3RSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZwotCSAqIEBzZWUgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52YWxpZGF0aW9uLkpTUEhUTUxWYWxpZGF0b3JUZXN0I3Rlc3RSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZygpIHRocm93cyBFeGNlcHRpb257Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJSZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KHByb2plY3ROYW1lLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdGF0ZUxvY2F0aW9uKCkuYXBwZW5kKGdldE5hbWUoKSksIG51bGwpOwotCQkKLQkJSUZpbGUgdGVzdEZpbGUgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQkvL2dldCB0ZXN0IGZpbGUKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgidGVzdHJlc291cmNlcy9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZyIsIHByb2plY3ROYW1lKTsKLQkJCXRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJUZXN0MS54bWwiKTsKLQkJCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgdGVzdEZpbGUgKyAiIGRvZXMgbm90IGV4aXN0IiwgdGVzdEZpbGUuZXhpc3RzKCkpOwotCQkJCi0JCQkvL2dldCB0aGUgZG9jdW1lbnQKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQodGVzdEZpbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCi0JCQkvL3NldCB1cCBmb3IgdmFsaWRhdG9yCi0JCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQgPSBuZXcgV29ya2JlbmNoQ29udGV4dCgpOwotCQkJTGlzdCBmaWxlTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWZpbGVMaXN0LmFkZCh0ZXN0RmlsZS5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQljb250ZXh0LnNldFZhbGlkYXRpb25GaWxlVVJJcyhmaWxlTGlzdCk7Ci0JCQkKLQkJCS8vdmFsaWRhdGUgY2xlYW4gZmlsZQotCQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQkJc291cmNlVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQsIHJlcG9ydGVyKTsKLQkJCWFzc2VydEZhbHNlKCJUaGVyZSBzaG91bGQgYmUgbm8gdmFsaWRhdGlvbiBlcnJvcnMgb24gIiArIHRlc3RGaWxlLCByZXBvcnRlci5pc01lc3NhZ2VSZXBvcnRlZCgpKTsKLQkJCQotCQkJLy9uZWVkIHRvIGR5bmFtaWNhbGx5IGZpbmQgd2hlcmUgdGhlIC0tPiBpcyBiZWNhdXNlCi0JCQkvL2l0cyBkaWZmZXJlbnQgb24gdW5peCB2cyB3aW5kb3dzIGJlY2F1c2Ugb2YgbGluZSBlbmRpbmdzCi0JCQlTdHJpbmcgY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJCWludCBlbmRDb21tZW50SW5kZXggPSBjb250ZW50cy5pbmRleE9mKCItLT4iKTsKLQkJCQotCQkJLy9yZW1vdmUgLS0+Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGVuZENvbW1lbnRJbmRleCwgMywgIiIpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGZpbGUgd2l0aCBlcnJvcgotCQkJcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCk7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQkJYXNzZXJ0VHJ1ZSgiVGhlcmUgc2hvdWxkIGJlIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQotCQkJLy9yZXBsYWNlIC0tPgotCQkJZG9jdW1lbnQucmVwbGFjZShlbmRDb21tZW50SW5kZXgsIDAsICItLT4iKTsKLQkJCQotCQkJLy92YWxpZGF0ZSBjbGVhbiBmaWxlCi0JCQlyZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJCXNvdXJjZVZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIG5vIHZhbGlkYXRpb24gZXJyb3JzIG9uICIgKyB0ZXN0RmlsZSwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCX0gY2F0Y2goVmFsaWRhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJDb3VsZCBub3QgdmFsaWRhdGUgdGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgQnVnIDI3NjMzNwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZUFnYWluc3REVEQoKSB0aHJvd3MgRXhjZXB0aW9uewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiVGVzdFZhbGlkYXRlQWdhaW5zdERURCI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KHByb2plY3ROYW1lLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdGF0ZUxvY2F0aW9uKCkuYXBwZW5kKGdldE5hbWUoKSksIG51bGwpOwotCQkKLQkJSUZpbGUgdGVzdEZpbGUgPSBudWxsOwotCQl0cnkgewotCQkJLy9nZXQgdGVzdCBmaWxlCi0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoInRlc3RyZXNvdXJjZXMvVGVzdFZhbGlkYXRlQWdhaW5zdERURCIsIHByb2plY3ROYW1lKTsKLQkJCXRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJzaW1wbGUueG1sIik7Ci0JCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIHRlc3RGaWxlICsgIiBkb2VzIG5vdCBleGlzdCIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQkJCQotCQkJLy9zZXQgdXAgZm9yIHZhbGlkYXRvcgotCQkJV29ya2JlbmNoQ29udGV4dCBjb250ZXh0ID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJCUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlmaWxlTGlzdC5hZGQodGVzdEZpbGUuZ2V0RnVsbFBhdGgoKS50b1BvcnRhYmxlU3RyaW5nKCkpOwotCQkJY29udGV4dC5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QpOwotCQkJCi0JCQkvL3ZhbGlkYXRlIGZpbGUsIHRoZXJlIHNob3VsZCBiZSBvbmUgZXJyb3IKLQkJCVRlc3RSZXBvcnRlciByZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJCXNvdXJjZVZhbGlkYXRvci52YWxpZGF0ZShjb250ZXh0LCByZXBvcnRlcik7Ci0JCQlhc3NlcnRGYWxzZSgiVGhlcmUgc2hvdWxkIGJlIGFuIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgZm9yIG5vdCBjb25mb3JtaW5nIHRvIHRoZSBEVEQgIiArIHRlc3RGaWxlLCAhcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCX0gY2F0Y2goVmFsaWRhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJDb3VsZCBub3QgdmFsaWRhdGUgdGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCQotCS8qKgotCSAqIEEgPGNvZGU+SVJlcG9ydGVyPC9jb2RlPiBmb3IgdGVzdGluZyB2YWxpZGF0b3JzCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBUZXN0UmVwb3J0ZXIgaW1wbGVtZW50cyBJUmVwb3J0ZXIgewotCQlwcml2YXRlIGJvb2xlYW4gbWVzc2FnZVJlcG9ydGVkID0gZmFsc2U7Ci0JCQotCQlwdWJsaWMgVGVzdFJlcG9ydGVyKCl7fQotCQkKLQkJcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJbWVzc2FnZVJlcG9ydGVkID0gdHJ1ZTsKLQkJfQotCQkKLQkJcHVibGljIGJvb2xlYW4gaXNNZXNzYWdlUmVwb3J0ZWQoKSB7Ci0JCQlyZXR1cm4gbWVzc2FnZVJlcG9ydGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZGlzcGxheVN1YnRhc2soSVZhbGlkYXRvciB2YWxpZGF0b3IsIElNZXNzYWdlIG1lc3NhZ2UpIHt9Ci0KLQkJcHVibGljIExpc3QgZ2V0TWVzc2FnZXMoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4sIE9iamVjdCBvYmplY3QpIHt9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHt9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlTWVzc2FnZVN1YnNldChJVmFsaWRhdG9yIHZhbGlkYXRvciwgT2JqZWN0IG9iaiwgU3RyaW5nIGdyb3VwTmFtZSkge30KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3RNYXJrdXBWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRhZGUzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuSW5jcmVtZW50YWxSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXJrdXBWYWxpZGF0b3I7Ci0KLS8qKgotICogVGVzdHMgTWFya3VwVmFsaWRhdG9yCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0TWFya3VwVmFsaWRhdG9yIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgTWFya3VwVmFsaWRhdG9yIGZWYWxpZGF0b3I7Ci0JcHJpdmF0ZSBJUmVwb3J0ZXIgZlJlcG9ydGVyOwotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jdW1lbnQ7Ci0KLQkvKioKLQkgKiBWYWxpZGF0ZXMgZG9jdW1lbnQKLQkgKiAKLQkgKiBAcGFyYW0gY29udGVudHMKLQkgKiAgICAgICAgICAgIGNvbnRlbnRzIHRvIHNldCBpbiBkb2N1bWVudAotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSB3YXMgYSB2YWxpZGF0aW9uIGVycm9yIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZUVycm9yKFN0cmluZyBjb250ZW50cykgewotCQlmRG9jdW1lbnQuc2V0KGNvbnRlbnRzKTsKLQkJZlZhbGlkYXRvci52YWxpZGF0ZShuZXcgUmVnaW9uKDAsIGZEb2N1bWVudC5nZXRMZW5ndGgoKSksIG51bGwsIGZSZXBvcnRlcik7Ci0JCXJldHVybiBmUmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8ganVzdCBjcmVhdGUgb25jZQotCQlpZiAoZlZhbGlkYXRvciA9PSBudWxsKQotCQkJZlZhbGlkYXRvciA9IG5ldyBNYXJrdXBWYWxpZGF0b3IoKTsKLQkJaWYgKGZSZXBvcnRlciA9PSBudWxsKQotCQkJZlJlcG9ydGVyID0gbmV3IEluY3JlbWVudGFsUmVwb3J0ZXIobnVsbCk7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkKLQkJCWZEb2N1bWVudCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJvbmZpcmUueG1sIiwgIiIsIG51bGwpOwotCi0JCWZWYWxpZGF0b3IuY29ubmVjdChmRG9jdW1lbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZWYWxpZGF0b3IuZGlzY29ubmVjdChmRG9jdW1lbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzSW5FbmRUYWcoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgYXR0cmlidXRlcyBpbiBlbmQgdGFnIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcCBkcm9wPVwicm9sbFwiPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBhdHRyaWJ1dGVzIGluIGVuZCB0YWcgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9zaW5nQnJhY2tldCgpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBjbG9zaW5nIGJyYWNrZXQgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgPC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBjbG9zaW5nIGJyYWNrZXQgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eVRhZygpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBlbXB0eSB0YWcgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPD4iKSk7Ci0KLQkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgZW1wdHkgdGFnIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlVmFsdWUoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgYXR0cmlidXRlIGhhcyBubyB2YWx1ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgYXR0cmlidXRlIG1pc3NpbmcgdmFsdWUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD0+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBhdHRyaWJ1dGUgbWlzc2luZyB2YWx1ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJyb2xsXCI+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3BhY2VCZWZvcmVOYW1lKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IHRhZyBoYXMgc3BhY2UgYmVmb3JlIG5hbWUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPCAgICBzdG9wPjwvc3RvcD4iKSk7Ci0KLQkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgdGFnIGhhcyBzcGFjZSBiZWZvcmUgbmFtZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFF1b3Rlc0ZvckF0dHJpYnV0ZVZhbHVlcygpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwiPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cInJvbGw+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwnPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgbWlzc2luZyBxdW90ZXMgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1yb2xsPjwvc3RvcD4iKSk7Ci0KLQkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwiXCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwicm9sbFwiPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cJ1wnPjwvc3RvcD4iKSk7Ci0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IG1pc3NpbmcgcXVvdGVzIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cJ3JvbGxcJz48L3N0b3A+IikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvQWJzdHJhY3RYTUxVSVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvQWJzdHJhY3RYTUxVSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlZjRhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL0Fic3RyYWN0WE1MVUlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBjb3BpZWQgb3ZlciBmcm9tIFhTTCBVSSBUZXN0cyBmb3IgWE1MIFVJIFRlc3RzCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gbWFrZSB1c2Ugb2YgKGNvcHkgb2YgSlNQIFVJIFRlc3RzJykgUHJvamVjdFV0aWwgdG8gc2tpcAotICogICAgICAgICBmaWxlLXN5c3RlbSBjYWxscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLQotLyogCi0gKiBNYWRlIGFic3RyYWN0LCBzbyB3b24ndCBiZSBhdXRvbWF0aWNhbGx5IHBpY2tlZCB1cCBhcyB0ZXN0IChzaW5jZSBpbnRlbmRlZCB0byBiZSBzdWJjbGFzc2VkKS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0WE1MVUlUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gInRlc3RyZXNvdXJjZXMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJBYnN0cmFjdFhNTFVJVGVzdF90ZXN0cmVzb3VyY2VzIjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkKLQkJewotCQkJUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSwgbnVsbCwgbnVsbCk7Ci0JCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoUFJPSkVDVF9GSUxFUywgVEVTVF9QUk9KRUNUX05BTUUpOwotCi0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpCi0JewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODcxZTNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRAotCQkJCSsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjljNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsNCi0NCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07DQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQotaW1wb3J0IGphdmEubmV0LlVSTDsNCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KLQ0KLS8qKg0KLSAqIFNvbWUgdXRpbGl0aWVzIGZvciBjcmVhdGluZyBwcm9qZWN0cywgYW5kIGNvcHlpbmcgZmlsZXMgaW50byB0aGUgd29ya3NwYWNlLg0KLSAqIENvcGllZCBmcm9tIEpTUCBVSSB0ZXN0cy4NCi0gKi8NCi1wdWJsaWMgY2xhc3MgUHJvamVjdFV0aWwgew0KLQ0KLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gew0KLQkJRW51bWVyYXRpb24gZW50cmllcyA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsNCi0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgew0KLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsNCi0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOw0KLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgew0KLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsNCi0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsNCi0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQkJCX0NCi0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOw0KLQkJCX0NCi0JCQllbHNlIHsNCi0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsNCi0JCQl9DQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGVudHJ5UGF0aCArICIgLT4gIiArIHRhcmdldFBhdGgpOw0KLQkJfQ0KLQl9DQotDQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlGaWxlIGZpbGUgPSBudWxsOw0KLQkJVVJMIGVudHJ5ID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsNCi0JCWlmIChlbnRyeSAhPSBudWxsKSB7DQotCQkJdHJ5IHsNCi0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsNCi0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7DQotCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7DQotCQkJCWludCBpID0gLTE7DQotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsNCi0JCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsNCi0JCQkJfQ0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7DQotCQkJCWlmIChmaWxlICE9IG51bGwpIHsNCi0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgew0KLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZSB7DQotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCQl9DQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgew0KLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBmaWxlOw0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gcm9vdEVudHJ5IC0gYXZvaWQgdHJhaWxpbmcgc2VwYXJhdG9ycw0KLQkgKiBAcGFyYW0gZnVsbFRhcmdldFBhdGgNCi0JICovDQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB7DQotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgew0KLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsNCi0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7DQotCQkJfQ0KLQkJfTsNCi0JCXRyeSB7DQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQl9DQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JfQ0KLQ0KLQkvKioNCi0JICogDQotCSAqIEBwYXJhbSBlbnRyeW5hbWUNCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIFRFU1QgcGx1Z2luIHN0YXJ0aW5nIHcvIGEgIi8iIChlZy4NCi0JICogICAgICAgICAgICAiL3Rlc3RmaWxlcy9idWdudW1iZXIvc3RydXRzLWxvZ2ljLnRsZCIpDQotCSAqIEBwYXJhbSBmdWxsUGF0aA0KLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8ganVuaXQgdGVzdCB3b3JrcGFjZSAoZWcuDQotCSAqICAgICAgICAgICAgIi9teXJ1bnRpbWVwcm9qL3N0cnV0cy1sb2dpYy50bGQiKQ0KLQkgKiBAcmV0dXJuDQotCSAqLw0KLQlwdWJsaWMgc3RhdGljIElGaWxlIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIGVudHJ5bmFtZSwgZmluYWwgU3RyaW5nIGZ1bGxQYXRoKSB7DQotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07DQotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgew0KLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOw0KLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsNCi0JCQl9DQotCQl9Ow0KLQkJdHJ5IHsNCi0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKHJ1bm5hYmxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCX0NCi0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJfQ0KLQkJcmV0dXJuIGZpbGVbMF07DQotCX0NCi0NCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7DQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihuYW1lKTsNCi0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7DQotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOw0KLQkJfQ0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7DQotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7DQotCQl9DQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOw0KLQkJdHJ5IHsNCi0JCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJfQ0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgew0KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQl9DQotCQlyZXR1cm4gcHJvamVjdDsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NzZmNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhNTERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWdpbmZvLlhNTFRhZ0luZm9Ib3ZlclByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLlhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLnByb3BlcnRpZXMuWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgeG1sIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgby5nZXRDbGFzcygpLCBYTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8uZ2V0Q2xhc3MoKSwgWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJT2JqZWN0W10gaG92ZXJzID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb25zKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9DVU1FTlRBVElPTlRFWFRIT1ZFUiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpLnRvQXJyYXkoKTsKLQkJYXNzZXJ0VHJ1ZSgibm8gZG9jdW1lbnRhdGlvbiB0ZXh0IGhvdmVyIGZvciAiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIGhvdmVycy5sZW5ndGggPiAwKTsKLS8vCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotLy8JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgby5nZXRDbGFzcygpLCBYTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3IuY2xhc3MpOwotCQlDbGFzcyByZXF1aXJlZCA9IFhNTFRhZ0luZm9Ib3ZlclByb2Nlc3Nvci5jbGFzczsKLQkJYm9vbGVhbiByZXF1aXJlZEZvdW5kID0gZmFsc2U7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaG92ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZihyZXF1aXJlZC5lcXVhbHMoaG92ZXJzW2ldLmdldENsYXNzKCkpKQotCQkJCXJlcXVpcmVkRm91bmQgPSB0cnVlOwotCQl9Ci0JCWFzc2VydFRydWUocmVxdWlyZWQuZ2V0TmFtZSgpICsgIiBub3QgbG9hZGVkIiwgcmVxdWlyZWRGb3VuZCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9VQkxFQ0xJQ0tTVFJBVEVHWSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb3VibGVjbGljayBzdHJhdGVneSBmb3IgIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvdWJsZWNsaWNrIHN0cmF0ZWd5IGZvciAiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIG8uZ2V0Q2xhc3MoKSwgWE1MRG91YmxlQ2xpY2tTdHJhdGVneS5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0TmV3WE1MR2VuZXJhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3ROZXdYTUxHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU3MDQxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3ROZXdYTUxHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NQ29udGVudEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hNTEdlbmVyYXRvcjsKLQotcHVibGljIGNsYXNzIFRlc3ROZXdYTUxHZW5lcmF0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0Jc3RhdGljIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLQkKLQlzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV8xID0gIlNjaGVtYTEiOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUFfMiA9ICJTY2hlbWEyIjsgLy8kTk9OLU5MUy0xJAotCXN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9FTEVNRU5UXzEgPSAiR29sZkNvdW50cnlDbHViIjsgLy8kTk9OLU5MUy0xJAotCXN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9FTEVNRU5UXzIgPSAiQmlsbEluZm8iOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdGVzdC4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwkKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggbm8gb3B0aW9ucyBzZWxlY3RlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX2JhcmUoKSB7Ci0JCXJ1bk9uZVRlc3QoMCwgUk9PVF9FTEVNRU5UXzEsIFNDSEVNQV8xKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggb3B0aW9uYWwgYXR0cmlidXRlcyBpbmNsdWRlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX29wdEF0dHIoKSB7Ci0JCXJ1bk9uZVRlc3QoRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT1BUSU9OQUxfQVRUUklCVVRFUywgUk9PVF9FTEVNRU5UXzEsIFNDSEVNQV8xKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggb3B0aW9uYWwgZWxlbWVudHMgaW5jbHVkZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19vcHRFbGVtKCkgewotCQlydW5PbmVUZXN0KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09QVElPTkFMX0VMRU1FTlRTLCBST09UX0VMRU1FTlRfMSwgU0NIRU1BXzEpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCBlbGVtZW50cyBzZXQgdG8gaW5pdGlhbCBmaXJzdCB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX29wdEZpcnN0KCkgewotCQlydW5PbmVUZXN0KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX0ZJUlNUX0NIT0lDRSB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX0ZJUlNUX1NVQlNUSVRVVElPTiwgUk9PVF9FTEVNRU5UXzEsIFNDSEVNQV8xKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggdGV4dCBub2Rlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX29wdFRleHROb2RlcygpIHsKLQkJcnVuT25lVGVzdChET01Db250ZW50QnVpbGRlci5CVUlMRF9URVhUX05PREVTLCBST09UX0VMRU1FTlRfMSwgU0NIRU1BXzEpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCBhbGwgb3B0aW9ucyBzZWxlY3RlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX2FsbCgpIHsKLQkJcnVuT25lVGVzdChET01Db250ZW50QnVpbGRlci5CVUlMRF9PUFRJT05BTF9BVFRSSUJVVEVTIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT1BUSU9OQUxfRUxFTUVOVFMgfCAKLQkJCQkgIERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX0ZJUlNUX0NIT0lDRSB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX0ZJUlNUX1NVQlNUSVRVVElPTiB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX1RFWFRfTk9ERVMsIFJPT1RfRUxFTUVOVF8xLCBTQ0hFTUFfMSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIGEgc2VwYXJhdGUgc2NoZW1hIGluIHdoaWNoIG5hbWVzcGFjZXMgbXVzdCBiZSBxdWFsaWZpZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5YR19uc1F1YWxpZmllZCgpewotCQlydW5PbmVUZXN0KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09QVElPTkFMX0FUVFJJQlVURVMgfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9PUFRJT05BTF9FTEVNRU5UUyB8IAotCQkJCSAgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfRklSU1RfQ0hPSUNFIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfRklSU1RfU1VCU1RJVFVUSU9OIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfVEVYVF9OT0RFUywgUk9PVF9FTEVNRU5UXzIsIFNDSEVNQV8yKTsKLQl9Ci0JCi0JLyoqCi0JICogUnVucyBhIGdlbmVyaWMgZ2VuZXJhdGUgKyBjb21wYXJpc29uIHRlc3QuCi0JICogQHBhcmFtIGJ1aWxkUG9saWN5IEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBidWlsZCBwb2xpY3kgZm9yIHRoaXMgZ2VuZXJhdGlvbi4KLQkgKiBAcGFyYW0gcm9vdEVsZW1lbnQgRGVzaXJlZCByb290IGVsZW1lbnQuCi0JICogQHBhcmFtIHhzZFVyaSBVUkkgb2YgdGhlIGRlc2lyZWQgWE1MIHNjaGVtYS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgcnVuT25lVGVzdChpbnQgYnVpbGRQb2xpY3ksIFN0cmluZyByb290RWxlbWVudCwgU3RyaW5nIHhzZFVyaUZpbGUpIHsKLQkgIHRyeSB7Ci0JCSAgLy8gZ2VuZXJpYyBzZXR1cAotCQkgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWE1MVUlUZXN0c1BsdWdpbi5nZXRJbnN0YWxsVVJMKCk7Ci0JCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzLyIgKyB4c2RVcmlGaWxlICsgIi54c2QiOyAvLyROT04tTkxTLTMkCi0JCSAgU3RyaW5nW10gZXJyb3JJbmZvID0gbmV3IFN0cmluZ1syXTsKLQkJICBDTURvY3VtZW50IGNtZCA9IE5ld1hNTEdlbmVyYXRvci5jcmVhdGVDTURvY3VtZW50KHVyaSwgZXJyb3JJbmZvKTsKLQkJICBOZXdYTUxHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IE5ld1hNTEdlbmVyYXRvcih1cmksIGNtZCk7Ci0JCQkgIAotCQkgIFN0cmluZyBpZCA9IHhzZFVyaUZpbGUgKyAiLSIgKyByb290RWxlbWVudCArICItIiArIGJ1aWxkUG9saWN5OwotCQkgIAotCQkgIFN0cmluZyBmaWxlTmFtZVJlc3VsdCA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvVGVzdGVkLSIgKyBpZCArICIueG1sIjsgLy8kTk9OLU5MUy0yJAotCQkgIEZpbGUgbkZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZVJlc3VsdCk7Ci0JCSAgaWYgKCFuRmlsZS5leGlzdHMoKSkgewotCQkJICBuRmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0JCSAgfQotCQkgIAotCQkgIFN0cmluZyBmaWxlTmFtZUNvbXBhcmUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL0NvbXBhcmUtIiArIGlkICsgIi54bWwiOyAvLyROT04tTkxTLTIkCi0JCSAgCi0JCSAgZ2VuZXJhdG9yLnNldEJ1aWxkUG9saWN5KGJ1aWxkUG9saWN5KTsKLQkJICBnZW5lcmF0b3Iuc2V0Um9vdEVsZW1lbnROYW1lKHJvb3RFbGVtZW50KTsKLQkJICBnZW5lcmF0b3Iuc2V0RGVmYXVsdFN5c3RlbUlkKHhzZFVyaUZpbGUgKyAiLnhzZCIpOyAvLyROT04tTkxTLTEkCi0JCSAgZ2VuZXJhdG9yLmNyZWF0ZU5hbWVzcGFjZUluZm9MaXN0KCk7Ci0JCSAgZ2VuZXJhdG9yLmNyZWF0ZVhNTERvY3VtZW50KGZpbGVOYW1lUmVzdWx0KTsKLQkJICAKLQkJICBYTUxEaWZmIGRpZmZlciA9IG5ldyBYTUxEaWZmKCk7Ci0JCSAgYXNzZXJ0VHJ1ZSgiVGhlIFhNTCBmaWxlcyBhcmUgbm90IGlkZW50aWNhbC4iLCBkaWZmZXIuZGlmZihmaWxlTmFtZUNvbXBhcmUsIGZpbGVOYW1lUmVzdWx0LCAiWE1MIikpOyAvLyROT04tTkxTLTIkCi0JCSAgCi0JCSAgLy8gaWYgd2UndmUgbWFkZSBpdCB0aGlzIGZhciwgZGVsZXRlIHRoZSBvdXRwdXQgZmlsZQotCQkgIHJlbW92ZShuRmlsZSk7Ci0JICB9Ci0JICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgfSAJICAJCQotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gZmlsZQotCSAqLwotCXByaXZhdGUgdm9pZCByZW1vdmUoRmlsZSBmaWxlKSB7Ci0JCWlmKGZpbGUuaXNEaXJlY3RvcnkoKSkgewotCQkJRmlsZVtdIGNoaWxkcmVuID0gZmlsZS5saXN0RmlsZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCQlyZW1vdmUoY2hpbGRyZW5baV0pOwotCQkJfQotCQl9Ci0JCWZpbGUuZGVsZXRlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDdhODk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE9wZW5FZGl0b3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIFRlc3QgbWlzYyBlZGl0b3IgZnVuY3Rpb25zIHdpdGggYW4gb3BlbiB4bWwgZWRpdG9yLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdE9wZW5FZGl0b3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RPcGVuRWRpdG9yWE1MIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX05BTUUgPSAidGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yWE1MLnhtbCI7Ci0KLQlwcml2YXRlIHN0YXRpYyBJRWRpdG9yUGFydCBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0T3BlbkVkaXRvclhNTCgpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvclhNTCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIG9ubHkgY3JlYXRlIHByb2plY3QgYW5kIGZpbGUgb25jZQotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCWFzc2VydFRydWUoIklucHV0IGZpbGUgbm90IGFjY2Vzc2libGU6ICIgKyBmRmlsZS5nZXRGdWxsUGF0aCgpLCBmRmlsZS5pc0FjY2Vzc2libGUoKSk7Ci0KLQkJLy8gZWRpdG9yIGlzIG9wZW5lZCBlYWNoIHRpbWUKLQkJaWYgKGZJc1NldHVwICYmIGZFZGl0b3IgPT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlmRWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZkZpbGUsIHRydWUsIHRydWUpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciAiICsgZkVkaXRvciwgKGZFZGl0b3IgaW5zdGFuY2VvZiBYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB8fCAoZkVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBlZGl0b3IgaXMgY2xvc2VkIGVhY2ggdGltZQotCQlpZiAoZkVkaXRvciAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCXBhZ2UuY2xvc2VFZGl0b3IoZkVkaXRvciwgZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCi0JCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0ZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rRmlsZSAhPSBudWxsICYmICFibGFua0ZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0ZpbGU7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBzZXR0aW5nIHRleHQgaW4gZG9jdW1lbnQgb2Ygb3BlbiBlZGl0b3IuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50KCkgewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJdHJ5IHsKLQkJCWRvY3VtZW50LnNldCgiPGhlbGxvPjwvaGVsbG8+Iik7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2V0IHRleHQgaW4gZWRpdG9yOiAiICsgZSwgZmFsc2UpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdCBzdHJ1Y3R1cmVkIGRvY3VtZW50IGlzIHJlbG9hZGVkIG9uIHJlc291cmNlIGNoYW5nZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNTEwNjkoKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJZG9jLnNldCgiPGh0bWw+PGJvZHk+PGgxPlRpdGxlPC9oMT48L2JvZHk+PC9odG1sPiIpOwotCQkvLyBzZXQgaDEgdG8gcmVhZG9ubHkKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbE1hbmFnZXIuZ2V0RXhpc3RpbmdNb2RlbEZvckVkaXQoZG9jKTsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJTm9kZUxpc3QgbmwgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoMSIpOwotCQkJCUlET01FbGVtZW50IGgxID0gKElET01FbGVtZW50KSBubC5pdGVtKDApOwotCQkJCWgxLnNldEVkaXRhYmxlKGZhbHNlLCB0cnVlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQkJU3RyaW5nIG5ld0NvbnRlbnQgPSAibmV3IGNvbnRlbnQiOwotCQkoKElEb2N1bWVudEV4dGVuc2lvbjQpIGRvYykuc2V0KG5ld0NvbnRlbnQsIGZGaWxlLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBjb250ZW50cyBpbiBkb2N1bWVudCB3aXRoIHJlYWQgb25seSByZWdpb25zIGZhaWxlZCIsIG5ld0NvbnRlbnQsIGRvYy5nZXQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNzE3NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm9wZXJ0aWVzLkNvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTb3VyY2VFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJ0ZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24ueG1sIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUVkaXRvclBhcnQgZk1haW5FZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJc3VwZXIoIlRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmICghZklzU2V0dXApIHsKLQkJCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCQljcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQlmRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBGSUxFX05BTUUpOwotCQkJZklzU2V0dXAgPSB0cnVlOwotCQl9Ci0JCS8vIGVkaXRvciBpcyBvcGVuZWQgZWFjaCB0aW1lCi0JCWlmIChmSXNTZXR1cCAmJiBmTWFpbkVkaXRvciA9PSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCWZNYWluRWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZkZpbGUsIHRydWUsIHRydWUpOwotCQkJaWYgKGZNYWluRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpCi0JCQkJZkVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgZk1haW5FZGl0b3I7Ci0JCQllbHNlIGlmIChmTWFpbkVkaXRvciAhPSBudWxsKSB7Ci0JCQkJT2JqZWN0IGFkYXB0ZXIgPSBmTWFpbkVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKQotCQkJCQlmRWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBhZGFwdGVyOwotCQkJfQotCQkJaWYgKGZFZGl0b3IgPT0gbnVsbCkKLQkJCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yICIgKyAoKGZNYWluRWRpdG9yICE9IG51bGwpID8gZk1haW5FZGl0b3IuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgOiAiIiksIGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGVkaXRvciBpcyBjbG9zZWQgZWFjaCB0aW1lCi0JCWlmIChmTWFpbkVkaXRvciAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCXBhZ2UuY2xvc2VFZGl0b3IoZk1haW5FZGl0b3IsIGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZNYWluRWRpdG9yID0gbnVsbDsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJvcGVydHlTb3VyY2VSZW1vdmFsKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCS8vIHNldCB1cCB0aGUgZWRpdG9yIGRvY3VtZW50Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgIjx0ZXN0PjxteXByb3BlcnR5IHByb3BzPVwieWVzXCIgLz48L3Rlc3Q+Iik7Ci0KLQkJLy8gc2V0IGN1cnJlbnQgc2VsZWN0aW9uIGluIGVkaXRvcgotCQlJU2VsZWN0aW9uIHNldFNlbGVjdGlvbiA9IG5ldyBUZXh0U2VsZWN0aW9uKDksIDApOwotCQlmRWRpdG9yLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuc2V0U2VsZWN0aW9uKHNldFNlbGVjdGlvbik7Ci0KLQkJLy8gZ2V0IGN1cnJlbnQgc2VsZWN0aW9uIGluIGVkaXRvcgotCQlPYmplY3QgaXRlbSA9IG51bGw7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZkVkaXRvci5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCWl0ZW0gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotCi0JCQlJUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldCA9IChJUHJvcGVydHlTaGVldFBhZ2UpIGZFZGl0b3IuZ2V0QWRhcHRlcihJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UgZm91bmQiLCBwcm9wZXJ0eVNoZWV0IGluc3RhbmNlb2YgQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UpOwotCQkJaWYgKHByb3BlcnR5U2hlZXQgaW5zdGFuY2VvZiBDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSkgewotCQkJCUNvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlIGNwcyA9IChDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSkgcHJvcGVydHlTaGVldDsKLQkJCQlQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiBjb25maWcgPSBjcHMuZ2V0Q29uZmlndXJhdGlvbigpOwotCQkJCWFzc2VydE5vdE51bGwoIk5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm91bmQiLCBjb25maWcpOwotCi0JCQkJSVByb3BlcnR5U291cmNlUHJvdmlkZXIgcHJvdmlkZXIgPSBjb25maWcuZ2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihjcHMpOwotCQkJCWFzc2VydE5vdE51bGwoIk5vIHByb3BlcnR5IHNoZWV0IHByb3ZpZGVyIGZvdW5kIiwgcHJvdmlkZXIpOwotCi0JCQkJSVByb3BlcnR5U291cmNlIHNvdXJjZSA9IHByb3ZpZGVyLmdldFByb3BlcnR5U291cmNlKGl0ZW0pOwotCQkJCWlmIChzb3VyY2UgaW5zdGFuY2VvZiBJUHJvcGVydHlTb3VyY2VFeHRlbnNpb24pIHsKLQkJCQkJYm9vbGVhbiBjYW5SZW1vdmUgPSAoKElQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbikgc291cmNlKS5pc1Byb3BlcnR5UmVtb3ZhYmxlKCJwcm9wcyIpOwotCQkJCQlhc3NlcnRUcnVlKCJDdXJyZW50IHByb3BlcnR5IGNhbm5vdCBiZSByZW1vdmVkIiwgY2FuUmVtb3ZlKTsKLQkJCQkJaWYgKGNhblJlbW92ZSkgewotCQkJCQkJKChJUHJvcGVydHlTb3VyY2VFeHRlbnNpb24pIHNvdXJjZSkucmVtb3ZlUHJvcGVydHkoInByb3BzIik7Ci0JCQkJCQlhc3NlcnRUcnVlKCJDdXJyZW50IHByb3BlcnR5IGNhbm5vdCBiZSByZW1vdmVkIiwgdHJ1ZSk7Ci0JCQkJCQkvLyBmb3JjZSByZXR1cm4gaGVyZSwgdG8gYXZvaWQgbGFzdCBmYWxsIHRocm91Z2gKLQkJCQkJCS8vIGZhaWxpbmcgYXNzZXJ0Ci0JCQkJCQlyZXR1cm47Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgd2UgZ2V0IHRvIGhlcmUsIGFsd2F5cyBmYWlsLCBzaW5jZSBzb21ldGhpbmcgd2VudCB3cm9uZy4KLQkJYXNzZXJ0VHJ1ZSgidGVzdFByb3BlcnR5U291cmNlUmVtb3ZhbCB0ZXN0IGRpZCBub3QgdGFrZSBleHBlY3RlZCBwYXRoIiwgZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFJlY29uY2lsZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFJlY29uY2lsZXJYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmYzNiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RSZWNvbmNpbGVyWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Bbm5vdGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5EZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotCi0vKioKLSAqIFRlc3RzIHJlY29uY2lsZXIgaW4gYW4gb3BlbiBlZGl0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UmVjb25jaWxlclhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdFJlY29uY2lsZXJYTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJUZXN0UmVjb25jaWxlclhNTGZpbGUueG1sIjsKLQlmaW5hbCBwcml2YXRlIFN0cmluZyBBTk5PVEFUSU9OX0VSUk9SID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVtcC5lcnJvciI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBwcml2YXRlIFN0cmluZyBBTk5PVEFUSU9OX1dBUk5JTkcgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZW1wLndhcm5pbmciOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBJRWRpdG9yUGFydCBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXByaXZhdGUgYm9vbGVhbiBmUmVjb25jaWxlclByZWY7Ci0KLQlwdWJsaWMgVGVzdFJlY29uY2lsZXJYTUwoKSB7Ci0JCXN1cGVyKCJUZXN0UmVjb25jaWxlclhNTCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIG9ubHkgY3JlYXRlIHByb2plY3QgYW5kIGZpbGUgb25jZQotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCS8vIGVkaXRvciBpcyBvcGVuZWQgZWFjaCB0aW1lCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJZkVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZGaWxlLCB0cnVlLCB0cnVlKTsKLQkJCWlmICghKChmRWRpdG9yIGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgfHwgKGZFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikpKQotCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiLCBmYWxzZSk7Ci0JCX0KLQotCQkvLyB0dXJuIG9uIHJlY29uY2lsaW5nCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWZSZWNvbmNpbGVyUHJlZiA9IHN0b3JlLmdldEJvb2xlYW4oQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JCWlmICghZlJlY29uY2lsZXJQcmVmKQotCQkJc3RvcmUuc2V0VmFsdWUoQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUywgdHJ1ZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gcmVzdG9yZSByZWNvbmNpbGluZyBwcmVmZXJlbmNlCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCXN0b3JlLnNldFZhbHVlKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIGZSZWNvbmNpbGVyUHJlZik7Ci0KLQkJLy8gZWRpdG9yIGlzIGNsb3NlZCBlYWNoIHRpbWUKLQkJaWYgKGZFZGl0b3IgIT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlwYWdlLmNsb3NlRWRpdG9yKGZFZGl0b3IsIGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyByZWNvbmNpbGVyIGJ5IHZlcmlmeWluZyBubyBlcnJvcnMvd2FybmluZ3MgZm91bmQgd2l0aCB3ZWxsLWZvcm1lZAotCSAqIHhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0V2VsbEZvcm1lZCgpIHsKLQkJSURvY3VtZW50IGRvYyA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQlkb2Muc2V0KCI8aHRtbD48Ym9keT48aDE+VGl0bGU8L2gxPjwvYm9keT48L2h0bWw+Iik7Ci0JCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGZFZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCUlBbm5vdGF0aW9uTW9kZWwgYW5ub01vZGVsID0gdGV4dEVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGZFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCURlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzIGFubm90YXRpb25BY2Nlc3MgPSBuZXcgRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MoKTsKLQotCQkvLyB2ZXJpZnkgd2VsbC1mb3JtZWQgeG1sCi0JCXRyeSB7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCQlJdGVyYXRvciBpdGVyID0gYW5ub01vZGVsLmdldEFubm90YXRpb25JdGVyYXRvcigpOwotCQkJLy8gbWFrZSBzdXJlIHRoZSBvbmx5IHByb2JsZW0gd2UgZmluZCBpcyB0aGUgbGFjayBvZiBhIHNwZWNpZmllZCBncmFtbWFyCi0JCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlBbm5vdGF0aW9uIGFubm8gPSAoQW5ub3RhdGlvbikgaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIGFubm9UeXBlID0gYW5uby5nZXRUeXBlKCk7Ci0JCQkJaWYgKChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9FUlJPUikpIHx8IChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9XQVJOSU5HKSkpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgidGVzdFJlY29uY2lsZXI6IFVuZXhwZWN0ZWQgaW5pdGlhbCBhbm5vdGF0aW9ucyIgKyBhbm5vLmdldFRleHQoKSwgYW5uby5nZXRUZXh0KCkuaW5kZXhPZigiTm8gZ3JhbW1hciBjb25zdHJhaW50cyIpID4gLTEpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3RzIHJlY29uY2lsZXIgYnkgdmVyaWZ5aW5nIGVycm9yL3dhcm5pbmcgZm91bmQgd2l0aCBpbGwtZm9ybWVkIHhtbC4KLQkgKiAobWlzc2luZyBjbG9zZSBicmFja2V0KQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWROb0Nsb3NlQnJhY2tldCgpIHsKLQkJSURvY3VtZW50IGRvYyA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQlkb2Muc2V0KCI8aHRtbD48Ym9keT48aDE+VGl0bGU8L2gxPjwvYm9keT48L2h0bWw+Iik7Ci0JCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGZFZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCUlBbm5vdGF0aW9uTW9kZWwgYW5ub01vZGVsID0gdGV4dEVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGZFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCURlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzIGFubm90YXRpb25BY2Nlc3MgPSBuZXcgRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MoKTsKLQotCQkvLyB2ZXJpZnkgaWxsLWZvcm1lZCB4bWwKLQkJdHJ5IHsKLQkJCWRvYy5yZXBsYWNlKDYsIDYsICI8Ym9keSAiKTsKLQkJCVRocmVhZC5zbGVlcCg1MDAwKTsKLQkJCWJvb2xlYW4gZXJyb3JGb3VuZCA9IGZhbHNlOwotCQkJSXRlcmF0b3IgaXRlciA9IGFubm9Nb2RlbC5nZXRBbm5vdGF0aW9uSXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJCUFubm90YXRpb24gYW5ubyA9IChBbm5vdGF0aW9uKSBpdGVyLm5leHQoKTsKLQkJCQlTdHJpbmcgYW5ub1R5cGUgPSBhbm5vLmdldFR5cGUoKTsKLQkJCQlpZiAoKGFubm90YXRpb25BY2Nlc3MuaXNTdWJ0eXBlKGFubm9UeXBlLCBBTk5PVEFUSU9OX0VSUk9SKSkgfHwgKGFubm90YXRpb25BY2Nlc3MuaXNTdWJ0eXBlKGFubm9UeXBlLCBBTk5PVEFUSU9OX1dBUk5JTkcpKSkgewotCQkJCQllcnJvckZvdW5kID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ0ZXN0UmVjb25jaWxlcjogRGlkIG5vdCBmaW5kIGV4cGVjdGVkIGVycm9ycyBpbjogIiArIGRvYy5nZXQoKSwgZXJyb3JGb3VuZCk7Ci0JCX0KLQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyByZWNvbmNpbGVyIGJ5IHZlcmlmeWluZyBlcnJvci93YXJuaW5nIGZvdW5kIHdpdGggaWxsLWZvcm1lZCB4bWwuCi0JICogKG1pc3NpbmcgYXR0cmlidXRlIHZhbHVlKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWROb0F0dHJWYWx1ZSgpIHsKLQkJSURvY3VtZW50IGRvYyA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQlkb2Muc2V0KCI8aHRtbD48Ym9keT48aDE+VGl0bGU8L2gxPjwvYm9keT48L2h0bWw+Iik7Ci0JCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGZFZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCUlBbm5vdGF0aW9uTW9kZWwgYW5ub01vZGVsID0gdGV4dEVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGZFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCURlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzIGFubm90YXRpb25BY2Nlc3MgPSBuZXcgRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MoKTsKLQotCQkvLyB2ZXJpZnkgaWxsLWZvcm1lZCB4bWwKLQkJdHJ5IHsKLQkJCWRvYy5yZXBsYWNlKDYsIDYsICI8Ym9keSBoZWxsbz4iKTsKLQkJCVRocmVhZC5zbGVlcCg1MDAwKTsKLQkJCWJvb2xlYW4gZXJyb3JGb3VuZCA9IGZhbHNlOwotCQkJSXRlcmF0b3IgaXRlciA9IGFubm9Nb2RlbC5nZXRBbm5vdGF0aW9uSXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJCUFubm90YXRpb24gYW5ubyA9IChBbm5vdGF0aW9uKSBpdGVyLm5leHQoKTsKLQkJCQlTdHJpbmcgYW5ub1R5cGUgPSBhbm5vLmdldFR5cGUoKTsKLQkJCQlpZiAoKGFubm90YXRpb25BY2Nlc3MuaXNTdWJ0eXBlKGFubm9UeXBlLCBBTk5PVEFUSU9OX0VSUk9SKSkgfHwgKGFubm90YXRpb25BY2Nlc3MuaXNTdWJ0eXBlKGFubm9UeXBlLCBBTk5PVEFUSU9OX1dBUk5JTkcpKSkgewotCQkJCQllcnJvckZvdW5kID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ0ZXN0UmVjb25jaWxlcjogRGlkIG5vdCBmaW5kIGV4cGVjdGVkIGVycm9ycyBpbjogIiArIGRvYy5nZXQoKSwgZXJyb3JGb3VuZCk7Ci0JCX0KLQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNzhlNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucHJlZmVyZW5jZXMuQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucmVjb25jaWxlLkRvY3VtZW50UmVnaW9uUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucmVjb25jaWxlLnZhbGlkYXRvci5WYWxpZGF0b3JNZXRhRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuVmFsaWRhdG9yU3RyYXRlZ3k7Ci0KLS8qKgotICogVGVzdHMgcmVjb25jaWxlciBpbiBhbiBvcGVuIGVkaXRvci4gVGhlIGxvY2F0aW9uIG9mIHRoaXMgY2xhc3MgaXMgYXdrd2FyZAotICogaW4gdGhhdCBpdCByZWZlcnMgdG8gY29udGVudCB0eXBlcyBkZWNsYXJlZCBpbiBwbHVnaW5zIHRoYXQgYXJlbid0IHJlcXVpcmVkCi0gKiB0byBiZSBwcmVzZW50LgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVEhJUyBTVUJDTEFTUyBJUyBGT1IgVEVTVElORyBPTkxZCi0JICovCi0JcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IgZXh0ZW5kcyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciB7Ci0JCXB1YmxpYyBTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIHRleHRWaWV3ZXJDb25maWd1cmF0aW9uID0gbnVsbDsKLQotCQlwcm90ZWN0ZWQgdm9pZCBzZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0JCQlzdXBlci5zZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0JCQl0ZXh0Vmlld2VyQ29uZmlndXJhdGlvbiA9IGNvbmZpZzsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUEFSQVRPUiA9IFN0cmluZy52YWx1ZU9mKElQYXRoLlNFUEFSQVRPUik7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZlByZXZpb3VzUmVjb25jaWxlclByZWY7Ci0KLQlwdWJsaWMgVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsoKSB7Ci0JCXN1cGVyKCJUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yayIpOwotCX0KLQotCXByaXZhdGUgSUZpbGUgZW5zdXJlRmlsZUlzQWNjZXNzaWJsZShTdHJpbmcgZmlsZVBhdGgsIGJ5dGVbXSBjb250ZW50cykgewotCQlJRmlsZSBibGFua0ZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rRmlsZSAhPSBudWxsICYmICFibGFua0ZpbGUuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGJ5dGVzID0gY29udGVudHM7Ci0JCQkJaWYgKGJ5dGVzID09IG51bGwpIHsKLQkJCQkJYnl0ZXMgPSBuZXcgYnl0ZVswXTsKLQkJCQl9Ci0JCQkJYmxhbmtGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnl0ZXMpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0ZpbGU7Ci0JfQotCi0JcHJpdmF0ZSBJQ29udGVudFR5cGVbXSBkZXRlY3RDb250ZW50VHlwZXMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCUlDb250ZW50VHlwZVtdIHR5cGVzID0gbnVsbDsKLQkJSUZpbGUgZmlsZSA9IGVuc3VyZUZpbGVJc0FjY2Vzc2libGUoUFJPSkVDVF9OQU1FICsgU0VQQVJBVE9SICsgZmlsZU5hbWUsIG51bGwpOwotCi0JCXR5cGVzID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlc0ZvcihmaWxlLmdldE5hbWUoKSk7Ci0JCWlmICh0eXBlcy5sZW5ndGggPT0gMCkgewotCQkJSUNvbnRlbnREZXNjcmlwdGlvbiBkID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJLy8gb3B0aW1pemVkIGRlc2NyaXB0aW9uIGxvb2t1cCwgbWlnaHQgbm90IHN1Y2NlZWQKLQkJCQlkID0gZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKLQkJCQlpZiAoZCAhPSBudWxsKSB7Ci0JCQkJCXR5cGVzID0gbmV3IElDb250ZW50VHlwZVtde2QuZ2V0Q29udGVudFR5cGUoKX07Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8qCi0JCQkJICogc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBnaXZlbiB0aGUgYWNjZXNzaWJsZSBhbmQgZmlsZSB0eXBlCi0JCQkJICogY2hlY2sgYWJvdmUKLQkJCQkgKi8KLQkJCX0KLQkJfQotCQlpZiAodHlwZXMgPT0gbnVsbCkgewotCQkJdHlwZXMgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVzRm9yKGZpbGUuZ2V0TmFtZSgpKTsKLQkJfQotCQlyZXR1cm4gdHlwZXM7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdbXSBkZXRlY3RDb250ZW50VHlwZUlEcyhTdHJpbmcgZmlsZU5hbWUpIHsKLQkJSUNvbnRlbnRUeXBlW10gdHlwZXMgPSBkZXRlY3RDb250ZW50VHlwZXMoZmlsZU5hbWUpOwotCQlTdHJpbmdbXSBpZHMgPSBuZXcgU3RyaW5nW3R5cGVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCWlkc1tpXSA9IHR5cGVzW2ldLmdldElkKCk7Ci0JCX0KLQkJcmV0dXJuIGlkczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaWRlbnRpY2FsQ29udGVudHMoT2JqZWN0IG8xW10sIE9iamVjdCBvMltdKSB7Ci0JCWlmIChvMS5sZW5ndGggPT0gMCAmJiBvMi5sZW5ndGggPT0gMCkKLQkJCXJldHVybiB0cnVlOwotCi0JCU9iamVjdFtdIGFycmF5MSA9IG5ldyBPYmplY3RbbzEubGVuZ3RoXTsKLQkJT2JqZWN0W10gYXJyYXkyID0gbmV3IE9iamVjdFtvMi5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KG8xLCAwLCBhcnJheTEsIDAsIG8xLmxlbmd0aCk7Ci0JCVN5c3RlbS5hcnJheWNvcHkobzIsIDAsIGFycmF5MiwgMCwgbzIubGVuZ3RoKTsKLQkJQXJyYXlzLnNvcnQoYXJyYXkxKTsKLQkJQXJyYXlzLnNvcnQoYXJyYXkyKTsKLQkJcmV0dXJuIEFycmF5cy5lcXVhbHMoYXJyYXkxLCBhcnJheTIpOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZVByb2plY3RJc0FjY2Vzc2libGUoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpCi0JCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIExpc3QgZ2V0U291cmNlVmFsaWRhdG9ySURzKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUxpc3QgdmFsaWRhdG9ySWRzID0gbmV3IEFycmF5TGlzdCgxKTsKLQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQotCQlJRmlsZSBmaWxlID0gZW5zdXJlRmlsZUlzQWNjZXNzaWJsZShQUk9KRUNUX05BTUUgKyBTRVBBUkFUT1IgKyBmaWxlTmFtZSwgbnVsbCk7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5jbGFzcy5nZXROYW1lKCksIHRydWUpOwotCi0JCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIHRlc3RUZXh0RWRpdG9yID0gKFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgdGV4dEVkaXRvcjsKLQkJSVJlY29uY2lsZXIgcmVjb25jaWxlciA9IHRlc3RUZXh0RWRpdG9yLnRleHRWaWV3ZXJDb25maWd1cmF0aW9uLmdldFJlY29uY2lsZXIodGVzdFRleHRFZGl0b3IuZ2V0VGV4dFZpZXdlcigpKTsKLQotCQlhc3NlcnROb3ROdWxsKHJlY29uY2lsZXIpOwotCQlhc3NlcnRUcnVlKCJ1bmV4cGVjdGVkIElSZWNvbmNpbGVyIGltcGxlbWVudGF0aW9uOiAiICsgcmVjb25jaWxlci5nZXRDbGFzcygpLCByZWNvbmNpbGVyIGluc3RhbmNlb2YgRG9jdW1lbnRSZWdpb25Qcm9jZXNzb3IpOwotCi0JCUNsYXNzIHJlY29uY2lsZXJDbGFzcyA9IHJlY29uY2lsZXIuZ2V0Q2xhc3MoKTsKLQkJTWV0aG9kIG1ldGhvZCA9IG51bGw7Ci0JCXdoaWxlIChyZWNvbmNpbGVyQ2xhc3MgIT0gT2JqZWN0LmNsYXNzICYmIG1ldGhvZCA9PSBudWxsKSB7Ci0JCQlNZXRob2RbXSBtZXRob2RzID0gcmVjb25jaWxlckNsYXNzLmdldERlY2xhcmVkTWV0aG9kcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKG1ldGhvZHNbaV0uZ2V0TmFtZSgpLmVxdWFscygiZ2V0VmFsaWRhdG9yU3RyYXRlZ3kiKSkgewotCQkJCQltZXRob2QgPSBtZXRob2RzW2ldOwotCQkJCX0KLQkJCX0KLQkJCXJlY29uY2lsZXJDbGFzcyA9IHJlY29uY2lsZXJDbGFzcy5nZXRTdXBlcmNsYXNzKCk7Ci0JCX0KLQotCQlhc3NlcnROb3ROdWxsKCJubyBnZXRWYWxpZGF0b3JTdHJhdGVneSBtZXRob2QgZm91bmQgb24gIiArIHJlY29uY2lsZXIuZ2V0Q2xhc3MoKSwgbWV0aG9kKTsKLQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCVZhbGlkYXRvclN0cmF0ZWd5IHN0cmF0ZWd5ID0gKFZhbGlkYXRvclN0cmF0ZWd5KSBtZXRob2QuaW52b2tlKHJlY29uY2lsZXIsIG5ldyBPYmplY3RbMF0pOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWd5KTsKLQkJRmllbGQgZk1ldGFEYXRhID0gc3RyYXRlZ3kuZ2V0Q2xhc3MoKS5nZXREZWNsYXJlZEZpZWxkKCJmTWV0YURhdGEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgidmFsaWRhdG9yIG1ldGFkYXRhIGZpZWxkIFwiZk1ldGFEYXRhXCIgbm90IGZvdW5kIG9uIHN0cmF0ZWd5ICIgKyBzdHJhdGVneS5nZXRDbGFzcygpLCBmTWV0YURhdGEpOwotCQlmTWV0YURhdGEuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJTGlzdCBtZXRhZGF0YSA9IChMaXN0KSBmTWV0YURhdGEuZ2V0KHN0cmF0ZWd5KTsKLQkJYXNzZXJ0Tm90TnVsbChtZXRhZGF0YSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWV0YWRhdGEuc2l6ZSgpOyBpKyspIHsKLQkJCXZhbGlkYXRvcklkcy5hZGQoKChWYWxpZGF0b3JNZXRhRGF0YSkgbWV0YWRhdGEuZ2V0KGkpKS5nZXRWYWxpZGF0b3JJZCgpKTsKLQkJfQotCi0JCXBhZ2UuY2xvc2VFZGl0b3IoZWRpdG9yLCBmYWxzZSk7Ci0KLQkJcmV0dXJuIHZhbGlkYXRvcklkczsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQllbnN1cmVQcm9qZWN0SXNBY2Nlc3NpYmxlKFBST0pFQ1RfTkFNRSk7Ci0KLQkJLy8gdHVybiBvbiByZWNvbmNpbGluZwotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlmUHJldmlvdXNSZWNvbmNpbGVyUHJlZiA9IHN0b3JlLmdldEJvb2xlYW4oQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JCWlmICghZlByZXZpb3VzUmVjb25jaWxlclByZWYpIHsKLQkJCXN0b3JlLnNldFZhbHVlKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIHRydWUpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gcmVzdG9yZSByZWNvbmNpbGluZyBwcmVmZXJlbmNlCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCXN0b3JlLnNldFZhbHVlKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIGZQcmV2aW91c1JlY29uY2lsZXJQcmVmKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlVmFsaWRhdGlvbkVuYWJsZW1lbnRXaXRoSW5oZXJpdGVkVmFsaWRhdG9ycygpIHRocm93cyBFeGNlcHRpb24gewotCQlPYmplY3RbXSB4bWxWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54bWwiKS50b0FycmF5KCk7Ci0JCWFzc2VydFRydWUoIk5vIFhNTCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsIHhtbFZhbGlkYXRvcklEcy5sZW5ndGggPiAwKTsKLQkJT2JqZWN0W10geG1sOTlWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54bWw5OSIpLnRvQXJyYXkoKTsKLQkJYXNzZXJ0VHJ1ZSgiTm8gWE1MOTkgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCB4bWw5OVZhbGlkYXRvcklEcy5sZW5ndGggPiAwKTsKLQotCQlBcnJheXMuc29ydCh4bWxWYWxpZGF0b3JJRHMpOwotCQlBcnJheXMuc29ydCh4bWw5OVZhbGlkYXRvcklEcyk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJ2YWxpZGF0b3IgbGlzdHMgc2hvdWxkIGJlIHRoZSBzYW1lIGxlbmd0aCIsIHhtbFZhbGlkYXRvcklEcy5sZW5ndGgsIHhtbDk5VmFsaWRhdG9ySURzLmxlbmd0aCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgeG1sVmFsaWRhdG9ySURzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoInZhbGlkYXRvciBJRHMgc2hvdWxkIGJlIHRoZSBzYW1lIFsiICsgaSArICJdIiwgeG1sVmFsaWRhdG9ySURzW2ldLCB4bWw5OVZhbGlkYXRvcklEc1tpXSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlVmFsaWRhdGlvbkVuYWJsZW1lbnRXaXRoVW5pcXVlVmFsaWRhdG9ycygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmdbXSB4bWxDb250ZW50VHlwZXMgPSBkZXRlY3RDb250ZW50VHlwZUlEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLnhtbCIpOwotCQlTdHJpbmdbXSB4c2RDb250ZW50VHlwZXMgPSBkZXRlY3RDb250ZW50VHlwZUlEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLnhzZCIpOwotCi0JCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhIGRpc3RpbmN0IFhTRAotCQkgKiBjb250ZW50IHR5cGUsIHNraXAgdGhlIHJlc3QKLQkJICovCi0JCWlmICghaWRlbnRpY2FsQ29udGVudHMoeG1sQ29udGVudFR5cGVzLCB4c2RDb250ZW50VHlwZXMpKSB7Ci0JCQlMaXN0IHhtbFZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLnhtbCIpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gWE1MIHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgIXhtbFZhbGlkYXRvcklEcy5pc0VtcHR5KCkpOwotCQkJTGlzdCB4c2RWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54c2QiKTsKLQkJCWFzc2VydFRydWUoIk5vIFhTRCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsICF4c2RWYWxpZGF0b3JJRHMuaXNFbXB0eSgpKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgeG1sVmFsaWRhdG9ySURzLnNpemUoKTsgaSsrKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiWE1MIFZhbGlkYXRvciBmb3VuZCBvbiBYU0QgaW5wdXQiLCAheHNkVmFsaWRhdG9ySURzLmNvbnRhaW5zKHhtbFZhbGlkYXRvcklEcy5nZXQoaSkpKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIk5vIGRpc3RpbmN0IFhTRCBjb250ZW50IHR5cGUgZm91bmQgd2hpbGUgcnVubmluZyAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQlTeXN0ZW0uZXJyLnByaW50bG4obWVzc2FnZSk7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5XQVJOSU5HLCBtZXNzYWdlKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VWYWxpZGF0aW9uRW5hYmxlbWVudFdpdGhVbnJlbGF0ZWRDb250ZW50VHlwZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nW10gZHRkQ29udGVudFR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy5kdGQiKTsKLQkJU3RyaW5nW10ganNwQ29udGVudFR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy5qc3AiKTsKLQkJaWYgKGR0ZENvbnRlbnRUeXBlcy5sZW5ndGggPT0gMCkgewotCQkJU3RyaW5nIG1lc3NhZ2UgPSAiTm8gRFREIGNvbnRlbnQgdHlwZSBmb3VuZCB3aGlsZSBydW5uaW5nICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLldBUk5JTkcsIG1lc3NhZ2UpOwotCQl9Ci0JCWlmIChqc3BDb250ZW50VHlwZXMubGVuZ3RoID09IDApIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIk5vIEpTUCBjb250ZW50IHR5cGUgZm91bmQgd2hpbGUgcnVubmluZyAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQlTeXN0ZW0uZXJyLnByaW50bG4obWVzc2FnZSk7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5XQVJOSU5HLCBtZXNzYWdlKTsKLQkJfQotCi0KLQkJaWYgKGR0ZENvbnRlbnRUeXBlcy5sZW5ndGggPiAwICYmIGpzcENvbnRlbnRUeXBlcy5sZW5ndGggPiAwICYmICFpZGVudGljYWxDb250ZW50cyhkdGRDb250ZW50VHlwZXMsIGpzcENvbnRlbnRUeXBlcykpIHsKLQkJCUxpc3QgZHRkVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMuZHRkIik7Ci0JCQlhc3NlcnRUcnVlKCJObyBEVEQgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCAhZHRkVmFsaWRhdG9ySURzLmlzRW1wdHkoKSk7Ci0JCQlMaXN0IGpzcFZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLmpzcCIpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gSlNQIHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgIWpzcFZhbGlkYXRvcklEcy5pc0VtcHR5KCkpOwotCQkJaW50IGR0ZFZhbGlkYXRvckNvdW50ID0gZHRkVmFsaWRhdG9ySURzLnNpemUoKTsKLQkJCWR0ZFZhbGlkYXRvcklEcy5yZW1vdmVBbGwoanNwVmFsaWRhdG9ySURzKTsKLQkJCWFzc2VydEVxdWFscygidmFsaWRhdG9ycyBmb3VuZCBydW5uaW5nIG9uIGJvdGggQ1NTIGFuZCBEVEQiLCBkdGRWYWxpZGF0b3JDb3VudCwgZHRkVmFsaWRhdG9ySURzLnNpemUoKSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDVjODI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuc3BlbGxpbmcuSVNwZWxsY2hlY2tEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnNwZWxsaW5nLlNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXB0ZXJGYWN0b3J5OwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgPGNvZGU+U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5PC9jb2RlPgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeSBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFRlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkoKSB7Ci0JCXN1cGVyKCJUZXN0IFNwZWxsY2hlY2sgRGVsZWdhdGUgQWRhcGF0ZXJGYWN0b3J5Iik7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdG9yCi0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgdG8gZ2l2ZSB0byB0aGlzIHRlc3QgcnVuCi0JICovCi0JcHVibGljIFRlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgdGhlIDxjb2RlPlNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeTwvY29kZT4KLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24gCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uICB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJUZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5IjsKLQkJSVByb2plY3QgcHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQkKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBudWxsOwotCQkKLQkJdHJ5IHsKLQkJCS8vZ2V0IHRlc3QgZmlsZQotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCJ0ZXN0cmVzb3VyY2VzL3NwZWxsY2hlY2siLCBwcm9qZWN0TmFtZSk7Ci0JCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgic3BlbGxjaGVja19jb21tZW50X2VsZW1lbnQueG1sIik7Ci0JCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIHRlc3RGaWxlICsgIiBkb2VzIG5vdCBleGlzdCIsIHRlc3RGaWxlLmV4aXN0cygpKTsKLQkJCi0JCQkvL2dldCBkZWxlZ2F0ZQotCQkJc3RydWN0dXJlZE1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IodGVzdEZpbGUpOwotCQkJU3BlbGxjaGVja0RlbGVnYXRlQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBTcGVsbGNoZWNrRGVsZWdhdGVBZGFwdGVyRmFjdG9yeSgpOwotCQkJSVNwZWxsY2hlY2tEZWxlZ2F0ZSBkZWxlZ2F0ZSA9IChJU3BlbGxjaGVja0RlbGVnYXRlKWZhY3RvcnkuZ2V0QWRhcHRlcihzdHJ1Y3R1cmVkTW9kZWwsIElTcGVsbGNoZWNrRGVsZWdhdGUuY2xhc3MpOwotCQkJYXNzZXJ0Tm90TnVsbCgiQ291bGQgbm90IGdldCBzcGVsbGNoZWNrIGRlbGVnYXRlIiwgZGVsZWdhdGUpOwotCQkJCi0JCQkvL3J1biB0ZXN0cwotCQkJYm9vbGVhbiBzaG91bGRTcGVsbGNoZWNrQ29tbWVudEVsZW1lbnQgPSBkZWxlZ2F0ZS5zaG91bGRTcGVsbGNoZWNrKDU0LCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkJYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgYmUgc3BlbGxjaGVja2luZyBjb21tZW50IGVsZW1lbnRzIiwgc2hvdWxkU3BlbGxjaGVja0NvbW1lbnRFbGVtZW50KTsKLQkJCQotCQkJYm9vbGVhbiBzaG91bGRTcGVsbGNoZWNrQ29tbWVudCA9IGRlbGVnYXRlLnNob3VsZFNwZWxsY2hlY2soODAsIHN0cnVjdHVyZWRNb2RlbCk7Ci0JCQlhc3NlcnRUcnVlKCJTaG91bGQgYmUgc3BlbGxjaGVja2luZyBjb21tZW50IHJlZ2lvbnMiLCBzaG91bGRTcGVsbGNoZWNrQ29tbWVudCk7Ci0JCX0gZmluYWxseSB7Ci0JCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1ZTQxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuWE1MVUlQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBWZXJpZnlFZGl0b3JQbHVnaW4gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQkvLyBUT0RPOiBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgxNTI3Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JCVBsdWdpbiBwbHVnaW4gPSBudWxsOwotCQl0cnkgewotCQkJcGx1Z2luID0gWE1MVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgieG1sIGVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTENvZGVGb2xkaW5nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxDb2RlRm9sZGluZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE4MDMzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTENvZGVGb2xkaW5nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5wcm9qZWN0aW9uLlByb2plY3Rpb25Bbm5vdGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLnByb2plY3Rpb24uUHJvamVjdGlvbkFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVjb25jaWxlLklTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQ7Ci0KLS8qKgotICogPHA+VGVzdHMgdGhhdCBjb2RlIGZvbGRpbmcgYW5ub3RhdGlvbnMgYXJlIGNvcnJlY3RseSBhZGRlZC9yZW1vdmVkIGZyb20gWE1MIERvY3VtZW50czwvcD4KLSAqIDxwPkFsbCBvZiB0aGVzZSB0ZXN0cyB1c2UgdGhlIHNhbWUgcHJvamVjdCBhbmQgd2hlbiBwb3NzaWJsZSB0aGUgc2FtZSBvcGVuIGRvY3VtZW50czwvcD4KLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTENvZGVGb2xkaW5nVGVzdCBTaW1pbGFyIFRlc3QgLSBYTUwgQ29kZSBGb2xkaW5nIFRlc3QKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIuQ1NTQ29kZUZvbGRpbmdUZXN0IFNpbWlsYXIgVGVzdCAtIENTUyBDb2RlIEZvbGRpbmcgVGVzdAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlci5EVERDb2RlRm9sZGluZ1Rlc3QgU2ltaWxhciBUZXN0IC0gRFREIENvZGUgRm9sZGluZyBUZXN0Ci0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDb2RlRm9sZGluZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIElTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyIHsKLQkvKiogbWF4IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9XQUlUX1RJTUUgPSAxNTAwMDsKLQkKLQkvKiogYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0FJVF9USU1FID0gMjAwOwotCQotCS8qKgotCSAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZXNlIHRlc3RzIHdpbGwgdXNlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJYTUxDb2RlRm9sZGluZ1Rlc3QiOwotCQotCS8qKgotCSAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBmaWxlcwotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX0ZJTEVTID0gIi90ZXN0cmVzb3VyY2VzL2ZvbGRpbmciOwotCQotCS8qKgotCSAqIFRoZSBwcm9qZWN0IHRoYXQgYWxsIG9mIHRoZSB0ZXN0cyB1c2UKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJUHJvamVjdCBmUHJvamVjdDsKLQkKLQkvKioKLQkgKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFscmVhZHkgb3BlbiBlZGl0b3JzIHNvIHRoYXQgdGhlIHRlc3RzIGRvbid0IGdvIHRocm91Z2gKLQkgKiB0aGUgdHJvdWJsZSBvZiBvcGVuaW5nIHRoZSBzYW1lIGVkaXRvcnMgb3ZlciBhbmQgb3ZlciBhZ2FpbgotCSAqLwotCXByaXZhdGUgc3RhdGljIE1hcCBmRmlsZVRvRWRpdG9yTWFwID0gbmV3IEhhc2hNYXAoKTsKLQkKLQkvKiogdGhlIGxhc3Qge0BsaW5rIElEb2N1bWVudH0gdG8gYmUgcmVjb25jaWxlZCAqLwotCXByaXZhdGUgc3RhdGljIElEb2N1bWVudCBmUmVjb25jaWxlZERvYyA9IG51bGw7Ci0JCi0JLyoqCi0JICogPHA+RGVmYXVsdCBjb25zdHJ1Y3RvcjxwPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBzZWUgI3N1aXRlKCkKLQkgKi8KLQlwdWJsaWMgWE1MQ29kZUZvbGRpbmdUZXN0KCkgewotCQlzdXBlcigiWE1MIENvZGUgRm9sZGluZyBUZXN0Iik7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBYTUxDb2RlRm9sZGluZ1Rlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCS8qKgotCSAqIDxwPlVzZSB0aGlzIG1ldGhvZCB0byBhZGQgdGhlc2UgdGVzdHMgdG8gYSBsYXJnZXIgdGVzdCBzdWl0ZSBzbyBzZXQgdXAKLQkgKiBhbmQgdGVhciBkb3duIGNhbiBiZSBwZXJmb3JtZWQ8L3A+Ci0JICogCi0JICogQHJldHVybiBhIHtAbGluayBUZXN0U2V0dXB9IHRoYXQgd2lsbCBydW4gYWxsIG9mIHRoZSB0ZXN0cyBpbiB0aGlzIGNsYXNzCi0JICogd2l0aCBzZXQgdXAgYW5kIHRlYXIgZG93bi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSB0cyA9IG5ldyBUZXN0U3VpdGUoWE1MQ29kZUZvbGRpbmdUZXN0LmNsYXNzLCAiWE1MIENvZGUgRm9sZGluZyBUZXN0Iik7Ci0JCXJldHVybiBuZXcgWE1MQ29kZUZvbGRpbmdUZXN0U2V0dXAodHMpOwotCi0JfQotCQotCS8qKgotCSAqIFJlc2V0IHRoZSBzdGF0ZSBiZXR3ZWVuIHRlc3RzCi0JICogCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCQotCQlmUmVjb25jaWxlZERvYyA9IG51bGw7Ci0JfQotCQotCS8qKgotCSAqIDxwPjxiPlRFU1Q6PC9iPiB0aGUgaW5pdGlhbGx5IHBsYWNlZCBmb2xkaW5nIGFubm90YXRpb25zPC9wPgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbml0Rm9sZGluZygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiWE1MRm9sZGluZ1Rlc3QxLnhtbCIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCS8vIGV4cGVjdGVkIGZvciBzaW5nbGUtY2hhcmFjdGVyIGxpbmUgZGVsaW1pdGVyCi0JCUxpc3QgZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQyLCAxNikpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE3MywgMzYpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzOSwgMTc5KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNzEsIDEzKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNjIsIDEwNykpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQ3LCAxMykpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDg3LCA0OSkpOwotCQkKLQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkoZWRpdG9yLmdldFRleHRWaWV3ZXIoKSwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhhdCBmb2xkaW5nIGFubm90YXRpb25zIGFyZSB1cGRhdGVkIGFmdGVyIG5vZGUgaXMgcmVtb3ZlZDwvcD4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlTm9kZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiWE1MRm9sZGluZ1Rlc3QxLnhtbCIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yICA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQkJSURvY3VtZW50IGRvYyA9IHZpZXdlci5nZXREb2N1bWVudCgpOwotCQkJZG9jLnJlcGxhY2UoODcsIDQ5LCAiIik7Ci0JCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCi0JCQlmaW5hbCBMaXN0IGV4cGVjdGVkUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig5MywgMTYpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTI0LCAzNikpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzOSwgMTMwKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDcxLCAxMykpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig2MiwgNTgpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNDcsIDEzKSk7Ci0JCQkKLQkJCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KHZpZXdlciwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCQl9IGNhdGNoKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIlRlc3QgaXMgYnJva2VuLCByZXBsYWNlIGxvY2F0aW9uIGhhcyBiZWNvbWUgaW52YWxpZC5cbiIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IHRoYXQgZm9sZGluZyBhbm5vdGF0aW9ucyBhcmUgdXBkYXRlZCBhZnRlciBub2RlIGlzIGFkZGVkPC9wPgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RBZGROb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCJYTUxGb2xkaW5nVGVzdDIueG1sIik7Ci0JCQotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQkKLQkJdHJ5IHsKLQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCQlJRG9jdW1lbnQgZG9jID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlkb2MucmVwbGFjZSgxNDksIDAsICJcbjxhZGRNZT5cblxuXG48L2FkZE1lPiIpOwotCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQotCQkJTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTUwLCAxOCkpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig2MiwgMTI2KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDQ3LCAxMykpOwotCQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigzOSwgMTk4KSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE5MiwgMzYpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNzEsIDEzKSk7Ci0JCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE0MiwgMzUpKTsKLQkJCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oODcsIDQ5KSk7Ci0JCQkKLQkJCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KHZpZXdlciwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCQl9IGNhdGNoKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIlRlc3QgaXMgYnJva2VuLCBhZGQgbG9jYXRpb24gaGFzIGJlY29tZSBpbnZhbGlkLlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiA8cD48Yj5URVNUOjwvYj4gdGhhdCBldmVuIHRob3VnaCAueHNsIGRvY3VtZW50cyBkbyBub3QgaGF2ZSBhIHNwZWNpZmljYWxseSBzcGVjaWZpZWQKLQkgKiBmb2xkaW5nIHN0cmF0ZWd5IHRoYXQgYnkgdGhlIHBvd2VyIG9mIGhpZXJhcmNoaWNhbCBjb250ZW50IHR5cGVzIHRoZSBYTUwgZm9sZGluZwotCSAqIHN0cmF0ZWd5IGlzIHVzZWQgZm9yIHRoZSBYU0xUIGRvY3VtZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb25maWdUeXBlSGllcmFyY2h5RXhwbG9yYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uewotCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgiWFNMRm9sZGluZ1Rlc3QxLnhzbCIpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gZ2V0RWRpdG9yKGZpbGUpOwotCQkKLQkJTGlzdCBleHBlY3RlZFBvc2l0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxMjAsIDg4KSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTQ3LCA0NCkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDM5LCAxODcpKTsKLQkJCi0JCXdhaXRGb3JSZWNvbmNpbGVUaGVuVmVyaWZ5KGVkaXRvci5nZXRUZXh0Vmlld2VyKCksIGV4cGVjdGVkUG9zaXRpb25zKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+PGI+VEVTVDo8L2I+IHRlc3QgdGhlIGZvbGRpbmcgb2YgY29tbWVudHM8L3A+Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoIlhNTEZvbGRpbmdDb21tZW50VGVzdC54bWwiKTsKLQkJCi0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IGdldEVkaXRvcihmaWxlKTsKLQkJCi0JCUxpc3QgZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMjc1LCAzNikpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDEyNCwgNDkpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbigxNzksIDgxKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMzksIDI4MSkpOwotCQlleHBlY3RlZFBvc2l0aW9ucy5hZGQobmV3IFBvc2l0aW9uKDE5MSwgNTYpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig2NCwgMzEpKTsKLQkJZXhwZWN0ZWRQb3NpdGlvbnMuYWRkKG5ldyBQb3NpdGlvbig5OSwgMTcyKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oNDcsIDEzKSk7Ci0JCWV4cGVjdGVkUG9zaXRpb25zLmFkZChuZXcgUG9zaXRpb24oMTA4LCAxMykpOwotCQkKLQkJd2FpdEZvclJlY29uY2lsZVRoZW5WZXJpZnkoZWRpdG9yLmdldFRleHRWaWV3ZXIoKSwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIGZpbGUgbmFtZSBpbiA8Y29kZT5mUHJvamVjdDwvY29kZT4gYXR0ZW1wdHMgdG8gZ2V0IGFuIDxjb2RlPklGaWxlPC9jb2RlPgotCSAqIGZvciBpdCwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB0aGUgdGVzdCBmYWlscy48L3A+Ci0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZ2V0Ci0JICogQHJldHVybiB0aGUgPGNvZGU+SUZpbGU8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPGNvZGU+bmFtZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBnZXRGaWxlKFN0cmluZyBuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBmUHJvamVjdC5nZXRGaWxlKG5hbWUpOwotCQlhc3NlcnRUcnVlKCJUZXN0IGZpbGUgIiArIGZpbGUgKyAiIGNhbiBub3QgYmUgZm91bmQiLCBmaWxlLmV4aXN0cygpKTsKLQkJCi0JCXJldHVybiBmaWxlOwotCX0KLQkKLQkvKioKLQkgKiA8cD5HaXZlbiBhIDxjb2RlPmZpbGU8L2NvZGU+IGdldCBhbiBlZGl0b3IgZm9yIGl0LiBJZiBhbiBlZGl0b3IgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHJldHJpZXZlZCBmb3IgdGhlIGdpdmVuIDxjb2RlPmZpbGU8L2NvZGU+IHRoZW4gcmV0dXJuIHRoZSBzYW1lIGFscmVhZHkKLQkgKiBvcGVuIGVkaXRvci48L3A+Ci0JICogCi0JICogPHA+V2hlbiBvcGVuaW5nIHRoZSBlZGl0b3IgaXQgd2lsbCBhbHNvIHN0YW5kYXJkaXplZCB0aGUgbGluZQotCSAqIGVuZGluZ3MgdG8gPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIG9wZW4gYW5kIHJldHVybiBhbiBlZGl0b3IgZm9yIHRoaXMKLQkgKiBAcmV0dXJuIDxjb2RlPlN0cnVjdHVyZWRUZXh0RWRpdG9yPC9jb2RlPiBvcGVuZWQgZnJvbSB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4KLQkgKi8KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGdldEVkaXRvcihJRmlsZSBmaWxlKSAgewotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpZkZpbGVUb0VkaXRvck1hcC5nZXQoZmlsZSk7Ci0vLwkJZWRpdG9yLmdldFRleHRWaWV3ZXIoKS5nZXQKLQkJCi0JCWlmKGVkaXRvciA9PSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQkJaWYoZWRpdG9yUGFydCBpbnN0YW5jZW9mIFhNTE11bHRpUGFnZUVkaXRvclBhcnQpIHsKLQkJCQkJWE1MTXVsdGlQYWdlRWRpdG9yUGFydCB4bWxFZGl0b3JQYXJ0ID0gKFhNTE11bHRpUGFnZUVkaXRvclBhcnQpZWRpdG9yUGFydDsKLQkJCQkJZWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKXhtbEVkaXRvclBhcnQuZ2V0QWRhcHRlcihTdHJ1Y3R1cmVkVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQkJfSBlbHNlIGlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQllZGl0b3IgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKWVkaXRvclBhcnQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZhaWwoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiKTsKLQkJCQl9Ci0JCQkJc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhlZGl0b3IpOwotCQkJCQotCQkJCWlmKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCWZGaWxlVG9FZGl0b3JNYXAucHV0KGZpbGUsIGVkaXRvcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmFpbCgiQ291bGQgbm90IG9wZW4gdmlld2VyIGZvciAiICsgZmlsZSk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlICsgIiBleGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBlZGl0b3I7Ci0JfQotCQotCS8qKgotCSAqIFdhaXRzIGZvciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgdG8gZmluaXNoIGFuZCB0aGVuIHZlcmlmaWVzIHRoYXQgb25seSBhbmQgYWxsCi0JICogb2YgdGhlIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPiBoYXZlIGZvbGRpbmcgYW5ub3RhdGlvbnMgaW4gdGhlIGdpdmVuIDxjb2RlPnZpZXdlcjwvY29kZT4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyIGNoZWNrIGZvciBhbm5vdGF0aW9ucyBhdCB0aGUgZ2l2ZW4gPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+Ci0JICogaW4gaGVyZSBhZnRlciB0aGUgZGlydHkgcmVnaW9uIHJlY29uY2lsZXIgam9iIGhhcyBmaW5pc2hlZAotCSAqIEBwYXJhbSBleHBlY3RlZFBvc2l0aW9ucyBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlc2UgcG9zaXRpb25zIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICogYWZ0ZXIgdGhlIGRpcnR5IHJlZ2lvbiByZWNvbmNpbGVyIGpvYiBoYXMgZmluaXNoZWQKLQkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIAotCSAqLwotCXByaXZhdGUgdm9pZCB3YWl0Rm9yUmVjb25jaWxlVGhlblZlcmlmeShmaW5hbCBTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIsIGZpbmFsIExpc3QgZXhwZWN0ZWRQb3NpdGlvbnMpIHRocm93cyBFeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCWludCB0aW1lID0gMDsKLQkJd2hpbGUoZG9jICE9IGZSZWNvbmNpbGVkRG9jICYmIHRpbWUgPD0gTUFYX1dBSVRfVElNRSkgewotCQkJVGhyZWFkLnNsZWVwKFdBSVRfVElNRSk7Ci0JCQl0aW1lICs9IFdBSVRfVElNRTsKLQkJfQotCQkKLQkJaWYoZG9jID09IGZSZWNvbmNpbGVkRG9jKSB7Ci0JCQl2ZXJpZnlBbm5vdGF0aW9uUG9zaXRpb25zKHZpZXdlciwgZXhwZWN0ZWRQb3NpdGlvbnMpOwotCQl9IGVsc2UgewotCQkJQXNzZXJ0LmZhaWwoIkRvY3VtZW50ICIgKyB2aWV3ZXIuZ2V0RG9jdW1lbnQoKSArICIgd2FzIG5vdCByZWNvbmNpbGVkIHdpdGggaW4gIiArIE1BWF9XQUlUX1RJTUUgKwotCQkJCQkiIHNvIGdhdmUgdXAgd2FpdGluZyBhbmQgaW4gdHVybiBjb3VsZCBub3QgdmFsaWRhdGUgZm9sZGluZyBhbm90YXRpb25zIChVSSBibG9ja2VkPykiKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBWZXJpZmllcyB0aGF0IG9ubHkgYW5kIGFsbCBvZiB0aGUgPGNvZGU+ZXhwZWN0ZWRQb3NpdGlvbnM8L2NvZGU+IGhhdmUgZm9sZGluZyBhbm5vdGF0aW9ucwotCSAqIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICogCi0JICogQHBhcmFtIHZpZXdlciBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlIGdpdmVuIDxjb2RlPmV4cGVjdGVkUG9zaXRpb25zPC9jb2RlPiBpbiBoZXJlIAotCSAqIEBwYXJhbSBleHBlY3RlZFBvc2l0aW9ucyBjaGVjayBmb3IgYW5ub3RhdGlvbnMgYXQgdGhlc2UgcG9zaXRpb25zIGluIHRoZSBnaXZlbiA8Y29kZT52aWV3ZXI8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeUFubm90YXRpb25Qb3NpdGlvbnMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBMaXN0IGV4cGVjdGVkUG9zaXRpb25zKSB7Ci0JCVByb2plY3Rpb25Bbm5vdGF0aW9uTW9kZWwgcHJvamVjdGlvbk1vZGVsID0gdmlld2VyLmdldFByb2plY3Rpb25Bbm5vdGF0aW9uTW9kZWwoKTsKLQkJSXRlcmF0b3IgYW5ub3RhdGlvbkl0ZXIgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQotCQlMaXN0IHVuZXhwZWN0ZWRQb3NpdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUxpc3QgdW5leHBlY3RlZEFubm90YXRpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQkKLQkJd2hpbGUoYW5ub3RhdGlvbkl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3Qgb2JqID0gYW5ub3RhdGlvbkl0ZXIubmV4dCgpOwotCQkJaWYob2JqIGluc3RhbmNlb2YgUHJvamVjdGlvbkFubm90YXRpb24pIHsKLQkJCQlQcm9qZWN0aW9uQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gKFByb2plY3Rpb25Bbm5vdGF0aW9uKW9iajsKLQkJCQlQb3NpdGlvbiBwb3MgPSBwcm9qZWN0aW9uTW9kZWwuZ2V0UG9zaXRpb24oYW5ub3RhdGlvbik7Ci0JCQkJCi0JCQkJYm9vbGVhbiBmb3VuZCA9IGV4cGVjdGVkUG9zaXRpb25zLnJlbW92ZShwb3MpOwotCQkJCWlmKCFmb3VuZCkgewotCQkJCQl1bmV4cGVjdGVkUG9zaXRpb25zLmFkZChwb3MpOwotCQkJCQl1bmV4cGVjdGVkQW5ub3RhdGlvbnMuYWRkKGFubm90YXRpb24pOwotCQkJCX0KLQkJCQkKLQkJCX0KLQkJfQotCQkKLQkJU3RyaW5nIGVycm9yID0gIiI7Ci0JCWlmKHVuZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICE9IDApIHsKLQkJCWVycm9yICArPSAiVGhlcmUgd2VyZSAiICsgdW5leHBlY3RlZFBvc2l0aW9ucy5zaXplKCkgKyAiIHVuZXhwZWN0ZWQgcG9zaXRpb25zIHRoYXQgd2VyZSBmb3VuZCI7Ci0JCQlmb3IoaW50IGkgPSAwOyBpIDwgdW5leHBlY3RlZFBvc2l0aW9ucy5zaXplKCk7ICsraSkgewotCQkJCWVycm9yICs9ICJcblx0IiArIHVuZXhwZWN0ZWRQb3NpdGlvbnMuZ2V0KGkpICsgIlx0dHlwZToiICsgKChBbm5vdGF0aW9uKSB1bmV4cGVjdGVkQW5ub3RhdGlvbnMuZ2V0KGkpKS5nZXRUeXBlKCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGV4cGVjdGVkUG9zaXRpb25zLnNpemUoKSAhPSAwICkgewotCQkJZXJyb3IgKz0gIlxuVGhlcmUgd2VyZSAiICsgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpICsgIiBleHBlY3RlZCBwb3NpdGlvbnMgdGhhdCB3ZXJlIG5vdCBmb3VuZCI7Ci0JCQlmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLQkJCQllcnJvciArPSAiXG5cdCIgKyBleHBlY3RlZFBvc2l0aW9ucy5nZXQoaSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmKGVycm9yLmxlbmd0aCgpICE9IDApIHsKLQkJCWZhaWwoZXJyb3IpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkxpbmUgZW5kaW5ncyBjYW4gYmUgYW4gaXNzdWUgd2hlbiBydW5uaW5nIHRlc3RzIG9uIGRpZmZlcmVudCBPU3MuCi0JICogVGhpcyBmdW5jdGlvbiBzdGFuZGFyZGl6ZXMgdGhlIGxpbmUgZW5kaW5ncyB0byB1c2UgPGNvZGU+XG48L2NvZGU+PC9wPgotCSAqIAotCSAqIDxwPkl0IHdpbGwgZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIGdpdmVuIGVkaXRvciwgY2hhbmdlIHRoZSBsaW5lIGVuZGluZ3MsCi0JICogYW5kIHRoZW4gc2F2ZSB0aGUgZWRpdG9yPC9wPgotCSAqIAotCSAqIEBwYXJhbSBlZGl0b3Igc3RhbmRhcmRpemUgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgdGV4dCBwcmVzZW50ZWQgaW4gdGhpcwotCSAqIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBYTUxDb2RlRm9sZGluZ1Rlc3RTZXR1cCBleHRlbmRzIFRlc3RTZXR1cCB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG51bGw7Ci0JCQotCQkvKioKLQkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCQkgKiAKLQkJICogQHBhcmFtIHRlc3QgZG8gc2V0dXAgZm9yIHRoZSBnaXZlbiB0ZXN0Ci0JCSAqLwotCQlwdWJsaWMgWE1MQ29kZUZvbGRpbmdUZXN0U2V0dXAoVGVzdCB0ZXN0KSB7Ci0JCQlzdXBlcih0ZXN0KTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGJlZm9yZSBhbGwgb2YgdGhlIHRlc3RzPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCNzZXRVcCgpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkJCi0JCQlpbml0aWFsaXplUmVzb3VyY2VzKCk7Ci0JCQkKLQkJCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUpOwotCQkJCi0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJfQotCi0JCS8qKgotCQkgKiA8cD5UaGlzIGlzIHJ1biBvbmNlIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bjwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjdGVhckRvd24oKQotCQkgKi8KLQkJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vY2xvc2Ugb3V0IHRoZSBlZGl0b3JzCi0JCQlJdGVyYXRvciBpdGVyID0gZkZpbGVUb0VkaXRvck1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpaXRlci5uZXh0KCk7Ci0JCQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQkJCQllZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJfQotCQkJCi0JCQlpZiAocHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlICE9IG51bGwpIHsKLQkJCQlTeXN0ZW0uc2V0UHJvcGVydHkoV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFLCBwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUpOwotCQkJfQotCQkJCi0JCQlmUHJvamVjdC5kZWxldGUodHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBTZXQgdXAgdGhlIHByb2plY3QgYW5kIHdvcmtiZW5jaCwgdGhpcyBzaG91bGQgb25seSBiZSBkb25lIG9uY2UKLQkJICovCi0JCXByaXZhdGUgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVJlc291cmNlcygpIHsKLQkJCWZQcm9qZWN0ID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG51bGwpOwotCQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKFBST0pFQ1RfRklMRVMsIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBpZ25vcmUKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVjb25jaWxlLklTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyI2Fib3V0VG9CZVJlY29uY2lsZWQoKQotCSAqLwotCXB1YmxpYyB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCS8vaWdub3JlCi0JfQotCi0JLyoqCi0JICoga2VlcCB0cmFjayBvZiBsYXN0IGRvY3VtZW50IHJlY29uY2lsZWQKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkucmVjb25jaWxlLklTb3VyY2VSZWNvbmNpbGluZ0xpc3RlbmVyI3JlY29uY2lsZWQob3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQsIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWwsIGJvb2xlYW4sIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlY29uY2lsZWQoSURvY3VtZW50IGRvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsIG1vZGVsLAotCQkJYm9vbGVhbiBmb3JjZWQsIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7Ci0JCWZSZWNvbmNpbGVkRG9jID0gZG9jdW1lbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxEaWZmLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTERpZmYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0ZTQ4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTERpZmYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogQGF1dGhvciBLaWh1cCBCb28KLSAqLwotcHVibGljIGNsYXNzIFhNTERpZmYKLXsKLSAgcHJpdmF0ZSBMaXN0IGVycm9yTWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBESUZGX0VMRU1FTlRfTk9ERV9PTkxZID0gZmFsc2U7Ci0gIHByaXZhdGUgU3RyaW5nIGZpbGVUeXBlID0gIiI7Ci0gIHB1YmxpYyBib29sZWFuIGRpZmYoU3RyaW5nIGZpbGUxLCBTdHJpbmcgZmlsZTIsIFN0cmluZyBmaWxlVHlwZSkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgewotICAgIHJldHVybiBkaWZmKGZpbGUxLGZpbGUyLCBmaWxlVHlwZSwgZmFsc2UpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBkaWZmKFN0cmluZyBmaWxlMSwgU3RyaW5nIGZpbGUyLCBTdHJpbmcgZmlsZVR5cGUsIGJvb2xlYW4gZWxlbWVudE9ubHkpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudCBkb2MxID0gZ2V0RG9jdW1lbnQoZmlsZTEpOwotICAgIERvY3VtZW50IGRvYzIgPSBnZXREb2N1bWVudChmaWxlMik7Ci0gIAlESUZGX0VMRU1FTlRfTk9ERV9PTkxZID0gZWxlbWVudE9ubHk7Ci0gICAgcmV0dXJuIGRpZmYoZG9jMSxkb2MyLCBmaWxlVHlwZSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyBib29sZWFuIGRpZmYoRG9jdW1lbnQgZG9jMSwgRG9jdW1lbnQgZG9jMiwgU3RyaW5nIGZpbGVUeXBlKQotICB7Ci0gICAgRWxlbWVudCByb290MSA9IGRvYzEuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgRWxlbWVudCByb290MiA9IGRvYzIuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JdGhpcy5maWxlVHlwZSA9IGZpbGVUeXBlOwotICAgIHJldHVybiBjb21wYXJlTm9kZXMocm9vdDEscm9vdDIpOwotICB9Ci0gIAotICBwcml2YXRlIERvY3VtZW50IGdldERvY3VtZW50KFN0cmluZyB1cmkpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLSAgICBEb2N1bWVudCBkb2MgPSBidWlsZGVyLnBhcnNlKHVyaSk7Ci0gICAgcmV0dXJuIGRvYzsKLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNvbXBhcmVOb2RlcyhOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKQotICB7Ci0gIAlpZiAoRElGRl9FTEVNRU5UX05PREVfT05MWSkKLSAgCXsKLSAgICAgIC8vIENvbXBhcmUgb25seSBlbGVtZW50IG5vZGVzIGluIHRoZSBjaGlsZHJlbi4KLSAgICAgIGZpbHRlck5vbkVsZW1lbnROb2Rlcyhub2RlMSk7Ci0gICAgICBmaWx0ZXJOb25FbGVtZW50Tm9kZXMobm9kZTIpOwotICAJfQotICAJCi0gICAgaWYgKG5vZGUxLmdldE5vZGVUeXBlKCkgIT0gbm9kZTIuZ2V0Tm9kZVR5cGUoKQotICAgICAgICB8fCBub2RlMS5nZXROb2RlTmFtZSgpICE9IG5vZGUyLmdldE5vZGVOYW1lKCkpCi0gICAgewotICAgIAllcnJvck1lc3NhZ2VzLmFkZCh0aGlzLmZpbGVUeXBlICsgIjogVHlwZSBvciBuYW1lIGRpZmZlcmVudDogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiICIgKyBub2RlMi5nZXROb2RlTmFtZSgpICsgIi4iKTsKLSAgICAgIHByaW50bG4oIk5vZGUgdHlwZSBvciBub2RlIG5hbWUgaXMgZGlmZmVyZW50OiIpOwotICAgICAgcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFjb21wYXJlQXR0cmlidXRlcyhub2RlMSxub2RlMikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTm9kZUxpc3Qgbm9kZUxpc3QxID0gbm9kZTEuZ2V0Q2hpbGROb2RlcygpOwotICAgIE5vZGVMaXN0IG5vZGVMaXN0MiA9IG5vZGUyLmdldENoaWxkTm9kZXMoKTsKLSAgICBpZiAobm9kZUxpc3QxLmdldExlbmd0aCgpICE9IG5vZGVMaXN0Mi5nZXRMZW5ndGgoKSkKLSAgICB7Ci0gICAgCWVycm9yTWVzc2FnZXMuYWRkKHRoaXMuZmlsZVR5cGUgKyAiOiBOdW1iZXIgb2YgY2hpbGRyZW4gZGlmZmVyZW50OiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSArICIuIik7Ci0gICAgICBwcmludGxuKCJUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGRpZmZlcmVudDoiKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZUxpc3QxLmdldExlbmd0aCgpKTsKLSAgICAgIC8vcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZUxpc3QyLmdldExlbmd0aCgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLSAgICBpbnQgbGVuZ3RoID0gbm9kZUxpc3QxLmdldExlbmd0aCgpOwotICAgIGZvciAoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKLSAgICB7Ci0gICAgICByZXN1bHQgPSBjb21wYXJlTm9kZXMobm9kZUxpc3QxLml0ZW0oaSksbm9kZUxpc3QyLml0ZW0oaSkpOwotICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIAlyZXR1cm4gdHJ1ZTsKLSAgfQotICAKLSAgcHJpdmF0ZSB2b2lkIGZpbHRlck5vbkVsZW1lbnROb2RlcyhOb2RlIG5vZGUpCi0gIHsKLSAgICBOb2RlIGZpcnN0Q2hpbGQgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoZmlyc3RDaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgIHsKLSAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7Ci0gICAgICBmaXJzdENoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgfQotICAgIAotICAgIE5vZGUgc2libGluZyA9IGZpcnN0Q2hpbGQuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICBOb2RlIGRlbGV0ZU1lID0gbnVsbDsKLSAgICB3aGlsZSAoc2libGluZyAhPSBudWxsKQotICAgIHsKLSAgICAgIGlmIChzaWJsaW5nLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpCi0gICAgICB7Ci0gICAgICAJZGVsZXRlTWUgPSBzaWJsaW5nOwotICAgICAgCXNpYmxpbmcgPSBzaWJsaW5nLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQoZGVsZXRlTWUpOwotICAgICAgfQotICAgICAgCi0gICAgfQotICB9Ci0gIAotICBwcml2YXRlIGJvb2xlYW4gY29tcGFyZUF0dHJpYnV0ZXMoTm9kZSBub2RlMSwgTm9kZSBub2RlMikKLSAgewotICAgIE5hbWVkTm9kZU1hcCBub2RlTWFwMSA9IG5vZGUxLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBOYW1lZE5vZGVNYXAgbm9kZU1hcDIgPSBub2RlMi5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgCi0gICAgaWYgKG5vZGVNYXAxID09IG51bGwgfHwgbm9kZU1hcDIgPT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAobm9kZU1hcDEgPT0gbnVsbCAmJiBub2RlTWFwMiA9PSBudWxsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZU1hcDEuZ2V0TGVuZ3RoKCkgIT0gbm9kZU1hcDIuZ2V0TGVuZ3RoKCkpCi0gICAgewotICAgIAllcnJvck1lc3NhZ2VzLmFkZCh0aGlzLmZpbGVUeXBlICsgIjogTnVtYmVyIG9mIGF0dHJpYnV0ZXMgZGlmZmVyZW50OiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSArICIuIik7Ci0gICAgCXByaW50bG4oIlRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpcyBkaWZmZXJlbnQ6Iik7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBOb2RlIGF0dHJOb2RlMSA9IG51bGw7Ci0gICAgTm9kZSBhdHRyTm9kZTIgPSBudWxsOwotICAgIGludCBsZW5ndGggPSBub2RlTWFwMS5nZXRMZW5ndGgoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8bGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgYXR0ck5vZGUxID0gbm9kZU1hcDEuaXRlbShpKTsKLSAgICAgIGF0dHJOb2RlMiA9IG5vZGVNYXAyLmdldE5hbWVkSXRlbShhdHRyTm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICBpZiAoYXR0ck5vZGUyID09IG51bGwpCi0gICAgICB7Ci0gICAgICAJZXJyb3JNZXNzYWdlcy5hZGQodGhpcy5maWxlVHlwZSArICI6IEF0dHJpYnV0ZSBub3QgZm91bmQ6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpICsgIi4iKTsKLSAgICAJcHJpbnRsbigiVGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgaW4gTm9kZSAyOiAiICsgYXR0ck5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKCFhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzKGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSkpCi0gICAgICB7Ci0gICAgICAJZXJyb3JNZXNzYWdlcy5hZGQodGhpcy5maWxlVHlwZSArICI6IEF0dHJpYnV0ZSB2YWx1ZXMgZGlmZmVyZW50OiAiICsgYXR0ck5vZGUxLmdldE5vZGVWYWx1ZSgpICsgIiAiICsgYXR0ck5vZGUyLmdldE5vZGVWYWx1ZSgpICsgIi4iKTsKLSAgICAJcHJpbnRsbigiVGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRpZmZlcmVudDoiKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSArICIsIiArIGF0dHJOb2RlMS5nZXROb2RlVmFsdWUoKSk7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkgKyAiLCIgKyBhdHRyTm9kZTIuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgCi0gICAgICB9Ci0gICAgfQotICAJcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBwcmludGxuKFN0cmluZyBzKQotICB7Ci0gICAgLy9vdXQucHJpbnRsbihzKTsKLSAgfQotCi0JLyoqCi0JICogQHJldHVybiBSZXR1cm5zIHRoZSBlcnJvck1lc3NhZ2VzLgotCSAqLwotCXB1YmxpYyBMaXN0IGdldEVycm9yTWVzc2FnZXMoKQotCXsKLQkJcmV0dXJuIGVycm9yTWVzc2FnZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGVhZTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5YTUxVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhNTFVJUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVUlQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC54bWwudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwkvLyByYW5kb20gc3RyaW5nCi0JCQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiK3ByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwkJCi0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gWE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQkKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSwgIjw9OiIpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSsiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7CQkKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSsiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDFlNmNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI1OTQ0NyAtIGNvbnRlbnQgYXNzaXN0YW5jZSB0ZXN0cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlRlc3RNYXJrdXBWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50YXNzaXN0LlRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuY29udGVudG1vZGVsLlRlc3RJbmZlcnJlZENvbnRlbnRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLQotCi1wdWJsaWMgY2xhc3MgWE1MVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBYTUxVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBYTUxVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBVSSBUZXN0IFN1aXRlIik7Ci0JCWFkZFRlc3QoWE1MQ29kZUZvbGRpbmdUZXN0LnN1aXRlKCkpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShYTUxVSVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0T3BlbkVkaXRvclhNTC5jbGFzcykpOwotCQlhZGRUZXN0KChuZXcgVGVzdFN1aXRlKFRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcykpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3ROZXdYTUxHZW5lcmF0b3IuY2xhc3MpKTsKLQkJYWRkVGVzdFN1aXRlKFRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MLmNsYXNzKTsKLQkJYWRkVGVzdFN1aXRlKFRlc3RNYXJrdXBWYWxpZGF0b3IuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdFJlY29uY2lsZXJYTUwuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsuY2xhc3MpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeS5jbGFzcywgIlRlc3QgU3BlbGxjaGVjayBEZWxlZ2F0ZSBBZGFwdGVyIEZhY3RvcnkiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0SW5mZXJyZWRDb250ZW50TW9kZWwuY2xhc3MsICJUZXN0IEluZmVycmVkIEdyYW1tYXIgU3VwcG9ydCIpKTsKLQkJYWRkVGVzdChUZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5zdWl0ZSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmM0ZmNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNTk0NDcgLSBjb250ZW50IGFzc2lzdGFuY2UgdGVzdHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVUlUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBYTUxVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQlwcm90ZWN0ZWQgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFhNTFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luQnVuZGxlID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBYTUxVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgICAqIAotICAgICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gICAgewotCSAgICB0cnkKLQkgICAgewotCSAgICAJcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsgLy8kTk9OLU5MUy0xJAotCSAgICB9Ci0JICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCSAgICB7Ci0JICAgIAlyZXR1cm4gbnVsbDsKLQkgICAgfQotCSAgfQotICAgIAotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy9TdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0gICAgCi0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0JCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWM3YmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvQnJlYWtwb2ludEVycm9yUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5JU291cmNlRWRpdGluZ1RleHRUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgQnJlYWtwb2ludEVycm9yUHJvdmlkZXIgaW1wbGVtZW50cyBJQnJlYWtwb2ludFByb3ZpZGVyIHsKLQotCUlTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIGZUb29sOwotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI2FkZEJyZWFrcG9pbnQob3JnLnczYy5kb20uRG9jdW1lbnQsCi0JICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0LAotCSAqICAgICAgb3JnLnczYy5kb20uTm9kZSwgaW50LCBpbnQpCi0JICovCi0JcHVibGljIElTdGF0dXMgYWRkQnJlYWtwb2ludChJRG9jdW1lbnQgaWRvYywgSUVkaXRvcklucHV0IGlucHV0LCBpbnQgbGluZU51bWJlciwgaW50IG9mZnNldCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZiAoZW5hYmxlKQotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIElTdGF0dXMuRVJST1IsICJUZXN0IEVycm9yISIsIG51bGwpOwotCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgIiIsIG51bGwpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUJyZWFrcG9pbnRQcm92aWRlciNnZXRSZXNvdXJjZShvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQpCi0JICovCi0JcHVibGljIElSZXNvdXJjZSBnZXRSZXNvdXJjZShJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVJlc291cmNlIHJlcyA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQlpZiAocmVzID09IG51bGwpCi0JCQlyZXMgPSAoSVJlc291cmNlKSBpbnB1dC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI3NldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMob3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuU291cmNlRWRpdGluZ1RleHRUb29scykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VFZGl0aW5nVGV4dFRvb2xzKElTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIHRvb2wpIHsKLQkJZlRvb2wgPSB0b29sOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvRW5hYmxlV2FybmluZ0FjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YTdmNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZEVkaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZFNpbXBsZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEVuYWJsZVdhcm5pbmdBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJRXh0ZW5kZWRFZGl0b3JBY3Rpb24gewotCUlFeHRlbmRlZFNpbXBsZUVkaXRvciBhY3RpdmVFZGl0b3I7Ci0KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICovCi0JcHVibGljIEVuYWJsZVdhcm5pbmdBY3Rpb24oU3RyaW5nIHRleHQpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICogQHBhcmFtIGltYWdlCi0JICovCi0JcHVibGljIEVuYWJsZVdhcm5pbmdBY3Rpb24oU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gc3R5bGUKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCwgaW50IHN0eWxlKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZEVkaXRvckFjdGlvbiNpc1Zpc2libGUoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNydW4oKQotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJc3VwZXIucnVuKCk7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIHZhbHVlID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoImJyZWFrLWVycm9yIiwgIXZhbHVlKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZEVkaXRvckFjdGlvbiNzZXRBY3RpdmVFeHRlbmRlZEVkaXRvcihvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbi5JRXh0ZW5kZWRTaW1wbGVFZGl0b3IpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRXh0ZW5kZWRFZGl0b3IoSUV4dGVuZGVkU2ltcGxlRWRpdG9yIHRhcmdldEVkaXRvcikgewotCQlhY3RpdmVFZGl0b3IgPSB0YXJnZXRFZGl0b3I7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklVcGRhdGUjdXBkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbW1lbnRlbGVtZW50L0NvbW1lbnRFbGVtZW50SGFuZGxlckZvckZvby5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb21tZW50ZWxlbWVudC9Db21tZW50RWxlbWVudEhhbmRsZXJGb3JGb28uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5NzgzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbW1lbnRlbGVtZW50L0NvbW1lbnRFbGVtZW50SGFuZGxlckZvckZvby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmNvbW1lbnRlbGVtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbW1lbnRlbGVtZW50LkNvbW1lbnRFbGVtZW50SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29tbWVudGVsZW1lbnQudXRpbC5Db21tZW50RWxlbWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbW1lbnRlbGVtZW50LnV0aWwuVGFnU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotcHVibGljIGNsYXNzIENvbW1lbnRFbGVtZW50SGFuZGxlckZvckZvbyBpbXBsZW1lbnRzIENvbW1lbnRFbGVtZW50SGFuZGxlcnsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGSVggPSAiZm9vIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBFbGVtZW50IGNyZWF0ZUVsZW1lbnQoRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBkYXRhLCBib29sZWFuIGlzSlNQVGFnKSB7Ci0KLQkJVGFnU2Nhbm5lciBzY2FubmVyID0gbmV3IFRhZ1NjYW5uZXIoZGF0YSwgMSk7Ci0JCVN0cmluZyBuYW1lID0gc2Nhbm5lci5uZXh0TmFtZSgpOwotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihuYW1lLmxlbmd0aCgpICsgNCk7Ci0JCWJ1ZmZlci5hcHBlbmQoUFJFRklYKTsKLQkJYnVmZmVyLmFwcGVuZCgnOicpOwotCQlidWZmZXIuYXBwZW5kKG5hbWUpOwotCQlTdHJpbmcgdGFnTmFtZSA9IGJ1ZmZlci50b1N0cmluZygpOwotCi0JCUNvbW1lbnRFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gbmV3IENvbW1lbnRFbGVtZW50RmFjdG9yeShkb2N1bWVudCwgaXNKU1BUYWcsIHRoaXMpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZSh0YWdOYW1lLCBDb21tZW50RWxlbWVudEZhY3RvcnkuSVNfU1RBUlQpOwotCi0JCS8vIHNldCBhdHRyaWJ1dGVzCi0JCVN0cmluZyBhdHRyTmFtZSA9IHNjYW5uZXIubmV4dE5hbWUoKTsKLQkJd2hpbGUgKGF0dHJOYW1lICE9IG51bGwpIHsKLQkJCVN0cmluZyBhdHRyVmFsdWUgPSBzY2FubmVyLm5leHRWYWx1ZSgpOwotCQkJQXR0ciBhdHRyID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGF0dHJOYW1lKTsKLQkJCWlmIChhdHRyICE9IG51bGwpIHsKLQkJCQlpZiAoYXR0clZhbHVlICE9IG51bGwpCi0JCQkJCWF0dHIuc2V0VmFsdWUoYXR0clZhbHVlKTsKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7Ci0JCQl9Ci0JCQlhdHRyTmFtZSA9IHNjYW5uZXIubmV4dE5hbWUoKTsKLQkJfQotCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdlbmVyYXRlRW5kVGFnQ29udGVudChJRE9NRWxlbWVudCBlbGVtZW50KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2VuZXJhdGVTdGFydFRhZ0NvbnRlbnQoSURPTUVsZW1lbnQgZWxlbWVudCkgewotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlidWZmZXIuYXBwZW5kKCcjJyk7Ci0JCWJ1ZmZlci5hcHBlbmQoZWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0KLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJaW50IGxlbmd0aCA9IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCUF0dHIgYXR0ciA9IChBdHRyKSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQlpZiAoYXR0ciA9PSBudWxsKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlidWZmZXIuYXBwZW5kKCcgJyk7Ci0JCQlTdHJpbmcgYXR0ck5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQlpZiAoYXR0ck5hbWUgIT0gbnVsbCkgewotCQkJCWJ1ZmZlci5hcHBlbmQoYXR0ck5hbWUpOwotCQkJfQotCQkJU3RyaW5nIGF0dHJWYWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQlpZiAoYXR0clZhbHVlICE9IG51bGwpIHsKLQkJCQkvLyBhdHRyIG5hbWUgb25seSBmb3IgSFRNTCBib29sZWFuIGFuZCBKU1AKLQkJCQlidWZmZXIuYXBwZW5kKCc9Jyk7Ci0JCQkJYnVmZmVyLmFwcGVuZChhdHRyVmFsdWUpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ29tbWVudEVsZW1lbnQoSURPTUVsZW1lbnQgZWxlbWVudCkgewotCQlTdHJpbmcgcHJlZml4ID0gZWxlbWVudC5nZXRQcmVmaXgoKTsKLQkJaWYgKHByZWZpeCA9PSBudWxsIHx8ICFwcmVmaXguZXF1YWxzKFBSRUZJWCkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlTdHJpbmcgdGFnTmFtZSA9IGVsZW1lbnQuZ2V0VGFnTmFtZSgpOwotCQlpZiAodGFnTmFtZS5sZW5ndGgoKSA8PSA0KSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdFhNTENvbnRlbnRBc3Npc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDA3YjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNTk0NDcgLSBpbnRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIG1ha2UgdXNlIG9mIChjb3B5IG9mIEpTUCBVSSBUZXN0cycpIFByb2plY3RVdGlsIHRvIHNraXAKLSAqICAgICAgICAgZmlsZS1zeXN0ZW0gY2FsbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhNTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLQotLyoqCi0gKiBUZXN0cyBldmVyeXRoaW5nIGFib3V0IGNvZGUgY29tcGxldGlvbiBhbmQgY29kZSBhc3Npc3RhbmNlLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0WE1MQ29udGVudEFzc2lzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBTdHJpbmcgcHJvamVjdE5hbWUgPSBudWxsOwotCXByb3RlY3RlZCBTdHJpbmcgZmlsZU5hbWUgPSBudWxsOwotCXByb3RlY3RlZCBJRmlsZSBmaWxlID0gbnVsbDsKLQlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgdGV4dEVkaXRvclBhcnQgPSBudWxsOwotCXByb3RlY3RlZCBJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCi0JcHJvdGVjdGVkIFhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbnVsbDsKLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JcHJvdGVjdGVkIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIG1vZGVsOwotCXByb3RlY3RlZCBYTUxDb250ZW50QXNzaXN0UHJvY2Vzc29yIHhtbENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgPSBudWxsOwotCi0JcHVibGljIFRlc3RYTUxDb250ZW50QXNzaXN0KCkgewotCX0KLQotCS8qKgotCSAqIFNldHVwIHRoZSBuZWNlc3NhcnkgcHJvamVjdHMsIGZpbGVzLCBhbmQgc291cmNlIHZpZXdlciBmb3IgdGhlIHRlc3RzLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXByb2plY3ROYW1lID0gIlRlc3RYTUxDb250ZW50QXNzaXN0IjsKLQkJZmlsZU5hbWUgPSAieG1sQ29udGVudEFzc2lzdC10ZXN0MS54bWwiOwotCi0JCS8vIFNldHVwIHRoZSBQcm9qZWN0IGFuZCBGaWxlIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSB0ZXN0LgotCQlTdHJpbmcgeG1sRmlsZVBhdGggPSBzZXR1cFByb2plY3QoKTsKLQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZSgKLQkJCQluZXcgUGF0aCh4bWxGaWxlUGF0aCkpOwotCQlpZiAoZmlsZSAhPSBudWxsICYmICFmaWxlLmV4aXN0cygpKSB7Ci0JCQlBc3NlcnQuZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSAiICsgeG1sRmlsZVBhdGggKyAiLiIpOwotCQl9Ci0KLQkJbG9hZFhNTEZpbGUoKTsKLQotCQlpbml0aWFsaXplU291cmNlVmlld2VyKCk7Ci0JCXhtbENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgPSBuZXcgWE1MQ29udGVudEFzc2lzdFByb2Nlc3NvcigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVTb3VyY2VWaWV3ZXIoKSB7Ci0JCS8vIHNvbWUgdGVzdCBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgYSAicmVhbCIgZGlzcGxheQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkKLQkJCQkJCS5nZXRTaGVsbCgpOwotCQkJfSBlbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJc291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsCi0JCQkJCVNXVC5OT05FKTsKLQkJfSBlbHNlIHsKLQkJCUFzc2VydAotCQkJCQkuZmFpbCgiVW5hYmxlIHRvIHJ1biB0aGUgdGVzdCBhcyBhIGRpc3BsYXkgbXVzdCBiZSBhdmFpbGFibGUuIik7Ci0JCX0KLQotCQljb25maWd1cmVTb3VyY2VWaWV3ZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTb3VyY2VWaWV3ZXIoKSB7Ci0JCXNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpKTsKLQotCQlzb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGxvYWRYTUxGaWxlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwKLQkJCUlPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZSk7Ci0JCWRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBzZXR1cFByb2plY3QoKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkKLQkJCQkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3ROYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0KLQkJfQotCQlTdHJpbmcgeG1sRmlsZVBhdGggPSBwcm9qZWN0LmdldEZ1bGxQYXRoKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS5hcHBlbmQoZmlsZU5hbWUpLnRvU3RyaW5nKCk7Ci0JCS8vIG5lZWRzIGJvdGggdGhlIHRlc3QgZmlsZSBhbmQgc2NoZW1hcwotCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0cmVzb3VyY2VzIiwgcHJvamVjdC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpOwotCQlyZXR1cm4geG1sRmlsZVBhdGg7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJeG1sQ29udGVudEFzc2lzdFByb2Nlc3Nvci5yZWxlYXNlKCk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBjb250ZW50IGNvbXBsZXRpb24gcHJvcG9zYWxzIGF0IDxjb2RlPmxpbmVOdW1iZXI8L2NvZGU+LAotCSAqIDxjb2RlPmNvbHVtbk51bWJlcjwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIGxpbmVOdW1iZXIKLQkgKiBAcGFyYW0gY29sdW1uTnVtYmVyCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSBJQ29tcGxldGlvblByb3Bvc2FsW10gZ2V0UHJvcG9zYWxzKGludCBvZmZzZXQpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJcmV0dXJuIHhtbENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMoCi0JCQkJc291cmNlVmlld2VyLCBvZmZzZXQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVQcm9wb3NhbCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJaW50IG9mZnNldCA9IHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQoMTApICsgMTA7Ci0JCQlJRE9NTm9kZSBub2RlID0gKElET01Ob2RlKSBDb250ZW50QXNzaXN0VXRpbHMuZ2V0Tm9kZUF0KAotCQkJCQlzb3VyY2VWaWV3ZXIsIG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIldyb25nIG5vZGUgbmFtZSByZXR1cm5lZDoiLCAiTWVtYmVyIiwgbm9kZQotCQkJCQkuZ2V0Tm9kZU5hbWUoKSk7Ci0KLQkJCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wb3NhbHMgPSBnZXRQcm9wb3NhbHMob2Zmc2V0KTsKLQkJCWFzc2VydFRydWUoIkxlbmd0aCBsZXNzIHRoYW4gMSIsIHByb3Bvc2Fscy5sZW5ndGggPiAxKTsKLQkJCUlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBwcm9wb3NhbHNbMF07Ci0JCQlhc3NlcnRFcXVhbHMoIldyb25nIGF0dHJpYnV0ZSBwcm9wb3NhbCByZXR1cm5lZCBhdCBbIitzb3VyY2VWaWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXQob2Zmc2V0LTksIDkpKyJ8Iitzb3VyY2VWaWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXQob2Zmc2V0LCA5KSsiXSIsICJoYW5kaWNhcCIsCi0JCQkJCXByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDaGlsZEVsZW1lbnRQcm9wb3NhbCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJaW50IG9mZnNldCA9IHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQoMTEpICsgODsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMiLCA1LCBwcm9wb3NhbHMubGVuZ3RoKTsKLQkJCUlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBwcm9wb3NhbHNbMF07Ci0JCQlhc3NlcnRFcXVhbHMoIldyb25nIGVsZW1lbnQgcHJvcG9zYWwgcmV0dXJuZWQuIiwgIkV4Y2x1c2l2ZU1lbWJlciIsCi0JCQkJCXByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaGFmdEVsZW1lbnRQcm9wb3NhbCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJaW50IG9mZnNldCA9IHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQoMjQpICsgNjsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMiLCA3LCBwcm9wb3NhbHMubGVuZ3RoKTsKLQkJCUlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBwcm9wb3NhbHNbMF07Ci0JCQlhc3NlcnRFcXVhbHMoIldyb25nIGVsZW1lbnQgcHJvcG9zYWwgcmV0dXJuZWQuIiwgIlNoYWZ0IiwgcHJvcG9zYWwKLQkJCQkJLmdldERpc3BsYXlTdHJpbmcoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxUZW1wbGF0ZVBvc2l0aW9uYWxQcm9wb3NhbCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJaW50IG9mZnNldCA9IHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQoMjQpICsgNjsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHMiLCA3LCBwcm9wb3NhbHMubGVuZ3RoKTsKLQkJCUlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBwcm9wb3NhbHNbNV07Ci0JCQlhc3NlcnRFcXVhbHMoIldyb25nIHRlbXBsYXRlIHByb3Bvc2FsIHJldHVybmVkLiIsCi0JCQkJCSJjb21tZW50IC0geG1sIGNvbW1lbnQiLCBwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkpOwotCQl9IGZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MQ29tbWVudFRlbXBsYXRlUHJvcG9zYWxFeGlzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCWludCBvZmZzZXQgPSBzb3VyY2VWaWV3ZXIuZ2V0RG9jdW1lbnQoKS5nZXRMaW5lT2Zmc2V0KDI0KSArIDY7Ci0KLQkJCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wb3NhbHMgPSBnZXRQcm9wb3NhbHMob2Zmc2V0KTsKLQkJCWFzc2VydE5vdE51bGwoIk5vIHByb3Bvc2FscyByZXR1cm5lZC4iLCBwcm9wb3NhbHMpOwotCQkJYm9vbGVhbiBmb3VuZHN3ID0gZmFsc2U7Ci0JCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCBwcm9wb3NhbHMubGVuZ3RoOyBjbnQrKykgewotCQkJCUlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBwcm9wb3NhbHNbY250XTsKLQkJCQlpZiAocHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpLmVxdWFscygiY29tbWVudCAtIHhtbCBjb21tZW50IikpIHsKLQkJCQkJZm91bmRzdyA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGZvdW5kc3cgPT0gZmFsc2UpIHsKLQkJCQlmYWlsKCJYTUwgVGVtcGxhdGUgJ3htbCBjb21tZW50JyB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm9wb3NhbCBsaXN0Iik7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvVGVzdFhNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWVjZWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLQotcHVibGljIGNsYXNzIFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdCB0aGF0IGFsbCBvZiB0aGVzZSB0ZXN0cyB3aWxsIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdFhNTENvbnRlbnRBc3Npc3RDb21wdXRlcnMiOwotCQotCS8qKiBUaGUgbG9jYXRpb24gb2YgdGhlIHRlc3RpbmcgZmlsZXMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9GSUxFUyA9ICIvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0IjsKLQkKLQkvKiogVGhlIHByb2plY3QgdGhhdCBhbGwgb2YgdGhlIHRlc3RzIHVzZSAqLwotCXByaXZhdGUgc3RhdGljIElQcm9qZWN0IGZQcm9qZWN0OwotCQotCS8qKgotCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWxyZWFkeSBvcGVuIGVkaXRvcnMgc28gdGhhdCB0aGUgdGVzdHMgZG9uJ3QgZ28gdGhyb3VnaAotCSAqIHRoZSB0cm91YmxlIG9mIG9wZW5pbmcgdGhlIHNhbWUgZWRpdG9ycyBvdmVyIGFuZCBvdmVyIGFnYWluCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgTWFwIGZGaWxlVG9FZGl0b3JNYXAgPSBuZXcgSGFzaE1hcCgpOwotCQotCS8qKgotCSAqIDxwPkRlZmF1bHQgY29uc3RydWN0b3I8cD4KLQkgKiA8cD5Vc2Uge0BsaW5rICNzdWl0ZSgpfTwvcD4KLQkgKiAKLQkgKiBAc2VlICNzdWl0ZSgpCi0JICovCi0JcHVibGljIFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzKCkgewotCQlzdXBlcigiVGVzdCBYTUwgQ29udGVudCBBc3Npc3QgQ29tcHV0ZXJzIik7Ci0JfQotCQotCS8qKgotCSAqIDxwPkNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSB0ZXN0IG5hbWUuPC9wPgotCSAqIDxwPlVzZSB7QGxpbmsgI3N1aXRlKCl9PC9wPgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRoaXMgdGVzdCBydW4gc2hvdWxkIGhhdmUuCi0JICogCi0JICogQHNlZSAjc3VpdGUoKQotCSAqLwotCXB1YmxpYyBUZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+VXNlIHRoaXMgbWV0aG9kIHRvIGFkZCB0aGVzZSB0ZXN0cyB0byBhIGxhcmdlciB0ZXN0IHN1aXRlIHNvIHNldCB1cAotCSAqIGFuZCB0ZWFyIGRvd24gY2FuIGJlIHBlcmZvcm1lZDwvcD4KLQkgKiAKLQkgKiBAcmV0dXJuIGEge0BsaW5rIFRlc3RTZXR1cH0gdGhhdCB3aWxsIHJ1biBhbGwgb2YgdGhlIHRlc3RzIGluIHRoaXMgY2xhc3MKLQkgKiB3aXRoIHNldCB1cCBhbmQgdGVhciBkb3duLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHRzID0gbmV3IFRlc3RTdWl0ZShUZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVycy5jbGFzcywgIlRlc3QgWE1MIENvbnRlbnQgQXNzaXN0IENvbXB1dGVycyIpOwotCQlyZXR1cm4gbmV3IFRlc3RYTUxDb250ZW50QXNzaXN0Q29tcHV0ZXJzU2V0dXAodHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q2hpbGRFbGVtZW50UHJvcG9zYWxzMSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs1LCAyLCAzLCA1fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS54bWwiLCAxMSwgOCwgZXhwZWN0ZWRQcm9wb3NhbENvdW50cyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDaGlsZEVsZW1lbnRQcm9wb3NhbHMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGRlZmF1bHQgcGFnZSwgdGVtcGxhdGVzIHBhZ2UsIHRhZ3MgcGFnZSwgZGVmYXVsdCBwYWdlIGFnYWluCi0JCWludFtdIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMgPSBuZXcgaW50W10gezcsIDIsIDUsIDd9OwotCQlydW5Qcm9wb3NhbFRlc3QoInRlc3QxLnhtbCIsIDI0LCA2LCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZVByb3Bvc2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs1LCA0LCAxLCA1fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0MS54bWwiLCAxMCwgMTAsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluaXNoQ2xvc2luZ1RhZ05hbWVQcm9wc29hbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZGVmYXVsdCBwYWdlLCB0ZW1wbGF0ZXMgcGFnZSwgdGFncyBwYWdlLCBkZWZhdWx0IHBhZ2UgYWdhaW4KLQkJaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cyA9IG5ldyBpbnRbXSB7MSwgMCwgMSwgMX07Ci0JCXJ1blByb3Bvc2FsVGVzdCgidGVzdDIueG1sIiwgMiwgMTksIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmluaXNoQ2xvc2luZ1RhZ1Byb3Bzb2FscygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBkZWZhdWx0IHBhZ2UsIHRlbXBsYXRlcyBwYWdlLCB0YWdzIHBhZ2UsIGRlZmF1bHQgcGFnZSBhZ2FpbgotCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzID0gbmV3IGludFtdIHs2LCA0LCAyLCA2fTsKLQkJcnVuUHJvcG9zYWxUZXN0KCJ0ZXN0Mi54bWwiLCAzLCAwLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+UnVuIGEgcHJvcG9zYWwgdGVzdCBieSBvcGVuaW5nIHRoZSBnaXZlbiBmaWxlIGFuZCBpbnZva2luZyBjb250ZW50IGFzc2lzdCBmb3IKLQkgKiBlYWNoIGV4cGVjdGVkIHByb3Bvc2FsIGNvdW50IGF0IHRoZSBnaXZlbiBsaW5lIG51bWJlciBhbmQgbGluZSBjaGFyYWN0ZXIKLQkgKiBvZmZzZXQgYW5kIHRoZW4gY29tcGFyZSB0aGUgbnVtYmVyIG9mIHByb3Bvc2FscyBmb3IgZWFjaCBpbnZvY2F0aW9uIChwYWdlcykgdG8gdGhlCi0JICogZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2Fscy48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGVOYW1lCi0JICogQHBhcmFtIGxpbmVOdW0KLQkgKiBAcGFyYW0gbGluZVJlbGF0aXZlQ2hhck9mZnNldAotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHJ1blByb3Bvc2FsVGVzdChTdHJpbmcgZmlsZU5hbWUsCi0JCQlpbnQgbGluZU51bSwgaW50IGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQsCi0JCQlpbnRbXSBleHBlY3RlZFByb3Bvc2FsQ291bnRzKSB0aHJvd3MgRXhjZXB0aW9uewotCQkKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoZmlsZU5hbWUpOwotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlpbnQgb2Zmc2V0ID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldChsaW5lTnVtKSArIGxpbmVSZWxhdGl2ZUNoYXJPZmZzZXQ7Ci0KLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBnZXRQcm9wb3NhbHModmlld2VyLCBvZmZzZXQsIGV4cGVjdGVkUHJvcG9zYWxDb3VudHMubGVuZ3RoKTsKLQkJCi0JCXZlcmlmeVByb3Bvc2FsQ291bnRzKHBhZ2VzLCBleHBlY3RlZFByb3Bvc2FsQ291bnRzKTsKLQl9Ci0JCi0JLyoqCi0JICogPHA+SW52b2tlIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBnaXZlbiB2aWV3ZXIgYXQgdGhlIGdpdmVuIG9mZnNldCwgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgcGFnZXMKLQkgKiBhbmQgcmV0dXJuIHRoZSByZXN1bHRzIG9mIGVhY2ggcGFnZTwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEBwYXJhbSBwYWdlQ291bnQKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJQ29tcGxldGlvblByb3Bvc2FsW11bXSBnZXRQcm9wb3NhbHMoU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyLCBpbnQgb2Zmc2V0LCBpbnQgcGFnZUNvdW50KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9zZXR1cCB0aGUgdmlld2VyCi0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCBjb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpOwotCQlDb250ZW50QXNzaXN0YW50IGNvbnRlbnRBc3Npc3RhbnQgPSAoQ29udGVudEFzc2lzdGFudCljb25maWd1cmF0aW9uLmdldENvbnRlbnRBc3Npc3RhbnQodmlld2VyKTsKLQkJdmlld2VyLmNvbmZpZ3VyZShjb25maWd1cmF0aW9uKTsKLQkJdmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uob2Zmc2V0LCAwKTsKLQkJCi0JCS8vZ2V0IHRoZSBwcm9jZXNzb3IKLQkJU3RyaW5nIHBhcnRpdGlvblR5cGVJRCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldFBhcnRpdGlvbihvZmZzZXQpLmdldFR5cGUoKTsKLQkJSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IgcHJvY2Vzc29yID0gY29udGVudEFzc2lzdGFudC5nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29yKHBhcnRpdGlvblR5cGVJRCk7Ci0KLQkJLy9maXJlIGNvbnRlbnQgYXNzaXN0IHNlc3Npb24gYWJvdXQgdG8gc3RhcnQKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QgPSBDb250ZW50QXNzaXN0YW50LmNsYXNzLgotCQkgICAgICAgIGdldERlY2xhcmVkTWV0aG9kKCJmaXJlU2Vzc2lvbkJlZ2luRXZlbnQiLCBuZXcgQ2xhc3NbXSB7Ym9vbGVhbi5jbGFzc30pOwotCQlwcml2YXRlRmlyZVNlc3Npb25CZWdpbkV2ZW50TWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXByaXZhdGVGaXJlU2Vzc2lvbkJlZ2luRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG5ldyBPYmplY3RbXSB7Qm9vbGVhbi5UUlVFfSk7Ci0KLQkJLy9nZXQgY29udGVudCBhc3Npc3Qgc3VnZ2VzdGlvbnMKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdW10gcGFnZXMgPSBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwYWdlQ291bnRdW107Ci0JCWZvcihpbnQgcCA9IDA7IHAgPCBwYWdlQ291bnQ7ICsrcCkgewotCQkJcGFnZXNbcF0gPSBwcm9jZXNzb3IuY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHModmlld2VyLCBvZmZzZXQpOwotCQl9Ci0JCQotCQkvL2ZpcmUgY29udGVudCBhc3Npc3Qgc2Vzc2lvbiBlbmRpbmcKLQkJTWV0aG9kIHByaXZhdGVGaXJlU2Vzc2lvbkVuZEV2ZW50TWV0aG9kID0gQ29udGVudEFzc2lzdGFudC5jbGFzcy4KLSAgICAgICAgZ2V0RGVjbGFyZWRNZXRob2QoImZpcmVTZXNzaW9uRW5kRXZlbnQiLCBudWxsKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcHJpdmF0ZUZpcmVTZXNzaW9uRW5kRXZlbnRNZXRob2QuaW52b2tlKGNvbnRlbnRBc3Npc3RhbnQsIG51bGwpOwotCQkKLQkJcmV0dXJuIHBhZ2VzOwotCX0KLQkKLQkvKioKLQkgKiA8cD5Db21wYXJlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcG9zYWxzIHBlciBwYWdlIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHByb3Bvc2FscwotCSAqIHBlciBwYWdlPC9wPgotCSAqIAotCSAqIEBwYXJhbSBwYWdlcwotCSAqIEBwYXJhbSBleHBlY3RlZFByb3Bvc2FsQ291bnRzCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJpZnlQcm9wb3NhbENvdW50cyhJQ29tcGxldGlvblByb3Bvc2FsW11bXSBwYWdlcywgaW50W10gZXhwZWN0ZWRQcm9wb3NhbENvdW50cykgewotCQlTdHJpbmdCdWZmZXIgZXJyb3IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvcihpbnQgcGFnZSA9IDA7IHBhZ2UgPCBleHBlY3RlZFByb3Bvc2FsQ291bnRzLmxlbmd0aDsgKytwYWdlKSB7Ci0JCQlpZihleHBlY3RlZFByb3Bvc2FsQ291bnRzW3BhZ2VdICE9IHBhZ2VzW3BhZ2VdLmxlbmd0aCkgewotCQkJCWVycm9yLmFwcGVuZCgiXG5Qcm9wb3NhbCBwYWdlICIgKyBwYWdlICsgIiBkaWQgbm90IGhhdmUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwcm9wb3NhbHM6IHdhcyAiICsKLQkJCQkJCXBhZ2VzW3BhZ2VdLmxlbmd0aCArICIgZXhwZWN0ZWQgIiArIGV4cGVjdGVkUHJvcG9zYWxDb3VudHNbcGFnZV0pOwotCQkJfQotCQl9Ci0JCQotCQkvL2lmIGVycm9ycyByZXBvcnQgdGhlbQotCQlpZihlcnJvci5sZW5ndGgoKSA+IDApIHsKLQkJCUFzc2VydC5mYWlsKGVycm9yLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgZmlsZSBuYW1lIGluIDxjb2RlPmZQcm9qZWN0PC9jb2RlPiBhdHRlbXB0cyB0byBnZXQgYW4gPGNvZGU+SUZpbGU8L2NvZGU+Ci0JICogZm9yIGl0LCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHRoZSB0ZXN0IGZhaWxzLjwvcD4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JRmlsZTwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA8Y29kZT5uYW1lPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIElGaWxlIGdldEZpbGUoU3RyaW5nIG5hbWUpIHsKLQkJSUZpbGUgZmlsZSA9IGZQcm9qZWN0LmdldEZpbGUobmFtZSk7Ci0JCWFzc2VydFRydWUoIlRlc3QgZmlsZSAiICsgZmlsZSArICIgY2FuIG5vdCBiZSBmb3VuZCIsIGZpbGUuZXhpc3RzKCkpOwotCQkKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCQotCS8qKgotCSAqIDxwPkdpdmVuIGEgPGNvZGU+ZmlsZTwvY29kZT4gZ2V0IGFuIGVkaXRvciBmb3IgaXQuIElmIGFuIGVkaXRvciBoYXMgYWxyZWFkeQotCSAqIGJlZW4gcmV0cmlldmVkIGZvciB0aGUgZ2l2ZW4gPGNvZGU+ZmlsZTwvY29kZT4gdGhlbiByZXR1cm4gdGhlIHNhbWUgYWxyZWFkeQotCSAqIG9wZW4gZWRpdG9yLjwvcD4KLQkgKiAKLQkgKiA8cD5XaGVuIG9wZW5pbmcgdGhlIGVkaXRvciBpdCB3aWxsIGFsc28gc3RhbmRhcmRpemVkIHRoZSBsaW5lCi0JICogZW5kaW5ncyB0byA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogQHBhcmFtIGZpbGUgb3BlbiBhbmQgcmV0dXJuIGFuIGVkaXRvciBmb3IgdGhpcwotCSAqIEByZXR1cm4gPGNvZGU+U3RydWN0dXJlZFRleHRFZGl0b3I8L2NvZGU+IG9wZW5lZCBmcm9tIHRoZSBnaXZlbiA8Y29kZT5maWxlPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGdldEVkaXRvcihJRmlsZSBmaWxlKSAgewotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpZkZpbGVUb0VkaXRvck1hcC5nZXQoZmlsZSk7Ci0JCQotCQlpZihlZGl0b3IgPT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZpbGUsIHRydWUsIHRydWUpOwotCQkJCWlmKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB7Ci0JCQkJCVhNTE11bHRpUGFnZUVkaXRvclBhcnQgeG1sRWRpdG9yUGFydCA9IChYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KWVkaXRvclBhcnQ7Ci0JCQkJCWVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcil4bWxFZGl0b3JQYXJ0LmdldEFkYXB0ZXIoU3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MpOwotCQkJCX0gZWxzZSBpZihlZGl0b3JQYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJZWRpdG9yID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcillZGl0b3JQYXJ0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIik7Ci0JCQkJfQotCQkJCQotCQkJCWlmKGVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCXN0YW5kYXJkaXplTGluZUVuZGluZ3MoZWRpdG9yKTsKLQkJCQkJZkZpbGVUb0VkaXRvck1hcC5wdXQoZmlsZSwgZWRpdG9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlmYWlsKCJDb3VsZCBub3Qgb3BlbiBlZGl0b3IgZm9yICIgKyBmaWxlKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWZhaWwoIkNvdWxkIG5vdCBvcGVuIGVkaXRvciBmb3IgIiArIGZpbGUgKyAiIGV4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0JCi0JLyoqCi0JICogPHA+TGluZSBlbmRpbmdzIGNhbiBiZSBhbiBpc3N1ZSB3aGVuIHJ1bm5pbmcgdGVzdHMgb24gZGlmZmVyZW50IE9Tcy4KLQkgKiBUaGlzIGZ1bmN0aW9uIHN0YW5kYXJkaXplcyB0aGUgbGluZSBlbmRpbmdzIHRvIHVzZSA8Y29kZT5cbjwvY29kZT48L3A+Ci0JICogCi0JICogPHA+SXQgd2lsbCBnZXQgdGhlIHRleHQgZnJvbSB0aGUgZ2l2ZW4gZWRpdG9yLCBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncywKLQkgKiBhbmQgdGhlbiBzYXZlIHRoZSBlZGl0b3I8L3A+Ci0JICogCi0JICogQHBhcmFtIGVkaXRvciBzdGFuZGFyZGl6ZSB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSB0ZXh0IHByZXNlbnRlZCBpbiB0aGlzCi0JICogZWRpdG9yLgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgc3RhbmRhcmRpemVMaW5lRW5kaW5ncyhTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCkuZ2V0RG9jdW1lbnQoKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9jLmdldCgpOwotCQljb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudHMsICJcclxuIiwgIlxuIik7Ci0JCWNvbnRlbnRzID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50cywgIlxyIiwgIlxuIik7Ci0JCWRvYy5zZXQoY29udGVudHMpOwotCX0KLQkKLQkvKioKLQkgKiA8cD5UaGlzIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gZG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYmVmb3JlIGFuZAotCSAqIGFmdGVyIChyZXNwZWN0aXZlbHkpIGFsbCB0ZXN0cyBpbiB0aGUgaW5jbG9zaW5nIGNsYXNzIGhhdmUgcnVuLjwvcD4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwIGV4dGVuZHMgVGVzdFNldHVwIHsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSA9ICJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiOwotCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbkludGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkJCi0JCS8qKgotCQkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCi0JCSAqIAotCQkgKiBAcGFyYW0gdGVzdCBkbyBzZXR1cCBmb3IgdGhlIGdpdmVuIHRlc3QKLQkJICovCi0JCXB1YmxpYyBUZXN0WE1MQ29udGVudEFzc2lzdENvbXB1dGVyc1NldHVwKFRlc3QgdGVzdCkgewotCQkJc3VwZXIodGVzdCk7Ci0JCX0KLQotCQkvKioKLQkJICogPHA+VGhpcyBpcyBydW4gb25jZSBiZWZvcmUgYWxsIG9mIHRoZSB0ZXN0czwvcD4KLQkJICogCi0JCSAqIEBzZWUganVuaXQuZXh0ZW5zaW9ucy5UZXN0U2V0dXAjc2V0VXAoKQotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCS8vc2V0dXAgcHJvcGVydGllcwotCQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJCXByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSA9IG5vbmludGVyYWN0aXZlOwotCQkJfSBlbHNlIHsKLQkJCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQkJfQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgInRydWUiKTsKLQkJCQotCQkJLy9zZXR1cCBwcm9qZWN0Ci0JCQlmUHJvamVjdCA9IFByb2plY3RVdGlsLmNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBQUk9KRUNUX05BTUUpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIDxwPlRoaXMgaXMgcnVuIG9uY2UgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuPC9wPgotCQkgKiAKLQkJICogQHNlZSBqdW5pdC5leHRlbnNpb25zLlRlc3RTZXR1cCN0ZWFyRG93bigpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkJLy9jbG9zZSBvdXQgdGhlIGVkaXRvcnMKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBmRmlsZVRvRWRpdG9yTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZShpdGVyLmhhc05leHQoKSkgewotCQkJCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcilpdGVyLm5leHQoKTsKLQkJCQllZGl0b3IuZG9TYXZlKG51bGwpOwotCQkJCWVkaXRvci5jbG9zZShmYWxzZSk7Ci0JCQl9Ci0JCQkKLQkJCS8vcmVtb3ZlIHByb2plY3QKLQkJCWZQcm9qZWN0LmRlbGV0ZSh0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQotCQkJLy9yZXN0b3JlIHByb3BlcnRpZXMKLQkJCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSW50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsIHByZXZpb3VzV1RQQXV0b1Rlc3ROb25JbnRlcmFjdGl2ZVByb3BWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0SW5mZXJyZWRDb250ZW50TW9kZWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RJbmZlcnJlZENvbnRlbnRNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmRhOTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RJbmZlcnJlZENvbnRlbnRNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5lZGl0b3IuRWRpdG9yTW9kZWxVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5YTUxVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhNTFVJUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQGF1dGhvciBuaXRpbgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3RJbmZlcnJlZENvbnRlbnRNb2RlbCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyBUZXN0SW5mZXJyZWRDb250ZW50TW9kZWwoKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluZmVycmVkQXR0clR5cGVEZWZhdWx0X2J1ZzMxODEwOCgpIHsKLQkJYm9vbGVhbiB1c2VJbmZlcnJlZCA9IFhNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSKTsKLQkJWE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSLCB0cnVlKTsKLQkJCi0JCQotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8cm9vdD5cbjxhIHI9XCIxXCIvPlxuPGE+XG48L3Jvb3Q+XG4iKTsKLQkJCi0JCUVkaXRvck1vZGVsVXRpbC5hZGRGYWN0b3JpZXNUbyhtb2RlbCk7Ci0JCS8vIG5lZWQgdG8gd2FpdCBmb3IgZGVsYXllZCBET01PYnNlcnZlciB0byBidWlsZCBpbmZlcnJlZCBjb250ZW50IG1vZGVsCi0JCXRyeSB7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUxKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQllMS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQkKLQkJTm9kZUxpc3QgZWxlbWVudHNCeVRhZ05hbWUgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIik7Ci0JCXRyeSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzQnlUYWdOYW1lLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZWxlbWVudHNCeVRhZ05hbWUuaXRlbShpKTsKLQkJCQlhLmdldEF0dHJpYnV0ZSgiciIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTMxODEwOAotCQkJZmFpbChlLnRvU3RyaW5nKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJWE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSLCB1c2VJbmZlcnJlZCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhODliZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Mb2dnZXI7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQkKLQkJLy8gc29tZSB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBhICJyZWFsIiBkaXNwbGF5Ci0JCWlmKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQkJCQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0JCQkKLQkJCWlmKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewkKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCQkKLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQkKLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMCk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotICAgIH0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH07Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzk4MzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3RYTUwgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCi0JCWludCBsZW5ndGhWYWx1ZTsKLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCi0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgXCItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU5cIiBcImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGRcIj5cbiI7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZTb3VyY2VWaWV3ZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBYTUwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coc291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQkJcmV0dXJuOwotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQkJc291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLyBtZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vIH0KLQkJCS8vCi0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8gcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLyB9Ci0JCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLyBzdXBlci5ydW4oKTsKLQkJCS8vIHZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIENlYXNlIGZvbGxvd2luZyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI4ZTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTAueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjE1MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT48L05hbWU+Ci0gICAgPFlhcmRhZ2U+PC9ZYXJkYWdlPgotICAgIDxQYXI+PC9QYXI+Ci0gICAgPEhhbmRpY2FwPjwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPjwvU2xvcGU+Ci0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlci8+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgPFNoYWZ0PjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0xLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTlmNDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2UgTnVtYmVyT2ZIb2xlcz0iMTgiPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyIGhhbmRpY2FwPSIwIi8+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgPFNoYWZ0PjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0yLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjEyMDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2U+Ci0gICAgPE5hbWU+PC9OYW1lPgotICAgIDxZYXJkYWdlPjwvWWFyZGFnZT4KLSAgICA8UGFyPjwvUGFyPgotICAgIDxIYW5kaWNhcD48L0hhbmRpY2FwPgotICAgIDxTbG9wZT48L1Nsb3BlPgotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIvPgotICA8RW1wbG95ZWU+Ci0gICAgPEZpcnN0TmFtZT48L0ZpcnN0TmFtZT4KLSAgICA8TWlkZGxlTmFtZT48L01pZGRsZU5hbWU+Ci0gICAgPExhc3ROYW1lPjwvTGFzdE5hbWU+Ci0gICAgPEVtcGxveWVlTnVtYmVyPjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD48L0xvZnQ+Ci0gICAgICA8U2hhZnQ+PC9TaGFmdD4KLSAgICA8L0dvbGZDbHViPgotICAgIDxCb3hPZkJhbGxzPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIwLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIwLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlYTg5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0yMC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT48L05hbWU+Ci0gICAgPFlhcmRhZ2U+PC9ZYXJkYWdlPgotICAgIDxQYXI+PC9QYXI+Ci0gICAgPEhhbmRpY2FwPjwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPjwvU2xvcGU+Ci0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlcj4KLSAgICA8UmVzdHJpY3RlZE1lbWJlcj4KLSAgICAgIDxGaXJzdE5hbWU+PC9GaXJzdE5hbWU+Ci0gICAgICA8TGFzdE5hbWU+PC9MYXN0TmFtZT4KLSAgICAgIDxNZW1iZXJzaGlwRXhwaXJ5PjwvTWVtYmVyc2hpcEV4cGlyeT4KLSAgICAgIDxMaW1pdGVkUGxheT48L0xpbWl0ZWRQbGF5PgotICAgIDwvUmVzdHJpY3RlZE1lbWJlcj4KLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgPFNoYWZ0PjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0zMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0zMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YzJhZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMzEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2UgTnVtYmVyT2ZIb2xlcz0iMTgiPgotICAgIDxOYW1lPk5hbWU8L05hbWU+Ci0gICAgPFlhcmRhZ2U+MTwvWWFyZGFnZT4KLSAgICA8UGFyPjE8L1Bhcj4KLSAgICA8SGFuZGljYXA+MC4wPC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+U2xvcGU8L1Nsb3BlPgotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIgaGFuZGljYXA9IjAiPgotICAgIDxSZXN0cmljdGVkTWVtYmVyPgotICAgICAgPEZpcnN0TmFtZT5GaXJzdE5hbWU8L0ZpcnN0TmFtZT4KLSAgICAgIDxNaWRkbGVOYW1lPk1pZGRsZU5hbWU8L01pZGRsZU5hbWU+Ci0gICAgICA8TGFzdE5hbWU+TGFzdE5hbWU8L0xhc3ROYW1lPgotICAgICAgPE1lbWJlcnNoaXBFeHBpcnk+MjAwMS0wMS0wMTwvTWVtYmVyc2hpcEV4cGlyeT4KLSAgICAgIDxMaW1pdGVkUGxheT5XZWVrZGF5IE9ubHk8L0xpbWl0ZWRQbGF5PgotICAgIDwvUmVzdHJpY3RlZE1lbWJlcj4KLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPkZpcnN0TmFtZTwvRmlyc3ROYW1lPgotICAgIDxNaWRkbGVOYW1lPk1pZGRsZU5hbWU8L01pZGRsZU5hbWU+Ci0gICAgPExhc3ROYW1lPkxhc3ROYW1lPC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+RW1wbG95ZWVOdW1iZXI8L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPkRyaXZlcjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD5Mb2Z0PC9Mb2Z0PgotICAgICAgPFNoYWZ0PlJlZ3VsYXI8L1NoYWZ0PgotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHM+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPlByb2R1Y3REZXRhaWxzPC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTgueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItOC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNWRkZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItOC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT5OYW1lPC9OYW1lPgotICAgIDxZYXJkYWdlPjE8L1lhcmRhZ2U+Ci0gICAgPFBhcj4xPC9QYXI+Ci0gICAgPEhhbmRpY2FwPjAuMDwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPlNsb3BlPC9TbG9wZT4KLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyLz4KLSAgPEVtcGxveWVlPgotICAgIDxGaXJzdE5hbWU+Rmlyc3ROYW1lPC9GaXJzdE5hbWU+Ci0gICAgPExhc3ROYW1lPkxhc3ROYW1lPC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+RW1wbG95ZWVOdW1iZXI8L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPkRyaXZlcjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD5Mb2Z0PC9Mb2Z0PgotICAgICAgPFNoYWZ0PlJlZ3VsYXI8L1NoYWZ0PgotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHM+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPlByb2R1Y3REZXRhaWxzPC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTItQmlsbEluZm8tMzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMi1CaWxsSW5mby0zMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYTI4NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMi1CaWxsSW5mby0zMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkJpbGxJbmZvIGFjY291bnRUeXBlPSIiIGFtbW91bnQ9IjAuMCIgZGF0ZT0iMjAwMS0wMS0wMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1Bob25lQmFua2luZyIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1Bob25lQmFua2luZyBTY2hlbWEyLnhzZCAiPgotICA8dG5zOnBheWVlIGFjY291bnRDb2RlPSIiIG5hbWU9IiIvPgotPC90bnM6QmlsbEluZm8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzMGJkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtdWx0aS1yb290IHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJpbnRlcm5hdGlvbmFsLnhzZCIgeG1sbnM9IiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0JPHJvb3Q+VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZzwvcm9vdD4KLQk867+M66as7ISx67aEPuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukPC/rv4zrpqzshLHrtoQ+Ci0JPOagueWFg+e0oD7ov5nlj6rlv6vmo5XoibLni5Dni7jot7Pov4fmh5Lmg7Dni5c8L+agueWFg+e0oD4KLQk8cm9vdD7ov5nlj6rlv6vmo5XoibLni5Dni7jot7Pov4fmh5Lmg7Dni5c8L3Jvb3Q+Ci0JPOu/jOumrOyEseu2hD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC/rv4zrpqzshLHrtoQ+Ci0JPOu/jOumrOyEseu2hD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC/rv4zrpqzshLHrtoQ+Ci0JPOagueWFg+e0oD7ruaDrpbgg6rCI7IOJIOyXrOyasOuKlCDqsozsnLzrpbgg6rCc7JeQIOqwle2VmO2VnOuLpDwv5qC55YWD57SgPgotPC9tdWx0aS1yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZDEzY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIj4KLQotCTwhLS08eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZCIvPi0tPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im11bHRpLXJvb3QiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0icm9vdCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0i67+M66as7ISx67aEIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSLmoLnlhYPntKAiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0icHJvc2UiIC8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0i67+M66as7ISx67aEIiB0eXBlPSJwcm9zZSIvPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IuagueWFg+e0oCIgdHlwZT0icHJvc2UiIC8+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0icHJvc2UiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDpwYXR0ZXJuIHZhbHVlPSJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nIi8+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9Iui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlyIvPgotCQkJPHhzZDpwYXR0ZXJuIHZhbHVlPSLruaDrpbgg6rCI7IOJIOyXrOyasOuKlCDqsozsnLzrpbgg6rCc7JeQIOqwle2VmO2VnOuLpCIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy9UZXN0MS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNDRkOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1JlbW92ZUFuZEFkZEJhY2tDb21tZW50RW5kVGFnL1Rlc3QxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmb28KLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJUZXN0MVNjaGVtYS54c2QiPgotCQotCTxiYXI+Ci0JCTwhLS0gVGVzdCAtLT4KLQk8L2Jhcj4KLTwvZm9vPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy9UZXN0MVNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvUmVtb3ZlQW5kQWRkQmFja0NvbW1lbnRFbmRUYWcvVGVzdDFTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmJlMzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9SZW1vdmVBbmRBZGRCYWNrQ29tbWVudEVuZFRhZy9UZXN0MVNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZm9vIiB0eXBlPSJ4c2RGb28iIC8+Ci0JCi0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InhzZEZvbyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iYmFyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvU2NoZW1hMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvU2NoZW1hMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlOTExMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1NjaGVtYTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiI+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iR29sZkNvdW50cnlDbHViIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgICA8c2VxdWVuY2U+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9IkdvbGZDb3Vyc2UiIHR5cGU9InRuczpHb2xmQ291cnNlVHlwZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+PC9lbGVtZW50PgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJNZW1iZXIiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPgotICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxjaG9pY2U+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlJlc3RyaWN0ZWRNZW1iZXIiIHR5cGU9InRuczpSZXN0cmljdGVkTWVtYmVyVHlwZSI+PC9lbGVtZW50PgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJSZWd1bGFyTWVtYmVyIiB0eXBlPSJ0bnM6UmVndWxhck1lbWJlclR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iRXhjbHVzaXZlTWVtYmVyIiB0eXBlPSJ0bnM6RXhjbHVzaXZlTWVtYmVyVHlwZSI+Ci0gICAgICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj5MaWZlLXRpbWUgbWVtYmVyPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgPC9jaG9pY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImhhbmRpY2FwIiB0eXBlPSJub25OZWdhdGl2ZUludGVnZXIiPjwvYXR0cmlidXRlPgotICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPGVsZW1lbnQgbmFtZT0iRW1wbG95ZWUiIHR5cGU9InRuczpFbXBsb3llZVR5cGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPjwvZWxlbWVudD4KLSAgICAgICAgPGVsZW1lbnQgbmFtZT0iUHJvU2hvcCI+Ci0gICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJHb2xmQ2x1YiIgdHlwZT0idG5zOkdvbGZDbHViVHlwZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+PC9lbGVtZW50PgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJCb3hPZkJhbGxzIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIiB0eXBlPSJ0bnM6Qm94T2ZCYWxsc1R5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgPC9lbGVtZW50PgotICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotICA8L2VsZW1lbnQ+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlJlZ3VsYXJNZW1iZXJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpQZXJzb25UeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9Ik1lbWJlcnNoaXBFeHBpcnkiIHR5cGU9ImRhdGUiPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkdvbGZDbHViVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotCi0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpHb2xmTWFudWZhY3R1cmVyVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJDbHViS2luZCIgdHlwZT0idG5zOkNsdWJLaW5kVHlwZSI+PC9lbGVtZW50PgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkxvZnQiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlNoYWZ0IiB0eXBlPSJ0bnM6U2hhZnRUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxzaW1wbGVUeXBlIG5hbWU9IkNsdWJLaW5kVHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlciI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iV29vZCI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iSXJvbiI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iV2VkZ2UiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlB1dHRlciI+PC9lbnVtZXJhdGlvbj4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci0KLSAgPHNpbXBsZVR5cGUgbmFtZT0iU2hhZnRUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhciI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iU3RpZmYiPjwvZW51bWVyYXRpb24+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IkdvbGZDbHViIiB0eXBlPSJ0bnM6R29sZkNsdWJUeXBlIj48L2VsZW1lbnQ+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlBlcnNvblR5cGUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9IkZpcnN0TmFtZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJNaWRkbGVOYW1lIiB0eXBlPSJzdHJpbmciIG1heE9jY3Vycz0iMSIgbWluT2NjdXJzPSIwIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJMYXN0TmFtZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iRW1wbG95ZWVUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpQZXJzb25UeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkVtcGxveWVlTnVtYmVyIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkdvbGZDb3Vyc2VUeXBlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj5OYW1lIG9mIHRoZSBjb3Vyc2U8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IllhcmRhZ2UiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iUGFyIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IkhhbmRpY2FwIj4KLSAgICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9ImZsb2F0Ij4KLSAgICAgICAgICAgIDxtaW5JbmNsdXNpdmUgdmFsdWU9IjAiPjwvbWluSW5jbHVzaXZlPgotICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgIDwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlNsb3BlIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iTnVtYmVyT2ZIb2xlcyIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIiBmaXhlZD0iMTgiPjwvYXR0cmlidXRlPgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJHb2xmTWFudWZhY3R1cmVyVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJRdWFudGl0eSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iQm94T2ZCYWxsc1R5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOkdvbGZNYW51ZmFjdHVyZXJUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlByb2R1Y3REZXRhaWxzIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkV4Y2x1c2l2ZU1lbWJlclR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iVmFsZXRQYXJraW5nSUQiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkxvY2tlck51bWJlciIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJSZXN0cmljdGVkTWVtYmVyVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJNZW1iZXJzaGlwRXhwaXJ5IiB0eXBlPSJkYXRlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTGltaXRlZFBsYXkiIHR5cGU9InRuczpMaW1pdGVkUGxheVR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPHNpbXBsZVR5cGUgbmFtZT0iTGltaXRlZFBsYXlUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iV2Vla2RheSBPbmx5Ij48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXZWVrZW5kIE9ubHkiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkFueXRpbWUgYWZ0ZXIgdHdpbGlnaHQiPjwvZW51bWVyYXRpb24+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvU2NoZW1hMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvU2NoZW1hMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNTgzOTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1NjaGVtYTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUGhvbmVCYW5raW5nIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUGhvbmVCYW5raW5nIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJBY2NvdW50SW5mbyIgdHlwZT0idG5zOkFjY291bnRUeXBlIj48L2VsZW1lbnQ+Ci0gICAgCi0gICAgPGVsZW1lbnQgbmFtZT0iUGF5ZWUiIHR5cGU9InRuczpQYXllZSI+PC9lbGVtZW50PgotICAgIAotICAgIDxlbGVtZW50IG5hbWU9IlBheWVlTGlzdCIgdHlwZT0idG5zOlBheWVlTGlzdCI+PC9lbGVtZW50PgotICAgIAotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQYXllZUxpc3QiPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJwYXllZSIgdHlwZT0idG5zOlBheWVlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj48L2VsZW1lbnQ+Ci0gICAgCTwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQYXllZSI+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJhY2NvdW50Q29kZSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iQWNjb3VudFN1bW1hcnkiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCi0gICAgPGVsZW1lbnQgbmFtZT0iQ29tcGxldGlvbkNvZGUiIHR5cGU9InRuczpDb21wbGV0aW9uQ29kZSI+PC9lbGVtZW50PgotICAgIAotICAgIDxlbGVtZW50IG5hbWU9IlZlcmlmaWNhdGlvbkNvZGUiIHR5cGU9InRuczpWZXJpZmljYXRpb25Db2RlIj48L2VsZW1lbnQ+Ci0gICAgCi0gICAgPGVsZW1lbnQgbmFtZT0iQmlsbEluZm8iIHR5cGU9InRuczpCaWxsSW5mbyI+PC9lbGVtZW50PgotICAgIAotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJBY2NvdW50VHlwZSI+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJhY2NvdW50SWQiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJWZXJpZmljYXRpb25Db2RlIj4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJjb21wbGV0ZWQiIHR5cGU9ImJvb2xlYW4iPjwvYXR0cmlidXRlPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb21wbGV0aW9uQ29kZSI+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iY29tcGxldGVkIiB0eXBlPSJib29sZWFuIj48L2F0dHJpYnV0ZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJpbGxJbmZvIj4KLSAgICAJPHNlcXVlbmNlPgotICAgIAkJPGVsZW1lbnQgbmFtZT0icGF5ZWUiIHR5cGU9InRuczpQYXllZSI+PC9lbGVtZW50PgotICAgIAk8L3NlcXVlbmNlPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImFtbW91bnQiIHR5cGU9ImRvdWJsZSI+PC9hdHRyaWJ1dGU+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iYWNjb3VudFR5cGUiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iZGF0ZSIgdHlwZT0iZGF0ZSI+PC9hdHRyaWJ1dGU+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RWYWxpZGF0ZUFnYWluc3REVEQvc2ltcGxlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9UZXN0VmFsaWRhdGVBZ2FpbnN0RFREL3NpbXBsZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmI5MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RWYWxpZGF0ZUFnYWluc3REVEQvc2ltcGxlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPCFFTEVNRU5UIG1haW4gKG5vdG1haW4pKz4KLTwhRUxFTUVOVCBub3RtYWluICgjUENEQVRBKT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdFZhbGlkYXRlQWdhaW5zdERURC9zaW1wbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1Rlc3RWYWxpZGF0ZUFnYWluc3REVEQvc2ltcGxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlZTQ5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvVGVzdFZhbGlkYXRlQWdhaW5zdERURC9zaW1wbGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIG1haW4gU1lTVEVNICJzaW1wbGUuZHRkIiA+Ci08bWFpbiAvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L1NjaGVtYTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvU2NoZW1hMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlOTExMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvU2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIj4KLQotICA8ZWxlbWVudCBuYW1lPSJHb2xmQ291bnRyeUNsdWIiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgPGVsZW1lbnQgbmFtZT0iR29sZkNvdXJzZSIgdHlwZT0idG5zOkdvbGZDb3Vyc2VUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9Ik1lbWJlciIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+Ci0gICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPGNob2ljZT4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVzdHJpY3RlZE1lbWJlciIgdHlwZT0idG5zOlJlc3RyaWN0ZWRNZW1iZXJUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlJlZ3VsYXJNZW1iZXIiIHR5cGU9InRuczpSZWd1bGFyTWVtYmVyVHlwZSI+PC9lbGVtZW50PgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJFeGNsdXNpdmVNZW1iZXIiIHR5cGU9InRuczpFeGNsdXNpdmVNZW1iZXJUeXBlIj4KLSAgICAgICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPkxpZmUtdGltZSBtZW1iZXI8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaGFuZGljYXAiIHR5cGU9Im5vbk5lZ2F0aXZlSW50ZWdlciI+PC9hdHRyaWJ1dGU+Ci0gICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJFbXBsb3llZSIgdHlwZT0idG5zOkVtcGxveWVlVHlwZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+PC9lbGVtZW50PgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJQcm9TaG9wIj4KLSAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkdvbGZDbHViIiB0eXBlPSJ0bnM6R29sZkNsdWJUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkJveE9mQmFsbHMiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiIHR5cGU9InRuczpCb3hPZkJhbGxzVHlwZSI+PC9lbGVtZW50PgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0gIDwvZWxlbWVudD4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iUmVndWxhck1lbWJlclR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTWVtYmVyc2hpcEV4cGlyeSIgdHlwZT0iZGF0ZSI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iR29sZkNsdWJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOkdvbGZNYW51ZmFjdHVyZXJUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkNsdWJLaW5kIiB0eXBlPSJ0bnM6Q2x1YktpbmRUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTG9mdCIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iU2hhZnQiIHR5cGU9InRuczpTaGFmdFR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPHNpbXBsZVR5cGUgbmFtZT0iQ2x1YktpbmRUeXBlIj4KLSAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXb29kIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJJcm9uIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXZWRnZSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUHV0dGVyIj48L2VudW1lcmF0aW9uPgotICAgIDwvcmVzdHJpY3Rpb24+Ci0gIDwvc2ltcGxlVHlwZT4KLQotICA8c2ltcGxlVHlwZSBuYW1lPSJTaGFmdFR5cGUiPgotICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGFyIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJTdGlmZiI+PC9lbnVtZXJhdGlvbj4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iR29sZkNsdWIiIHR5cGU9InRuczpHb2xmQ2x1YlR5cGUiPjwvZWxlbWVudD4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iUGVyc29uVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iRmlyc3ROYW1lIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ik1pZGRsZU5hbWUiIHR5cGU9InN0cmluZyIgbWF4T2NjdXJzPSIxIiBtaW5PY2N1cnM9IjAiPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ikxhc3ROYW1lIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICA8L3NlcXVlbmNlPgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJFbXBsb3llZVR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iRW1wbG95ZWVOdW1iZXIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iR29sZkNvdXJzZVR5cGUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgIDxkb2N1bWVudGF0aW9uPk5hbWUgb2YgdGhlIGNvdXJzZTwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iWWFyZGFnZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJQYXIiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iSGFuZGljYXAiPgotICAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0iZmxvYXQiPgotICAgICAgICAgICAgPG1pbkluY2x1c2l2ZSB2YWx1ZT0iMCI+PC9taW5JbmNsdXNpdmU+Ci0gICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iU2xvcGUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIDwvc2VxdWVuY2U+Ci0gICAgPGF0dHJpYnV0ZSBuYW1lPSJOdW1iZXJPZkhvbGVzIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiIGZpeGVkPSIxOCI+PC9hdHRyaWJ1dGU+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkdvbGZNYW51ZmFjdHVyZXJUeXBlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICA8L3NlcXVlbmNlPgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJCb3hPZkJhbGxzVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6R29sZk1hbnVmYWN0dXJlclR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUHJvZHVjdERldGFpbHMiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iRXhjbHVzaXZlTWVtYmVyVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJWYWxldFBhcmtpbmdJRCIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTG9ja2VyTnVtYmVyIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlJlc3RyaWN0ZWRNZW1iZXJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpQZXJzb25UeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9Ik1lbWJlcnNoaXBFeHBpcnkiIHR5cGU9ImRhdGUiPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJMaW1pdGVkUGxheSIgdHlwZT0idG5zOkxpbWl0ZWRQbGF5VHlwZSI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8c2ltcGxlVHlwZSBuYW1lPSJMaW1pdGVkUGxheVR5cGUiPgotICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJXZWVrZGF5IE9ubHkiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IldlZWtlbmQgT25seSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iQW55dGltZSBhZnRlciB0d2lsaWdodCI+PC9lbnVtZXJhdGlvbj4KLSAgICA8L3Jlc3RyaWN0aW9uPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2ZjU4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvY29udGVudGFzc2lzdC90ZXN0MS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT48L05hbWU+Ci0gICAgPFlhcmRhZ2U+PC9ZYXJkYWdlPgotICAgIDxQYXI+PC9QYXI+Ci0gICAgPEhhbmRpY2FwPjwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPjwvU2xvcGU+Ci0gICAgCi0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlciA+Ci0gIAkgICAJCi0gIDwvTWVtYmVyPgotICA8RW1wbG95ZWUgPgotICAgIDxGaXJzdE5hbWU+PC9GaXJzdE5hbWU+Ci0gICAgPExhc3ROYW1lPjwvTGFzdE5hbWU+Ci0gICAgPEVtcGxveWVlTnVtYmVyPjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD48L0xvZnQ+Ci0gICAgICAKLSAgICA8L0dvbGZDbHViPgotICAgIDxCb3hPZkJhbGxzID4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2NvbnRlbnRhc3Npc3QvdGVzdDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTZiZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9jb250ZW50YXNzaXN0L3Rlc3QyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2U+PC9Hb2wKLSAgCi08L3RuczpHb2xmQ291bnRyeUNsdWI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ0NvbW1lbnRUZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hNTEZvbGRpbmdDb21tZW50VGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YzVhYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ0NvbW1lbnRUZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8Zm9vMT48L2ZvbzE+Ci0JCi0JPCEtLSBNeSBBd2Vzb21lIGNvbW1lbnQhISEhIC0tPgotCQotCTxmb28yPgotCQk8YmFyMT48L2JhcjE+Ci0JCTxiYXIyIG9uZT0iMSIKLQkJdHdvPSIyIgotCQl0aHJlZT0iMyI+Ci0JCQotCQk8L2JhcjI+Ci0JCQotCQk8YmFyMz4KLQkJCi0JCTwhLS0gCi0JCQotCQkKLQkJCU15IEF3ZXNvbWUgY29tbWVudCEhISEKLQkJCQotCQkJCi0JCQkKLQkJIC0tPgotCQkKLQkJPC9iYXIzPgotCQotCTwvZm9vMj4KLQkKLQk8IS0tIAotCQlNeSBBd2Vzb21lIGNvbW1lbnQhISEhCi0JIC0tPgotCi08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ1Rlc3QxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hNTEZvbGRpbmdUZXN0MS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OGEzMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWE1MRm9sZGluZ1Rlc3QxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHJvb3Q+DQotCTxmb28xPjwvZm9vMT4NCi0JPGZvbzI+DQotCQk8YmFyMT48L2JhcjE+DQotCQk8YmFyMiBvbmU9IjEiDQotCQl0d289IjIiDQotCQl0aHJlZT0iMyI+DQotCQkNCi0JCTwvYmFyMj4NCi0JCQ0KLQkJPGJhcjM+DQotCQk8L2JhcjM+DQotCQ0KLQk8L2ZvbzI+DQotCQ0KLQk8IS0tIA0KLQkJTXkgQXdlc29tZSBjb21tZW50ISEhIQ0KLQkgLS0+DQotDQotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hNTEZvbGRpbmdUZXN0Mi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YTUxGb2xkaW5nVGVzdDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNThhMzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9mb2xkaW5nL1hNTEZvbGRpbmdUZXN0Mi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxyb290Pg0KLQk8Zm9vMT48L2ZvbzE+DQotCTxmb28yPg0KLQkJPGJhcjE+PC9iYXIxPg0KLQkJPGJhcjIgb25lPSIxIg0KLQkJdHdvPSIyIg0KLQkJdGhyZWU9IjMiPg0KLQkJDQotCQk8L2JhcjI+DQotCQkNCi0JCTxiYXIzPg0KLQkJPC9iYXIzPg0KLQkNCi0JPC9mb28yPg0KLQkNCi0JPCEtLSANCi0JCU15IEF3ZXNvbWUgY29tbWVudCEhISENCi0JIC0tPg0KLQ0KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YU0xGb2xkaW5nVGVzdDEueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL2ZvbGRpbmcvWFNMRm9sZGluZ1Rlc3QxLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJkNGJkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvZm9sZGluZy9YU0xGb2xkaW5nVGVzdDEueHNsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotCQk8IS0tIAotCQkJVE9ETzogQXV0by1nZW5lcmF0ZWQgdGVtcGxhdGUKLQkJLS0+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9zcGVsbGNoZWNrL3NwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9zcGVsbGNoZWNrL3NwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5NjM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc3BlbGxjaGVjay9zcGVsbGNoZWNrX2NvbW1lbnRfZWxlbWVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8IS0tJGZvbyBiYXIgYmF6ICAtLT4KLQotCTwhLS0gU3BlbGwgY2hlY2sgbWU6IGZvbyBiYXogLS0+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3htbENvbnRlbnRBc3Npc3QtdGVzdDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3htbENvbnRlbnRBc3Npc3QtdGVzdDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODk1Y2ZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy94bWxDb250ZW50QXNzaXN0LXRlc3QxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkdvbGZDb3VudHJ5Q2x1YiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIFNjaGVtYTEueHNkICI+Ci0gIDxHb2xmQ291cnNlPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgICAKLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyID4KLSAgCSAgIAkKLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZSA+Ci0gICAgPEZpcnN0TmFtZT48L0ZpcnN0TmFtZT4KLSAgICA8TGFzdE5hbWU+PC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+PC9FbXBsb3llZU51bWJlcj4KLSAgPC9FbXBsb3llZT4KLSAgPFByb1Nob3A+Ci0gICAgPEdvbGZDbHViPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8Q2x1YktpbmQ+PC9DbHViS2luZD4KLSAgICAgIDxMb2Z0PjwvTG9mdD4KLSAgICAgIAotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHMgPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzYwMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTk0YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotdmFsaWRhdGV4bWx0ZXN0cy5qYXIKLWphdmFDb21waWxlci52YWxpZGF0ZXhtbHRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjU2MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y5OTQxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjYwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHZhbGlkYXRleG1sdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPTMuOC4yLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGIwYjE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgdmFsaWRhdGV4bWx0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNvdXJjZS52YWxpZGF0ZXhtbHRlc3RzLmphciA9IHNyYy8KLWJpbi5leGNsdWRlcyA9IHRlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDk1ODYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gWE1MIFZhbGlkYXRvciBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmM2UwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCB0aGUgWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotCQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JY29uZmlndXJhdGlvbiA9IG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQljb25maWd1cmF0aW9uID0gbnVsbDsKLQlzdXBlci50ZWFyRG93bigpOwotICB9Ci0KLQotICAvKioKLSAgICogVGVzdCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRXYXJuTm9HcmFtbWFyRmVhdHVyZURlZmF1bHQoKQotICB7Ci0JdHJ5Ci0JewotCQlhc3NlcnRGYWxzZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCB0byBmYWxzZS4iLCBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgcmVhZCB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmU6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIHRvIHRydWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2V0V2Fybk5vR3JhbW1hckZlYXR1cmVUcnVlKCkKLSAgewotCXRyeQotCXsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIsIHRydWUpOwotCSAgYXNzZXJ0VHJ1ZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gdHJ1ZS4iLCBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgV0FSTl9OT19HUkFNTUFSIHRvIHRydWU6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIHRvIGZhbHNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldFdhcm5Ob0dyYW1tYXJGZWF0dXJlRmFsc2UoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCSAgYXNzZXJ0RmFsc2UoIlRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBXQVJOX05PX0dSQU1NQVIgdG8gZmFsc2U6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIsIGZhbHNlKTsKLQkgIGZhaWwoIlNldHRpbmcgYSBub24gZXhpc3RhbnQgZmVhdHVyZSBkaWQgbm90IHByb2R1Y2UgYW4gZXhjZXB0aW9uLiIpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICAvLyBUaGUgdGVzdCBzdWNjZWVkcyBpZiB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC4KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGdldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIpOwotCSAgZmFpbCgiR2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5kaWNhdGVOb0dyYW1tYXJGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEVxdWFscygiVGhlIElORElDQVRFX05PX0dSQU1NQVIgZmVhdHVyZSBpcyBub3Qgc2V0IGJ5IGRlZmF1bHQgdG8gSWdub3JlLiIsIDEsIGNvbmZpZ3VyYXRpb24uZ2V0SW50RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgcmVhZCB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmU6ICIgKyBlKTsKLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjU5NzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbjsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yV3JhcHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBhZGRJbmZvVG9NZXNzYWdlIG1ldGhvZC4gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgcGVyZm9ybWVkOjxici8+Ci0gICAqIDEuIFdoZW4gdGhlIHZhbGlkYXRpb24gbWVzc2FnZSBjb250YWlucyBhIG51bGwga2V5IG5vdGhpbmcgaXMgYWRkZWQgdG8gdGhlIG1lc3NhZ2UuPGJyLz4KLSAgICogMi4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFTlRJUkVfRUxFTUVOVCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIGFkZGVkCi0gICAqIHRvIHRoZSBtZXRob2QgYW5kIHRoZSBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSBpcyBudWxsLjxici8+Ci0gICAqIDMuIFdoZW4gdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIGtleSAiRW50aXR5Tm90RGVjbGFyZWQiIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIGFyZSBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWRkSW5mb1RvTWVzc2FnZSgpCi0gIHsKLSAgICAvLyBUaGVzZSBzdHJpbmdzIGFyZSBjb21tb24gYWRkaXRpb24gaW5mb3JtYXRpb24gdHlwZXMuCi0JU3RyaW5nIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gImNvbHVtbk51bWJlciI7IC8vJE5PTi1OTFMtMSQKLQlTdHJpbmcgU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICJzcXVpZ2dsZVNlbGVjdGlvblN0cmF0ZWd5IjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICJzcXVpZ2dsZU5hbWVPclZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCQotCS8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIHRoZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQKLQkvLyB3aXRoIGEgbnVsbCBrZXkuCi0JVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiKTsKLQlNZXNzYWdlIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLQlhc3NlcnROdWxsKCJDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0TnVsbCgiU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0TnVsbCgiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggYSBudWxsIGtleS4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotCQotCS8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgdGhyZWUgYXR0cmlidXRlcyB3aGVuIHRoZSBrZXkgaXMgc2V0IHRvICJFbGVtZW50VW50ZXJtaW5hdGVkIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTIgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiRWxlbWVudFVudGVybWluYXRlZCIsIG51bGwpOwotCU1lc3NhZ2UgbWVzc2FnZTIgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMiwgbWVzc2FnZTIpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRU5USVJFX0VMRU1FTlQuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBFTlRJUkVfRUxFTUVOVC4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJFTlRJUkVfRUxFTUVOVCIsIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0TnVsbCgiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBFTlRJUkVfRUxFTUVOVC4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0gICAgLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gIkVudGl0eU5vdERlY2xhcmVkIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTMgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiRW50aXR5Tm90RGVjbGFyZWQiLCBuZXcgT2JqZWN0W117Ik15TmFtZSJ9KTsKLQlNZXNzYWdlIG1lc3NhZ2UzID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTMsIG1lc3NhZ2UzKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVudGl0eU5vdERlY2xhcmVkLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVEVYVF9FTlRJVFlfUkVGRVJFTkNFLiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIlRFWFRfRU5USVRZX1JFRkVSRU5DRSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IHNldCB0byBNeU5hbWUgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVudGl0eU5vdERlY2xhcmVkLiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCAiTXlOYW1lIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSB2YWxpZGF0ZSBtZXRob2QuIFRlc3RzIHRvIGJlIHBlcmZvcm1lZDo8YnIvPgotICAgKiAxLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0Ljxici8+Ci0gICAqIDIuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUoKQotICB7Ci0JdHJ5Ci0JewotCSAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpLnRvU3RyaW5nKCkgKyAiLyI7Ci0JICBTdHJpbmcgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sIjsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG51bGwpOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQyID0gbnVsbDsKLQkgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgbnVsbCk7Ci0JICB9Ci0JICBjYXRjaChFeGNlcHRpb24gZSkKLQkgIHsKLQkJZmFpbCgiQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIHdpdGggYW4gaW5wdXRzdHJlYW06ICIgKyBlKTsKLQkgIH0KLQkgIGZpbmFsbHkKLQkgIHsKLQkJaWYoaXMgIT0gbnVsbCkKLQkJewotCQkgIHRyeQotCQkgIHsKLQkJICAgIGlzLmNsb3NlKCk7Ci0JCSAgfQotCQkgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0JCSAgewotCQkJLy8gRG8gbm90aGluZy4KLQkJICB9Ci0JCX0KLQkgIH0KLQkgIGFzc2VydFRydWUoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGEgdmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQkgIAotICAgICAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbCI7Ci0JICByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbnVsbCk7Ci0JICByZXBvcnQyID0gbnVsbDsKLQkgIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgbnVsbCk7Ci0JICB9Ci0JICBjYXRjaChFeGNlcHRpb24gZSkKLQkgIHsKLQkJZmFpbCgiQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIHdpdGggYW4gaW5wdXRzdHJlYW06ICIgKyBlKTsKLQkgIH0KLQkgIGZpbmFsbHkKLQkgIHsKLQkJaWYoaXMgIT0gbnVsbCkKLQkJewotCQkgIHRyeQotCQkgIHsKLQkJICAgIGlzLmNsb3NlKCk7Ci0JCSAgfQotCQkgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0JCSAgewotCQkJLy8gRG8gbm90aGluZy4KLQkJICB9Ci0JCX0KLQkgIH0KLQkgIGFzc2VydEZhbHNlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhbiBpbnZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgcGx1Zy1pbiBsb2NhdGlvbjogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgaXMgcmVhZCBmcm9tIHRoZSBYTUwgY29yZSBwcmVmZXJlbmNlcy4KLSAgICogVGhlcmUgYXJlIHRocmVlIHRlc3RzIHRvIHBlcmZvcm0uCi0gICAqIDEuIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIGlzIGVuYWJsZWQuCi0gICAqIDIuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGRpc2FibGVkIHdvcmtzLgotICAgKiAzLiBUZXN0IHRoYXQgc2V0dGluZyB0aGUgcHJlZmVyZW5jZSB0byBlbmFibGVkIHdvcmtzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkKLSAgewotCS8vIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLgotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0Tm90U2FtZSgiVGhlIGRlZmF1bHQgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgaXMgbm90IGVuYWJsZWQuIiwgbmV3IEludGVnZXIoMCksIG5ldyBJbnRlZ2VyKHZhbGlkYXRvci5nZXRJbmRpY2F0ZU5vR3JhbW1hclByZWZlcmVuY2UoKSkpOwotCQotCS8vIFRlc3QgdGhhdCB0aGUgcHJlZmVyZW5jZSBpcyByZWFkIHdoZW4gZGlzYWJsZWQuCi0JWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLklORElDQVRFX05PX0dSQU1NQVIsIDApOwotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgaXMgbm90IGlnbm9yZSB3aGVuIHRoZSBwcmVmZXJlbmNlIGlzIHNldCB0byBpZ25vcmUuIiwgMCwgdmFsaWRhdG9yLmdldEluZGljYXRlTm9HcmFtbWFyUHJlZmVyZW5jZSgpKTsKLQotCS8vIFRlc3QgdGhhdCB0aGUgcHJlZmVyZW5jZSBpcyByZWFkIHdoZW4gZW5hYmxlZC4KLQlYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ESUNBVEVfTk9fR1JBTU1BUiwgMik7Ci0JdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyBub3QgZXJyb3Igd2hlbiB0aGUgcHJlZmVyZW5jZSBpcyBzZXQgdG8gZXJyb3IuIiwgMiwgdmFsaWRhdG9yLmdldEluZGljYXRlTm9HcmFtbWFyUHJlZmVyZW5jZSgpKTsKLQkKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ3NmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGV4dGVuZHMgdmFsaWRhdG9yIHRvIGV4cG9zZSB0aGUgcHJvdGVjdGVkIG1ldGhvZHMKLSAqIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFZhbGlkYXRvciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI2FkZEluZm9Ub01lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZSwgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEluZm9Ub01lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UsIElNZXNzYWdlIG1lc3NhZ2UpIAotICB7Ci0Jc3VwZXIuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciNzZXR1cFZhbGlkYXRpb24ob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0dXBWYWxpZGF0aW9uKE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkgCi0gIHsKLQlzdXBlci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0gIH0KLQotLyoqCi0gICAqIEV4cG9ydCB0aGUgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgZm9yIHRlc3RpbmcuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0SW5kaWNhdGVOb0dyYW1tYXJQcmVmZXJlbmNlKCkKLSAgewotCXJldHVybiBpbmRpY2F0ZU5vR3JhbW1hcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGJmM2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgY2FzZSB0byB0ZXN0IHRoZSBYTUxNZXNzYWdlSW5mb0hlbHBlciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIFhNTE1lc3NhZ2VJbmZvSGVscGVyIGhlbHBlciA9IG5ldyBYTUxNZXNzYWdlSW5mb0hlbHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCBudWxsfSB3aGVuCi0gICAqIGdpdmVuIGEgbm9uLWV4aXN0YW50IGtleSBhbmQgbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3RFeGlzdGFudEtleUFuZE51bGxNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotCVN0cmluZ1tdIG1lc3NhZ2VJbmZvID0gaGVscGVyLmNyZWF0ZU1lc3NhZ2VJbmZvKCJOT05fRVhJU1RBTlRfS0VZIiwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0TnVsbCgiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgbnVsbC4iLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgbnVsbH0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TnVsbEtleUFuZE1lc3NhZ2VBcmd1bWVudHMoKQotICB7Ci0JU3RyaW5nW10gbWVzc2FnZUluZm8gPSBoZWxwZXIuY3JlYXRlTWVzc2FnZUluZm8obnVsbCwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0TnVsbCgiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgbnVsbC4iLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMDU1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgdGhlIEVjbGlwc2Ugc3BlY2lmaWMgWE1MIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRvIGVuc3VyZSB0aGUgVVJJIHJlc29sdmVyIGlzIG5vdCBudWxsIGluIHRoZSBFY2xpcHNlCi0gICAqIHNwZWNpZmljIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VVJJUmVzb2x2ZXJJc1JlZ2lzdGVyZWQoKQotICB7Ci0JWE1MVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgWE1MVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMWEwOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogV3JhcHBlciBmb3IgdGhlIEVjbGlwc2UgWE1MIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBYTUxWYWxpZGF0b3IgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBYTUxWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JcmV0dXJuIHVyaVJlc29sdmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI0NWQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIuRXJyb3JNZXNzYWdlSW5mb3JtYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFRlc3QgdGhlIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotCQotICAvKioKLSAgICogVGVzdCB0aGUgc3RhcnRFbGVtZW50IG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCB0aGUgcm9vdCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2suCi0gICAqIDIuIFRlc3QgdGhhdCBhIHN1YnNlcXVlbnQgZWxlbWVudCBpcyBwcm9wZXJseSBwdXNoZWQgdG8gdGhlIHN0YWNrIGFuZAotICAgKiAgICByZWdpc3RlcmVkIGFzIGEgY2hpbGQgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEVsZW1lbnQoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IHRoZSByb290IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjay4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0JU3RyaW5nIGxvY2FsbmFtZTEgPSAibG9jYWxuYW1lIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBpcyBub3QgZW1wdHkgdG8gc3RhcnQuIiwgMCwgbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JbWFuYWdlci5zdGFydEVsZW1lbnQobmFtZXNwYWNlMSwgbG9jYWxuYW1lMSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvID0gKEVsZW1lbnRJbmZvcm1hdGlvbiltYW5hZ2VyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucG9wKCk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBpcyBub3QgZW1wdHkgdG8gYWZ0ZXIgcG9wcGluZyB0aGUgdG9wIGVsZW1lbnQuIiwgMCwgbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvLmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mby5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGxvY2FsbmFtZSBpdCBpcyAiICsgZWxlbUluZm8uZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTEsIGVsZW1JbmZvLmdldExvY2FsbmFtZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBzdWJzZXF1ZW50IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjayBhbmQgcmVnaXN0ZXJlZCBhcyBhIGNoaWxkIGVsZW1lbnQuCi0JU3RyaW5nIGxvY2FsbmFtZTIgPSAibG9jYWxuYW1lMiI7Ci0gICAgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGlzIG5vdCBlbXB0eSB0byBzdGFydC4iLCAwLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JbWFuYWdlcjIuc3RhcnRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpOwotCW1hbmFnZXIyLnN0YXJ0RWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUyKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGRvZXMgbm90IGNvbnRhaW4gMiBlbGVtZW50cy4iLCAyLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvMiA9IChFbGVtZW50SW5mb3JtYXRpb24pbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wb3AoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGRvZXMgbm90IGNvbnRhaW4gMSBlbGVtZW50IGFmdGVyIHBvcHBpbmcgdGhlIHRvcCBlbGVtZW50LiIsIDEsIG1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGNoaWxkIGlzIG5vdCBodHRwOi8vbmFtZXNwYWNlMSBpdCBpcyAiICsgZWxlbUluZm8yLmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mbzIuZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGNoaWxkIGlzIG5vdCBsb2NhbG5hbWUyIGl0IGlzICIgKyBlbGVtSW5mbzIuZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTIsIGVsZW1JbmZvMi5nZXRMb2NhbG5hbWUoKSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvMyA9IChFbGVtZW50SW5mb3JtYXRpb24pbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wb3AoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGRvZXMgbm90IGNvbnRhaW4gMCBlbGVtZW50cyBhZnRlciBwb3BwaW5nIHRoZSB0b3AgZWxlbWVudC4iLCAwLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvMy5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm8zLmdldE5hbWVzcGFjZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBsb2NhbCBuYW1lIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgbG9jYWxuYW1lIGl0IGlzICIgKyBlbGVtSW5mbzMuZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTEsIGVsZW1JbmZvMy5nZXRMb2NhbG5hbWUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBkb2VzIG5vdCBjb250YWluIDEgY2hpbGQgZWxlbWVudCBpdCBjb250YWlucyAiICsgZWxlbUluZm8zLmdldENoaWxkcmVuKCkuc2l6ZSgpLCAxLCBlbGVtSW5mbzMuZ2V0Q2hpbGRyZW4oKS5zaXplKCkpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbzQgPSAoRWxlbWVudEluZm9ybWF0aW9uKWVsZW1JbmZvMy5nZXRDaGlsZHJlbigpLmdldCgwKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uJ3MgY2hpbGQgaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mbzQuZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZTEsIGVsZW1JbmZvNC5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24ncyBjaGlsZCBpcyBub3QgbG9jYWxuYW1lMiBpdCBpcyAiICsgZWxlbUluZm80LmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUyLCBlbGVtSW5mbzQuZ2V0TG9jYWxuYW1lKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgZW5kRWxlbWVudCBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBDaGVjayB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb24gdGhlIHN0YWNrIGlzIHN1Y2Nlc3NmdWxseSBwb3BwZWQuCi0gICAqIDIuIFRlc3QgdGhhdCBhbiBlbGVtZW50IGluIGEgc2FtcGxlIG5hbWVzcGFjZSBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgbWVzc2FnZS4KLSAgICogMy4gVGVzdCB0aGF0IGFuIGVsZW1lbnQgbm90IGluIGEgc2FtcGxlIG5hbWVzcGFjZSByZXRhaW5zIGl0cyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbmRFbGVtZW50KCkKLSAgewotCS8vIDEuIENoZWNrIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBvbiB0aGUgc3RhY2sgaXMgc3VjY2Vzc2Z1bGx5IHBvcHBlZC4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0gICAgU3RyaW5nIGxvY2FsbmFtZTEgPSAibG9jYWxuYW1lIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnB1c2gobmV3IEVsZW1lbnRJbmZvcm1hdGlvbihuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKSk7Ci0JbWFuYWdlci5lbmRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIHN0YWNrIHN0aWxsIGNvbnRhaW5zIGFuIGVsZW1lbnQuIiwgMCwgbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGFuIGVsZW1lbnQgaW4gYSBzYW1wbGUgbmFtZXNwYWNlIHByb2R1Y2VzIHRoZSBleHBlY3RlZCBtZXNzYWdlLgotCVN0cmluZyBuYW1lc3BhY2UyID0gIlhNTFZhbGlkYXRpb25UZXN0U2FtcGxlTmFtZXNwYWNlIjsKLQlFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobmFtZXNwYWNlMiwgbmV3IFNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKSk7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQltYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnB1c2gobmV3IEVsZW1lbnRJbmZvcm1hdGlvbihuYW1lc3BhY2UyLCBsb2NhbG5hbWUxKSk7Ci0JRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gZW1pID0gbWFuYWdlcjIubmV3IEVycm9yTWVzc2FnZUluZm9ybWF0aW9uKCk7Ci0JZW1pLm1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIlNhbXBsZU1lc3NhZ2UiLCAxLCAyLCBuYW1lc3BhY2UyKTsKLQltYW5hZ2VyMi5zZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbihlbWkpOwotCW1hbmFnZXIyLmVuZEVsZW1lbnQobmFtZXNwYWNlMiwgbG9jYWxuYW1lMSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbWVzc2FnZSB3YXMgbm90IGN1c3RvbWl6ZWQgdG8gQUFBQS4gVGhlIG1lc3NhZ2UgaXMgIiArIGVtaS5tZXNzYWdlLmdldE1lc3NhZ2UoKSwgIkFBQUEiLCBlbWkubWVzc2FnZS5nZXRNZXNzYWdlKCkpOwotCQotCS8vIDMuIFRlc3QgdGhhdCBhbiBlbGVtZW50IG5vdCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcmV0YWlucyBpdHMgdmFsdWUuCi0JU3RyaW5nIG5hbWVzcGFjZTMgPSAiWE1MVmFsaWRhdGlvblRlc3RTYW1wbGVOYW1lc3BhY2UzIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyMyA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCW1hbmFnZXIzLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucHVzaChuZXcgRWxlbWVudEluZm9ybWF0aW9uKG5hbWVzcGFjZTMsIGxvY2FsbmFtZTEpKTsKLQlFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBlbWkyID0gbWFuYWdlcjMubmV3IEVycm9yTWVzc2FnZUluZm9ybWF0aW9uKCk7Ci0JZW1pMi5tZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCJTYW1wbGVNZXNzYWdlIiwgMSwgMiwgbmFtZXNwYWNlMyk7Ci0JbWFuYWdlcjMuc2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oZW1pMik7Ci0JbWFuYWdlcjMuZW5kRWxlbWVudChuYW1lc3BhY2UzLCBsb2NhbG5hbWUxKTsKLQlhc3NlcnRFcXVhbHMoIjMuIFRoZSBtZXNzYWdlIGRpZCBub3QgcmV0YWluIGl0cyB2YWx1ZSBvZiBTYW1wbGVNZXNzYWdlLiBUaGUgbWVzc2FnZSBpcyAiICsgZW1pMi5tZXNzYWdlLmdldE1lc3NhZ2UoKSwgIlNhbXBsZU1lc3NhZ2UiLCBlbWkyLm1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGNvbnNpZGVyUmVwb3J0ZWRFcnJvciBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBub3Qgc2V0IGlmIHRoZXJlIGFyZSBubyBjdXJyZW50Ci0gICAqICAgIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqIDIuIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIHNldCBjb3JyZWN0bHkgaWYgdGhlcmUgaXMgYQotICAgKiAgICB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q29uc2lkZXJSZXBvcnRlZEVycm9yKCkKLSAgewotCS8vIDEuIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIG5vdCBzZXQgaWYgdGhlcmUgYXJlIG5vIGN1cnJlbnQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlciA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCVZhbGlkYXRpb25JbmZvIHZhbGluZm8gPSBuZXcgVmFsaWRhdGlvbkluZm8obmFtZXNwYWNlMSk7Ci0JbWFuYWdlci5jb25zaWRlclJlcG9ydGVkRXJyb3IodmFsaW5mbywgImtleSIsIG51bGwpOwotCWFzc2VydE51bGwoIjEuIFRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBub3QgbnVsbCB3aGVuIG5vIHZhbGlkYXRpb24gbWVzc2FnZXMgZXhpc3QuIiwgbWFuYWdlci5nZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbigpKTsKLQkKLQkvLyAyLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIGEgdmFsaWRhdGlvbiBtZXNzYWdlLgotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JVmFsaWRhdGlvbkluZm8gdmFsaW5mbzIgPSBuZXcgVmFsaWRhdGlvbkluZm8obmFtZXNwYWNlMSk7Ci0JdmFsaW5mbzIuYWRkRXJyb3IoIm1lc3NhZ2UiLCAxLCAxLCBuYW1lc3BhY2UxKTsKLQltYW5hZ2VyMi5jb25zaWRlclJlcG9ydGVkRXJyb3IodmFsaW5mbzIsICJrZXkiLCBudWxsKTsKLQlhc3NlcnROb3ROdWxsKCIyLiBUaGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbnVsbCB3aGVuIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGV4aXN0cy4iLCBtYW5hZ2VyMi5nZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbigpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBhbiBlcnJvciBjdXN0b21pemVyIGlzIG9ubHkgY2FsbGVkIGZvciB0aGUKLSAgICogY29ycmVjdCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50KCkKLSAgewotCSAgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgdGVzdEN1c3RvbWl6ZXIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKQotCSAgewotCQkgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3VtZW50cykKLQkJICB7Ci0JCQkgIGlmKGVsZW1lbnRJbmZvLmdldExvY2FsbmFtZSgpLmVxdWFscygiY2hpbGQxIikpCi0JCQkgIHsKLQkJCQkgIGZhaWwoIkFuIGVycm9yIHdhcyByZXBvcnRlZCBmb3IgdGhlIGNoaWxkMSBlbGVtZW50LiIpOwotCQkJICB9Ci0JCQkgIHJldHVybiBudWxsOwotCQkgIH0KLQkgIH07Ci0JICBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JICByZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NpbXBsZW5lc3RlZCIsIHRlc3RDdXN0b21pemVyKTsKLQkgIHRyeQotCSAgewotCQkgIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLQkJICBTdHJpbmcgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sIjsKLQkJICAKLQkJICBYTUxWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFhNTFZhbGlkYXRvcigpOwotCQkgIHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLQkJICB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKSk7Ci0JICB9Ci0JICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCSAgewotCQkgIGZhaWwoIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBydW5uaW5nIHRoZSB0ZXN0OiIgKyBlKTsKLQkgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MjAyYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi0vKioKLSAqIEEgd3JhcHBlciBmb3IgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlciB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBleHRlbmRzIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIgCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2suCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2suCi0gICAqLwotICBwdWJsaWMgU3RhY2sgZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKQotICB7Ci0JcmV0dXJuIGVsZW1lbnRJbmZvcm1hdGlvblN0YWNrOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBnZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbigpCi0gIHsKLQlyZXR1cm4gbWVzc2FnZUZvckNvbnNpZGVyYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIAkJVGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKEVycm9yTWVzc2FnZUluZm9ybWF0aW9uIG1lc3NhZ2UpCi0gIHsKLQltZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiA9IG1lc3NhZ2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMDM0MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbnVsbDsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0JcmVnaXN0cnkgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyKCk7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBBZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyVG9SZWdpc3RyeSBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgZm9yIGEgbmFtZXNwYWNlIGlzIHN1Y2Nlc3NmdWwuCi0gICAqIDIuIFRlc3QgdGhhdCBhZGRpbmcgdHdvIGVycm9yIGN1c3RvbWl6ZXJzIGZvciBhIG5hbWVzcGFjZSByZXR1cm5zIGJvdGggY3VzdG9taXplcnMuCi0gICAqIDMuIFRlc3QgdGhhdCBhZGRpbmcgYW4gZW50cnkgd2l0aCBhIG51bGwgbmFtZXNwYWNlIGFkZHMgdGhlIGVudHJ5IGZvciB0aGUgZW1wdHkgc3RyaW5nCi0gICAqICAgIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyVG9SZWdpc3RyeSgpCi0gIHsKLSAgICAvLyAxLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgZm9yIGEgbmFtZXNwYWNlIGlzIHN1Y2Nlc3NmdWwuCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyIGN1c3RvbWl6ZXIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKXsKLSAgICAgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSAKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBzdHViIGZvciB0ZXN0aW5nIGRvZXMgbm90IHJlcXVpcmUgYW4gaW1wbGVtZW50YXRpb24uCi0JCXJldHVybiBudWxsOwotICAgICAgfQotICAgIH07Ci0gICAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihuYW1lc3BhY2UxLCBjdXN0b21pemVyKTsKLSAgICBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcltdIHJlZ2lzdGVyZWRDdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKG5hbWVzcGFjZTEpOwotICAgIGFzc2VydEVxdWFscygiMS4gVGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBjdXN0b21pemVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UgYnV0IHRoZXJlIGFyZSAiICsgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCwgMSwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxLiBUaGUgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgcmV0dXJuZWQgaXMgbm90IHRoZSBzYW1lIG9uZSByZWdpc3RlcmVkLiIsIGN1c3RvbWl6ZXIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1swXSk7Ci0gICAgCi0gICAgLy8gMi4gVGVzdCB0aGF0IGFkZGluZyB0d28gZXJyb3IgY3VzdG9taXplcnMgZm9yIGEgbmFtZXNwYWNlIHJldHVybnMgYm90aCBjdXN0b21pemVycy4KLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBjdXN0b21pemVyMiA9IG5ldyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcigpewotICAgICAgcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBhcmd1bWVudHMpIAotICAgICAgewotICAgICAgICAvLyBUaGlzIHN0dWIgZm9yIHRlc3RpbmcgZG9lcyBub3QgcmVxdWlyZSBhbiBpbXBsZW1lbnRhdGlvbi4KLQkJcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfTsKLSAgICByZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG5hbWVzcGFjZTEsIGN1c3RvbWl6ZXIyKTsKLSAgICByZWdpc3RlcmVkQ3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycyhuYW1lc3BhY2UxKTsKLSAgICBhc3NlcnRFcXVhbHMoIjIuIFRoZXJlIHNob3VsZCBiZSAyIGN1c3RvbWl6ZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UgYnV0IHRoZXJlIGFyZSAiICsgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCwgMiwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZmlyc3QgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgcmV0dXJuZWQgaXMgbm90IHRoZSBzYW1lIG9uZSByZWdpc3RlcmVkLiIsIGN1c3RvbWl6ZXIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1swXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyLiBUaGUgc2Vjb25kIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyMiwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzWzFdKTsKLSAgICAKLSAgICAvLyAzLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVudHJ5IHdpdGggYSBudWxsIG5hbWVzcGFjZSBhZGRzIHRoZSBlbnRyeSBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UuCi0gICAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihudWxsLCBjdXN0b21pemVyKTsKLSAgICByZWdpc3RlcmVkQ3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycygiIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCIzLiBUaGVyZSBzaG91bGQgYmUgMSBjdXN0b21pemVycyByZWdpc3RlcmVkIGZvciB0aGUgbmFtZXNwYWNlIGJ1dCB0aGVyZSBhcmUgIiArIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgsIDEsIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiMy4gVGhlIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMF0pOwotICB9Ci0JCi0gIC8qKgotICAgKiBUZXN0IHRoZSBnZXRDdXN0b21pemVycyBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciBhIG5hbWVzcGFjZSB0aGF0IGhhcyBub3QgYmVlbgotICAgKiAgICByZWdpc3RlcmVkIHByb2R1Y2VzIGFuIGVtcHR5IGFycmF5LgotICAgKiAyLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgcmV0dXJucyB0aGUKLSAgICogICAgb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplci4KLSAgICogMy4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UgcmV0dXJucwotICAgKiAgICB0aGUgb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRDdXN0b21pemVycygpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGxpc3QgZm9yIGEgbmFtZXNwYWNlIHRoYXQgaGFzIG5vdCBiZWVuCi0JLy8gcmVnaXN0ZXJlZCBwcm9kdWNlcyBhbiBlbXB0eSBsaXN0LgotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyW10gY3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycygiaHR0cDovL25vbnJlZ2lzdGVyZWRuYW1lc3BhY2UiKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBhcnJheSBvZiBjdXN0b21pemVycyBmb3IgYW4gdW5yZWdpc3RlcmVkIG5hbWVzcGFjZSBpcyBub3QgZW1wdHkuIiwgMCwgY3VzdG9taXplcnMubGVuZ3RoKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgcmV0dXJucyB0aGUKLQkvLyBvbmUgcmVnaXN0ZXJlZCBjdXN0b21pemVyLgotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyIGN1c3RvbWl6ZXIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKXsKLQkgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSAKLQkgIHsKLQkgICAgLy8gVGhpcyBzdHViIGZvciB0ZXN0aW5nIGRvZXMgbm90IHJlcXVpcmUgYW4gaW1wbGVtZW50YXRpb24uCi0gICAgICAgIHJldHVybiBudWxsOwotCSAgfQotCX07Ci0JcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihudWxsLCBjdXN0b21pemVyKTsKLQljdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKG51bGwpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGFycmF5IG9mIGN1c3RvbWl6ZXJzIGZvciBhIHJlZ2lzdGVyZWQgY3VzdG9taXplciBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIGRvZXMgbm90IGNvbnRhaW4gMSBjdXN0b21pemVyLiIsIDEsIGN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgY3VzdG9taXplciBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHJldHVybmVkLiIsIGN1c3RvbWl6ZXIsIGN1c3RvbWl6ZXJzWzBdKTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZSByZXR1cm5zCi0JLy8gICAgdGhlIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZS4KLQljdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKCIiKTsKLQlhc3NlcnRFcXVhbHMoIjMuIFRoZSBhcnJheSBvZiBjdXN0b21pemVycyBmb3IgYSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSBkb2VzIG5vdCBjb250YWluIDEgY3VzdG9taXplciBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UuIiwgMSwgY3VzdG9taXplcnMubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIjMuIFRoZSBjdXN0b21pemVyIGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZSB3YXMgbm90IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4iLCBjdXN0b21pemVyLCBjdXN0b21pemVyc1swXSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwMmQ3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi0vKioKLSAqIEEgd3JhcHBlciBmb3IgdGhlIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyIGV4dGVuZHMgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgCi17Ci0gIC8qKgotICAgKiBQdWJsaWMgY29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZjdlNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW47Ci0KLS8qKgotICogVGVzdCB0aGUgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICAvKioKLSAgICogVGVzdCB0aGUgbG9hZEN1c3RvbWl6ZXIgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGEgdmFsaWQgYnVuZGxlIGEgY2xhc3Mgc3VjY2VlZHMuCi0gICAqIDIuIFRlc3QgdGhhdCBhbiBpbnZhbGlkIGNsYXNzIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLSAgICogMy4gVGVzdCB0aGF0IGEgbnVsbCBidW5kbGUgZmFpbHMgYW5kIGtlZXBzIHRoZSBjdXN0b21pemVyIHNldCB0byBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvYWRDdXN0b21pemVyKCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCBhIHZhbGlkIGJ1bmRsZSBhIGNsYXNzIHN1Y2NlZWRzLgotCUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0JZGVsZWdhdGUubG9hZEN1c3RvbWl6ZXIoKTsKLQlhc3NlcnROb3ROdWxsKCIxLiBUaGUgY3VzdG9taXplciBsb2FkZWQgd2FzIG51bGwgZm9yIGEgdmFsaWQgY3VzdG9taXplciBhbmQgYnVuZGxlLiIsIGRlbGVnYXRlLmdldEN1c3RvbWl6ZXIoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGFuIGludmFsaWQgY2xhc3MgZmFpbHMgYW5kIGtlZXBzIHRoZSBjdXN0b21pemVyIHNldCB0byBudWxsLgotCUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUyID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uTm9uZXhpc3RhbnRFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0JZGVsZWdhdGUyLmxvYWRDdXN0b21pemVyKCk7Ci0JYXNzZXJ0TnVsbCgiMi4gVGhlIGN1c3RvbWl6ZXIgbG9hZGVkIHdhcyBub3QgbnVsbCBmb3IgYW4gaW52YWxpZCBjdXN0b21pemVyIGNsYXNzLiIsIGRlbGVnYXRlMi5nZXRDdXN0b21pemVyKCkpOwotCQotCS8vIDMuIFRlc3QgdGhhdCBhIG51bGwgYnVuZGxlIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlMyA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKG51bGwsICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCWRlbGVnYXRlMy5sb2FkQ3VzdG9taXplcigpOwotCWFzc2VydE51bGwoIjMuIFRoZSBjdXN0b21pemVyIGxvYWRlZCB3YXMgbm90IG51bGwgZm9yIGEgbnVsbCBidW5kbGUuIiwgZGVsZWdhdGUzLmdldEN1c3RvbWl6ZXIoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBjdXN0b21pemVNZXNzYWdlIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBjb3JyZWN0IGZvciBhIHZhbGlkIGN1c3RvbWl6ZXIuCi0gICAqIDIuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q3VzdG9taXplTWVzc2FnZSgpCi0gIHsKLSAgICAvLyAxLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgY29ycmVjdCBmb3IgYSB2YWxpZCBjdXN0b21pemVyLgotICAgIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWxlZ2F0ZS5jdXN0b21pemVNZXNzYWdlKG51bGwsIG51bGwsIG51bGwpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIG1lc3NhZ2UgcmV0dXJuZWQgd2FzIG5vdCBBQUFBLiIsICJBQUFBIiwgbWVzc2FnZSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIHJldHVybmVkIGlzIG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplciBjbGFzcy4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlMiA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLk5vbmV4aXN0YW50RXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCW1lc3NhZ2UgPSBkZWxlZ2F0ZTIuY3VzdG9taXplTWVzc2FnZShudWxsLCBudWxsLCBudWxsKTsKLQlhc3NlcnROdWxsKCIyLiBUaGUgbWVzc2FnZSByZXR1cm5lZCB3YXMgbm90IG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplci4iLCBtZXNzYWdlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjg3MTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBBIHdyYXBwZXIgb2YgdGhlIGNsYXNzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGV4dGVuZHMgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlIAotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihCdW5kbGUgYnVuZGxlLCBTdHJpbmcgY2xhc3NuYW1lKQotICB7Ci0Jc3VwZXIoYnVuZGxlLCBjbGFzc25hbWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSNsb2FkQ3VzdG9taXplcigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2FkQ3VzdG9taXplcigpCi0gIHsKLQlzdXBlci5sb2FkQ3VzdG9taXplcigpOwotICB9Ci0gIAotICBwdWJsaWMgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgZ2V0Q3VzdG9taXplcigpCi0gIHsKLQlyZXR1cm4gY3VzdG9taXplcjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNjE4MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLS8qKgotICogQSBzYW1wbGUgZXJyb3IgbWVzc2FnZSBjdXN0b21pemVyIGZvciB0ZXN0aW5nLiBUaGlzIGN1c3RvbWl6ZXIgaGFzIGEgc2ltcGxlCi0gKiBpbXBsZW1lbnRhdGlvbiB0aGF0IHNpbXBsZSByZXR1cm5zIHRoZSBzdHJpbmcgIkFBQUEiLgotICovCi1wdWJsaWMgY2xhc3MgU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciBpbXBsZW1lbnRzIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5JRXJyb3JNZXNzYWdlQ3VzdG9taXplciNjdXN0b21pemVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FbGVtZW50SW5mb3JtYXRpb24sIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3RbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLAotCQkJU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gIkFBQUEiOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjY2Q2Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdDsKLQotLyoqCi0gKiBUaGUgcm9vdCB0ZXN0IHN1aXRlIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIFhNTCB2YWxpZGF0b3IgdGVzdCBzdWl0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYTUxUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhNTFRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhNTFRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJYTUwgVmFsaWRhdGlvbiBUZXN0IFN1aXRlIik7Ci0gICAgYWRkVGVzdChYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhNTEV4YW1wbGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KEJ1Z0ZpeGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFBhdGhzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0U3VpdGUoRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKFhJbmNsdWRlVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuY2xhc3MpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZkMzM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhNTFZhbGlkYXRvcjsKLQotCi0vKioKLSAqIEJhc2UgdGVzdCBjYXNlIGNsYXNzIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gCi0gKiAtIGNyZWF0ZSBsb2dzCi0gKiAtIHJlYWQgZnJvbSBsb2dzCi0gKiAtIHJ1biBsb2cgY29tcGFyaXNvbiB0ZXN0cwotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBYTUxWYWxpZGF0b3IgdmFsaWRhdG9yID0gWE1MVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIHByb3RlY3RlZCBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpLnRvU3RyaW5nKCkgKyAiLyI7Ci0gICAgY29uZmlndXJhdGlvbiA9IG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIsIGZhbHNlKTsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSLCAwKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCB0aGUgZmVhdHVyZSBvbiB0aGUgWE1MIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbi4iKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSdW4gYSB2YWxpZGF0b3IgdGVzdC4gVGhlIHRlc3Qgd2lsbCBydW4gdGhlIHZhbGlkYXRvciwgYW5kIGNvbXBhcmUgdGhlIHZhbGlkYXRpb24gcmVzdWx0IHdpdGgKLSAgICogdGhlIGluZm9ybWF0aW9uIHNwZWNpZmllZC4KLSAgICogCi0gICAqIEBwYXJhbSB0ZXN0ZmlsZSBUaGUgZmlsZSB0byBydW4gdGhlIHZhbGlkYXRvciB0ZXN0IG9uLgotICAgKiBAcGFyYW0ga2V5cyBUaGUgbGlzdCBvZiBhbGxvd3MgbWVzc2FnZSBrZXlzLgotICAgKiBAcGFyYW0gbnVtRXJyb3JzIFRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgZXJyb3JzLgotICAgKiBAcGFyYW0gbnVtV2FybmluZ3MgVGhlIG51bWJlciBvZiBleHBlY3RlZCB3YXJuaW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBMaXN0IGtleXMsIGludCBudW1FcnJvcnMsIGludCBudW1XYXJuaW5ncykKLSAgewotICAgIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQkKLQlWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzID0gdmFscmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsKLQkKLQlpbnQgZXJyb3JDb3VudCA9IDA7Ci0JaW50IHdhcm5pbmdDb3VudCA9IDA7Ci0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtbWVzc2FnZXM7IGkrKykKLSAgICB7Ci0gICAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxtZXMgPSB2YWxtZXNzYWdlc1tpXTsKLQkgIFN0cmluZyBrZXkgPSB2YWxtZXMuZ2V0S2V5KCk7Ci0JICBhc3NlcnRUcnVlKCJUaGUgbWVzc2FnZSBrZXkgIiArIGtleSArICIgaXMgbm90IGNvcnJlY3QuIiwga2V5cy5jb250YWlucyhrZXkpKTsKLSAgICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpCi0gICAgICB7Ci0gICAgICAgIHdhcm5pbmdDb3VudCsrOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvckNvdW50Kys7Ci0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydEVxdWFscyhlcnJvckNvdW50ICsgIiBlcnJvcnMgd2VyZSByZXBvcnRlZCBidXQgIiArIG51bUVycm9ycyArICIgZXJyb3JzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtRXJyb3JzLCBlcnJvckNvdW50KTsKLQlhc3NlcnRFcXVhbHMod2FybmluZ0NvdW50ICsgIiB3YXJuaW5ncyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtV2FybmluZ3MgKyAiIHdhcm5pbmdzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtV2FybmluZ3MsIHdhcm5pbmdDb3VudCk7Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwNmQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIHRoZSBYTUwgdmFsaWRhdG9yIHRvIHRlc3QgYnVnIGZpeGVzLgotICovCi1wdWJsaWMgY2xhc3MgQnVnRml4ZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17IAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVHRklYRVNfRElSID0gImJ1Z2ZpeGVzLyI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQnVnRml4ZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJvb3ROb05TQ2hpbGROUygpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJSb290Tm9OU0NoaWxkTlMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlJvb3ROb05TQ2hpbGROUy8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRW1wdHkiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXaXRoRFREVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVmFsaWRhdGVXaXRoRFREVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlZhbGlkYXRlV2l0aERURC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdpdGhEVERJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlZhbGlkYXRlV2l0aERUREludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlZhbGlkYXRlV2l0aERURC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNU0dfQ09OVEVOVF9JTlZBTElEIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3RXZWxsRm9ybWVkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk5vdFdlbGxGb3JtZWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIk5vdFdlbGxGb3JtZWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRVRhZ1JlcXVpcmVkIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkSG9zdCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkSG9zdCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiQ2Fubm90TG9jYXRlRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZExvY2F0aW9uKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiQ2Fubm90TG9jYXRlRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9HcmFtbWFyKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk5vR3JhbW1hciI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm9HcmFtbWFyLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk5PX0dSQU1NQVJfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgdHJ1ZSk7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSU5ESUNBVEVfTk9fR1JBTU1BUiwgMSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgY29uZmlndXJhdGlvbiBXQVJOX05PX0dSQU1NQVIuIik7Ci0JfQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotCXRyeQotCXsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIsIGZhbHNlKTsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSLCAwKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBjb25maWd1cmF0aW9uIFdBUk5fTk9fR1JBTU1BUi4iKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9OYW1lc3BhY2VTY2hlbWEoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm9OYW1lc3BhY2VTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIk5vTmFtZXNwYWNlU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllNmI4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSAiaG9ub3VyIGFsbCBzY2hlbWEgbG9jYXRpb25zIiBmZWF0dXJlLiAKLSAqLwotcHVibGljIGNsYXNzIEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHVibGljIHZvaWQgdGVzdEhvbm91cnNBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaW50IG51bUVycm9ycyA9IDA7Ci0gICAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotICAgIHJ1blRlc3QodGVzdEZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENhblR1cm5PZmZIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgpOwotICAgIH0KLQotICAgIFN0cmluZyB0ZXN0RmlsZSA9IGdldFRlc3RGaWxlKCk7Ci0gICAgTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGtleXMuYWRkKG51bGwpOwotICAgIGtleXMuYWRkKCJjdmMtY29tcGxleC10eXBlLjIuNC5kIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbnQgbnVtRXJyb3JzID0gMjsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRUZXN0RmlsZSgpCi0gIHsKLSAgICByZXR1cm4gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EtaW5zdGFuY2UueG1sIjsgLy8kTk9OLU5MUy0xJAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYjY1MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogQSB0ZXN0IGNsYXNzIHRvIHRlc3QgdGhlIGxpbmUgbnVtYmVyIGFkanVzdG1lbnRzIG1hZGUgaW4gdGhlIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiA9ICJMaW5lTnVtYmVyQWRqdXN0bWVudHMvIjsKLQkKLQkvKioKLQkgKiBSdW4gYSB2YWxpZGF0b3IgdGVzdC4gVGhlIHRlc3Qgd2lsbCBydW4gdGhlIHZhbGlkYXRvciwgYW5kIGNvbXBhcmUgdGhlIHZhbGlkYXRpb24gcmVzdWx0IHdpdGgKLQkgKiB0aGUgaW5mb3JtYXRpb24gc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSB0ZXN0ZmlsZSAKLQkgKiAJCQlUaGUgZmlsZSB0byBydW4gdGhlIHZhbGlkYXRvciB0ZXN0IG9uLgotCSAqIEBwYXJhbSBrZXkgCi0JICogCQkJVGhlIG1lc3NhZ2Uga2V5LgotCSAqIEBwYXJhbSBudW1FcnJvcnMgCi0JICogCQkJVGhlIG51bWJlciBvZiBleHBlY3RlZCBlcnJvcnMuCi0JICogQHBhcmFtIG51bVdhcm5pbmdzIAotCSAqIAkJCVRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgd2FybmluZ3MuCi0JICogQHBhcmFtIGxpbmVubwotCSAqIAkJCVRoZSBsaW5lIG51bWJlciB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9jYXRlZCBvbi4KLQkgKiBAcGFyYW0gY29sdW1ubm8KLQkgKiAJCQlUaGUgY29sdW1uIG51bWJlciB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9jYXRlZCBvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW5UZXN0KFN0cmluZyB0ZXN0ZmlsZSwgU3RyaW5nIGtleSwgaW50IG51bUVycm9ycywgaW50IG51bVdhcm5pbmdzLCBpbnQgbGluZW5vLCBpbnQgY29sdW1ubm8pCi0JewotCSAgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotCQkKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0JICBpbnQgbnVtbWVzc2FnZXMgPSB2YWxtZXNzYWdlcy5sZW5ndGg7Ci0JCQotICAgICAgaW50IGVycm9yQ291bnQgPSAwOwotCSAgaW50IHdhcm5pbmdDb3VudCA9IDA7Ci0KLQkgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotCSAgewotCSAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxtZXMgPSB2YWxtZXNzYWdlc1tpXTsKLQkJU3RyaW5nIG1lc3NrZXkgPSB2YWxtZXMuZ2V0S2V5KCk7Ci0JCWFzc2VydFRydWUoIlRoZSBtZXNzYWdlIGtleSAiICsga2V5ICsgIiBpcyBub3QgY29ycmVjdC4iLCBrZXkuZXF1YWxzKG1lc3NrZXkpKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgbGluZSBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIGxpbmVubywgdmFsbWVzLmdldExpbmVOdW1iZXIoKSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIGNvbHVtbiBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIGNvbHVtbm5vLCB2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkpOwotCSAgICBpZih2YWxtZXMuZ2V0U2V2ZXJpdHkoKSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKQotCSAgICB7Ci0JICAgICAgd2FybmluZ0NvdW50Kys7Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JICAgICAgZXJyb3JDb3VudCsrOwotCSAgICB9Ci0JICB9Ci0JICBhc3NlcnRFcXVhbHMoZXJyb3JDb3VudCArICIgZXJyb3JzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1FcnJvcnMgKyAiIGVycm9ycyB3ZXJlIGV4cGVjdGVkLiIsIG51bUVycm9ycywgZXJyb3JDb3VudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMod2FybmluZ0NvdW50ICsgIiB3YXJuaW5ncyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtV2FybmluZ3MgKyAiIHdhcm5pbmdzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtV2FybmluZ3MsIHdhcm5pbmdDb3VudCk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjMoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJjdmMtY29tcGxleC10eXBlLjIuMyI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0gICAgICBTdHJpbmcga2V5ID0gImN2Yy1jb21wbGV4LXR5cGUuMi4zIjsKLQkgIGludCBsaW5lbm8gPSAyOwotCSAgaW50IGNvbHVtbm5vID0gMTg3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLnhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Y3ZjY29tcGxleHR5cGUyNGIoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJjdmMtY29tcGxleC10eXBlLjIuNC5iIjsKLQkgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJjdmMtY29tcGxleC10eXBlLjIuNC5iIjsKLQkgIGludCBsaW5lbm8gPSAyOwotCSAgaW50IGNvbHVtbm5vID0gMTg3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TXNnQ29udGVudEluY29tcGxldGUoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFIjsKLQkgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgIk1TR19DT05URU5UX0lOQ09NUExFVEUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFIjsKLQkgIGludCBsaW5lbm8gPSA2OwotCSAgaW50IGNvbHVtbm5vID0gNzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1zZ0NvbnRlbnRJbnZhbGlkKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiTVNHX0NPTlRFTlRfSU5WQUxJRCI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJNU0dfQ09OVEVOVF9JTlZBTElELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiTVNHX0NPTlRFTlRfSU5WQUxJRCI7Ci0JICBpbnQgbGluZW5vID0gNjsKLQkgIGludCBjb2x1bW5ubyA9IDc7Ci0JICBpbnQgbnVtRXJyb3JzID0gMTsKLQkgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQkgIHJ1blRlc3QodGVzdGZpbGUsIGtleSwgbnVtRXJyb3JzLCBudW1XYXJuaW5ncywgbGluZW5vLCBjb2x1bW5ubyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIzOTBjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIHRoZSBYTUwgdmFsaWRhdG9yIHRvIHRlc3QgYnVnIGZpeGVzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXRoc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQYXRoc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8gCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlIEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YSW5jbHVkZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hJbmNsdWRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTlhYjU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hJbmNsdWRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgWEluY2x1ZGUgZmVhdHVyZS4gCi0gKi8KLXB1YmxpYyBjbGFzcyBYSW5jbHVkZVRlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHVibGljIHZvaWQgdGVzdFN1cHBvcnRzWEluY2x1ZGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLlVTRV9YSU5DTFVERSwgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaW50IG51bUVycm9ycyA9IDA7Ci0gICAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotICAgIHJ1blRlc3QodGVzdEZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENhblR1cm5PZmZYSW5jbHVkZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uVVNFX1hJTkNMVURFLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAga2V5cy5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmEiKTsKLSAgICBpbnQgbnVtRXJyb3JzID0gMTsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRUZXN0RmlsZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJYTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueG1sIjsKLSAgICByZXR1cm4gdGVzdGZpbGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTEV4YW1wbGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MTFmNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciB0aGUgWE1MIHZhbGlkYXRvciB0byB0ZXN0IHRoZSBYTUxQcm9qZWN0LgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFeGFtcGxlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxFeGFtcGxlc19ESVIgPSAiWE1MRXhhbXBsZXMvIjsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MRXhhbXBsZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2VSZW1vdGUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZUluZGlyZWN0KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2VJbmRpcmVjdCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZVJlbW90ZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlSW52YWxpZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJGSUxFX05PVF9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0gICAgCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhdGFsb2d1ZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDYXRhbG9ndWUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIlB1YmxpY2F0aW9uQ2F0YWxvZ3VlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZ3VlSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDYXRhbG9ndWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJQdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotICAgIAotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sLgotICAgKi8KLSAgLyoqCi0gIHB1YmxpYyB2b2lkIHRlc3RXZWIoKQotICB7Ci0JICAKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJ3ZWIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgImoyZWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgKi8KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmVlMzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgcGx1Z2luIGNsYXNzIGZvciB0aGlzIHRlc3QgcGx1Z2luLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCXByaXZhdGUgc3RhdGljIFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0KLQlwdWJsaWMgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4oKSB7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGx1Z2luTG9jYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLQkJcmV0dXJuIG5ldyBQYXRoKGZpbGUpLnJlbW92ZVRyYWlsaW5nU2VwYXJhdG9yKCkudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBnZXRQbHVnaW4oKQotCXsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYTMzMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWE1MVGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1MzU3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOQ09NUExFVEUvTVNHX0NPTlRFTlRfSU5DT01QTEVURS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ODVjOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSByb290IFsKLTwhRUxFTUVOVCByb290IChjaGlsZCspPgotPCFFTEVNRU5UIGNoaWxkICgjUENEQVRBKT4KLV0+Ci08cm9vdD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTlZBTElEL01TR19DT05URU5UX0lOVkFMSUQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTFiZDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcm9vdCBbCi08IUVMRU1FTlQgcm9vdCAoY2hpbGQrKT4KLTwhRUxFTUVOVCBjaGlsZCAoI1BDREFUQSk+Ci1dPgotPHJvb3Q+Ci1hYWFhCi08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9Ob0NoaWxkcmVuLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL05vQ2hpbGRyZW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTBmNGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL05vQ2hpbGRyZW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iTXlFbGVtZW50IiB0eXBlPSJ0bnM6TmV3WFNEQ29tcGxleFR5cGUiPjwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJOZXdYU0RDb21wbGV4VHlwZSI+Ci0gICAgCTxzZXF1ZW5jZT4KLSAgICAJCTxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODA1ZWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6TXlFbGVtZW50IHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiBOb0NoaWxkcmVuLnhzZCAiPgotYWFhYWEKLTwvdG5zOk15RWxlbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvTm9DaGlsZHJlbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL05vQ2hpbGRyZW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjAxYTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvTm9DaGlsZHJlbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiI+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InRuczpOZXdYU0RDb21wbGV4VHlwZSI+PC9lbGVtZW50PgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5ld1hTRENvbXBsZXhUeXBlIj4KLSAgICAJPHNlcXVlbmNlPgotICAgIAkJPGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+PC9lbGVtZW50PgotICAgIAk8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiZWRiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpNeUVsZW1lbnQgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIE5vQ2hpbGRyZW4ueHNkICI+Ci0gIAotPC90bnM6TXlFbGVtZW50PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS1pbnN0YW5jZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhNzM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxuc0E6QSB4bWxuczpuc0E9InVybjpuc0EiIHhtbG5zOnA9InVybjpuc0IiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0idXJuOm5zQSBBLnhzZCAiPgotICA8cDpCMT5wOkIxPC9wOkIxPgotICA8cDpCMj5wOkIyPC9wOkIyPgotPC9uc0E6QT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDNlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9InVybjpuc0EiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6bnNCPSJ1cm46bnNCIiB4bWxuczpuc0E9InVybjpuc0EiPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9InVybjpuc0IiIHNjaGVtYUxvY2F0aW9uPSJCMS54c2QiLz4KLQk8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm5zQiIgc2NoZW1hTG9jYXRpb249IkIyLnhzZCIvPgotCTxlbGVtZW50IG5hbWU9IkEiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJuc0I6QjEiPjwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCByZWY9Im5zQjpCMiI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YTg1YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9InVybjpuc0IiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgIDxlbGVtZW50IG5hbWU9IkIxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlY2UwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0idXJuOm5zQiIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQjIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzM3YmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IUVMRU1FTlQgSW52b2ljZSAoSGVhZGVyLEl0ZW0rKT4KLTwhRUxFTUVOVCBIZWFkZXIgKERhdGUsQmlsbFRvKT4KLTwhQVRUTElTVCBIZWFkZXIKLSBpbnZvaWNlTnVtYmVyIENEQVRBICNSRVFVSVJFRAotPgotPCFFTEVNRU5UIEl0ZW0gKGRlc2NyaXB0aW9uKik+Ci08IUFUVExJU1QgSXRlbQotIHByaWNlIENEQVRBICNSRVFVSVJFRAotIGRpc2NvdW50IChwcm9tb3Rpb24gfCByZWd1bGFyKSAicmVndWxhciIKLT4KLTwhRUxFTUVOVCBEYXRlICgoTW9udGgsRGF5LFllYXIpfChEYXksTW9udGgsWWVhcikpPgotPCFFTEVNRU5UIEJpbGxUbyAoQWRkcmVzcyk+Ci08IUFUVExJU1QgQmlsbFRvCi0gY3VzdE51bWJlciBJRCAjUkVRVUlSRUQKLSBuYW1lIENEQVRBICNJTVBMSUVECi0gcGhvbmUgQ0RBVEEgI0lNUExJRUQKLT4KLTwhRUxFTUVOVCBkZXNjcmlwdGlvbiAoI1BDREFUQSk+Ci08IUVMRU1FTlQgQWRkcmVzcyAoc3RyZWV0MSxzdHJlZXQyPyxjaXR5LChzdGF0ZXxwcm92aW5jZSksemlwLGNvdW50cnk/KT4KLTwhRUxFTUVOVCBzdHJlZXQxICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdHJlZXQyICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjaXR5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdGF0ZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJvdmluY2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHppcCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY291bnRyeSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgTW9udGggKCNQQ0RBVEEpPgotPCFFTEVNRU5UIERheSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgWWVhciAoI1BDREFUQSk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3OWFmMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5YWYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmEzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW52b2ljZS5kdGQiPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlSW5kaXJlY3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2VJbmRpcmVjdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZTk4NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2VJbmRpcmVjdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbmRpcmVjdEludm9pY2UuZHRkIj4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDk4NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjOkNhdGFsb2d1ZSB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSBDYXRhbG9ndWUueHNkICI+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPlByb2Zlc3Npb25hbCBYTUwgU2NoZW1hPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MS04NjEwMDUtNDctNDwvaXNibj4KLQkJPHB1Ymxpc2hlcj5Xcm94IFByZXNzPC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci0JPGM6TWFnYXppbmU+Ci0JCTx0aXRsZT5XZWJTcGhlcmUgRGV2ZWxvcGVyJ3MgSm91cm5hbDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JPC9jOk1hZ2F6aW5lPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5KYXZhIGFuZCBYU0xUPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MC01OTYtMDAxNDMtNjwvaXNibj4KLQkJPHB1Ymxpc2hlcj5PJ1JlaWxseTwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotPC9jOkNhdGFsb2d1ZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmZjlmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSI+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iUHVibGljYXRpb25UeXBlIj4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iQm9va1R5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9ImM6UHVibGljYXRpb25UeXBlIj4KLQkJCSAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImlzYm4iIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0icHVibGlzaGVyIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFnYXppbmVUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgkJCQotCQkJPHJlc3RyaWN0aW9uIGJhc2U9ImM6UHVibGljYXRpb25UeXBlIj4KLQkJCQk8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMCIvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L3Jlc3RyaWN0aW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iUHVibGljYXRpb24iIHR5cGU9ImM6UHVibGljYXRpb25UeXBlIiBhYnN0cmFjdD0idHJ1ZSI+PC9lbGVtZW50PgotCQotCTxlbGVtZW50IG5hbWU9IkJvb2siIHR5cGU9ImM6Qm9va1R5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJjOlB1YmxpY2F0aW9uIj48L2VsZW1lbnQ+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWdhemluZSIgdHlwZT0iYzpNYWdhemluZVR5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJjOlB1YmxpY2F0aW9uIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQ2F0YWxvZ3VlIj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IHJlZj0iYzpQdWJsaWNhdGlvbiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDk4NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YzpDYXRhbG9ndWUgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUgQ2F0YWxvZ3VlLnhzZCAiPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5Qcm9mZXNzaW9uYWwgWE1MIFNjaGVtYTwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjEtODYxMDA1LTQ3LTQ8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+V3JveCBQcmVzczwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotCTxjOk1hZ2F6aW5lPgotCQk8dGl0bGU+V2ViU3BoZXJlIERldmVsb3BlcidzIEpvdXJuYWw8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCTwvYzpNYWdhemluZT4KLQk8YzpCb29rPgotCQk8dGl0bGU+SmF2YSBhbmQgWFNMVDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjAtNTk2LTAwMTQzLTY8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+TydSZWlsbHk8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLTwvYzpDYXRhbG9ndWU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL2JvZHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9ib2R5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4NTczMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL2JvZHkueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGJvZHkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Im1hc3Rlci54c2QiLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYmFlNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG1hc3RlciB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0ibWFzdGVyLnhzZCI+Ci0gIDwhLS0gPGJvZHkvPiAtLT4KLSAgPHhpOmluY2x1ZGUgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiIGhyZWY9ImJvZHkueG1sIi8+Ci08L21hc3Rlcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0ZjU3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0gIDx4czplbGVtZW50IG5hbWU9Im1hc3RlciI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJvZHkiIC8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iYm9keSIvPgotPC94czpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2MGE0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotICAgIDxkaXNwbGF5LW5hbWU+bW9kdWxlPC9kaXNwbGF5LW5hbWU+Ci0gICAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgICAgICA8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0gICAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWU4ZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBleGFtcGxlIFBVQkxJQyAiUHVibGljIElkZW50aWZpZXIiICJodHRwOi8vd3d3LmVjbGlwc2UuYmxhaC9ub24tZXhpc3RlbnQtZHRkLmR0ZCI+Ci08ZXhhbXBsZS8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMWI4YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBleGFtcGxlIFBVQkxJQyAiUHVibGljIElkZW50aWZpZXIiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL25vbi1leGlzdGVudC1kdGQuZHRkIj4KLTxleGFtcGxlLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZTdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIHNpbXBsZW5lc3RlZC54c2QgIj4KLSAgPGNoaWxkMT5jaGlsZDE8L2NoaWxkMT4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNmNWFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icm9vdCI+Ci0gICAgCTxjb21wbGV4VHlwZT4KLSAgICAJCTxzZXF1ZW5jZT4KLQotICAgIAkJCTxlbGVtZW50IHJlZj0idG5zOmNoaWxkMSI+PC9lbGVtZW50PgotICAgIAkJCTxlbGVtZW50IHJlZj0idG5zOmNoaWxkMiI+PC9lbGVtZW50PgotICAgIAkJPC9zZXF1ZW5jZT4KLSAgICAJPC9jb21wbGV4VHlwZT4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQgbmFtZT0iY2hpbGQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICA8ZWxlbWVudCBuYW1lPSJjaGlsZDIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIAotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vR3JhbW1hci9Ob0dyYW1tYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODljODg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8Y2hpbGQ+Ci0JCTxjaGlsZDIvPgotCTwvY2hpbGQ+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmMTlhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJOb05hbWVzcGFjZVNjaGVtYS54c2QiPgotICA8Y2hpbGQxPmNoaWxkMTwvY2hpbGQxPgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiMGYyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0iUm9vdFR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSb290VHlwZSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2hpbGQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImNoaWxkMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDk5YjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotICA8bm9jbG9zaW5ndGFnPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGU0NGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyA/PgotPHJvb3Q+Ci0gIDx0ZXN0OnRlc3QgeG1sbnM6dGVzdD0iaHR0cDovL3Rlc3Qub3JnL3Rlc3QiPgotICA8L3Rlc3Q6dGVzdD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNGQwYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBzaW1wbGUgU1lTVEVNICJzaW1wbGUuZHRkIj4KLQotPHNpbXBsZSB2ZXJzaW9uPSIyLjAiIHhtbG5zPSJodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlIj4KLSA8ZHVtbXk+IDwvZHVtbXk+Ci08L3NpbXBsZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NWQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBzaW1wbGUgU1lTVEVNICJzaW1wbGUuZHRkIj4KLQotPHNpbXBsZSB2ZXJzaW9uPSIyLjAiIHhtbG5zPSJodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlIj4KLSAgPHNpbXBsZTE+Ci0gICAgPHNpbXBsZTIvPgotICA8L3NpbXBsZTE+Ci08L3NpbXBsZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9zaW1wbGUuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODQ5Yjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTwhRUxFTUVOVCBzaW1wbGUgKHNpbXBsZTEpPgotPCFBVFRMSVNUIHNpbXBsZSAKLSAgICAgICAgICAgdmVyc2lvbiBDREFUQSAjUkVRVUlSRUQKLSAgICAgICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICdodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlJyAKLSAgICAgICAgICAgPgotPCFFTEVNRU5UIHNpbXBsZTEgKHNpbXBsZTIpPgotPCFFTEVNRU5UIHNpbXBsZTIgRU1QVFk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNlNjFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MjViMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWJkYWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNXZWQgSmFuIDA5IDE2OjQ1OjAzIEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcyYjBjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHhzZGNvcmV0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy5pbnRlcm5hbC5YU0RDb3JlVGVzdHNQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IjMuOC4wIiwKLSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuNC4wLDMuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDEsMi4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy5pbnRlcm5hbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkZjgxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHhzZGNvcmV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbAotc291cmNlLnhzZGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQueHNkY29yZXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0Y2U0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYU0QgQ29yZSBUZXN0cyBQbHVnaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9BbGxYU0RDb3JlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0FsbFhTRENvcmVUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjlhMmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0FsbFhTRENvcmVUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0vKioKLSAqIFRoZSByb290IHRlc3Qgc3VpdGUgdGhhdCBjb250YWlucyBhbGwgb3RoZXIgWFNEIENvcmUgdGVzdCBzdWl0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYU0RDb3JlVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYU0RDb3JlVGVzdHMoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQWxsWFNEQ29yZVRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJBbGxYU0RDb3JlVGVzdHMiKTsKLSAgICBhZGRUZXN0KEJ1Z0ZpeGVzVGVzdC5zdWl0ZSgpKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZmIxYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYU0RDb3JlVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotICB9Ci0gIAotICBwcm90ZWN0ZWQgU3RyaW5nIGxvY2F0ZUZpbGVVc2luZ0NhdGFsb2coU3RyaW5nIG5hbWVzcGFjZVVSSSkKLSAgewotICAgIFVSSVJlc29sdmVyIHJlc29sdmVyID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKTsKLSAgICBTdHJpbmcgcmVzdWx0ID0gcmVzb2x2ZXIucmVzb2x2ZSgiIiwgbmFtZXNwYWNlVVJJLCAiIik7Ci0gICAgU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZXIucmVzb2x2ZVBoeXNpY2FsTG9jYXRpb24oIiIsIG5hbWVzcGFjZVVSSSwgcmVzdWx0KTsKLSAgICBpZiAocmVzb2x2ZWRVUkkgPT0gbnVsbCB8fCByZXNvbHZlZFVSSS5sZW5ndGgoKSA9PSAwKQotICAgIHsKLSAgICAgIHJldHVybiBuYW1lc3BhY2VVUkk7Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZFVSSTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzgxNzU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAxNTcyNTQgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLkNNRG9jdW1lbnRGYWN0b3J5WFNEOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLlhTREltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuWFNESW1wbC5Eb2N1bWVudGF0aW9uSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsLlhTREVsZW1lbnREZWNsYXJhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuWFNESW1wbC5YU0RNb2RlbEdyb3VwQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogVGVzdCBjbGFzcyBmb3IgYnVnIGZpeGVzLgotICovCi1wdWJsaWMgY2xhc3MgQnVnRml4ZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgQlVHRklYRVNfRElSID0gIkJ1Z0ZpeGVzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLSAgCi0gIC8vIEFkZCB0ZXN0cyBoZXJlCi0gIAotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgcHVibGljIHZvaWQgdGVzdFhTSVR5cGUoKQotICB7Ci0gICAgU3RyaW5nIHNvYXBTY2hlbWFVUkkgPSBsb2NhdGVGaWxlVXNpbmdDYXRhbG9nKCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIik7Ci0KLSAgICBDTURvY3VtZW50RmFjdG9yeVhTRCBmYWN0b3J5ID0gbmV3IENNRG9jdW1lbnRGYWN0b3J5WFNEKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IGZhY3RvcnkgaXMgbm90IG51bGwiLCBmYWN0b3J5KTsKLSAgICAKLSAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNNRG9jdW1lbnQoc29hcFNjaGVtYVVSSSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IENNRG9jdW1lbnQgaXMgbm90IG51bGwiLCBjbURvY3VtZW50KTsKLSAgICAgICAgCi0gICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgCi0gICAgYm9vbGVhbiBmb3VuZERlc2lyZWRFbGVtZW50ID0gZmFsc2U7Ci0gICAgZm9yIChJdGVyYXRvcjxDTUVsZW1lbnREZWNsYXJhdGlvbj4gaSA9IGVsZW1lbnRzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IGkubmV4dCgpOwotICAgICAgaWYgKCJiaW5kaW5nIi5lcXVhbHMoZWxlbWVudC5nZXRFbGVtZW50TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgZm91bmREZXNpcmVkRWxlbWVudCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICBDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoYXR0cmlidXRlcyk7ICAvLyBUaHJlZSBhdHRyaWJ1dGVzOiByZXF1aXJlZCwgdHJhbnNwb3J0IGFuZCBzdHlsZQotICAgICAgICBhc3NlcnRUcnVlKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPT0gMyk7ICAvLyBJZiB0aGUgeHNpOnR5cGUgd2FzIHByZXNlbnQsIGl0IHdvdWxkIGJlIDQgYXR0cmlidXRlcwotICAgICAgICAKLSAgICAgICAgQ01Ob2RlIGF0dHJOb2RlID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGF0dHJOb2RlID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInJlcXVpcmVkIik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoYXR0ck5vZGUpOwotICAgICAgICBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJ0cmFuc3BvcnQiKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChhdHRyTm9kZSk7Ci0gICAgICAgIGF0dHJOb2RlID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oInN0eWxlIik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoYXR0ck5vZGUpOwotICAgICAgICBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJ0eXBlIik7ICAvLyBTaG91bGQgYmUgbnVsbCEKLSAgICAgICAgYXNzZXJ0TnVsbChhdHRyTm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRUcnVlKGZvdW5kRGVzaXJlZEVsZW1lbnQpOyAvLyBpZiB3ZSBkaWRuJ3QgZXZlbiBmaW5kIHRoZSBiaW5kaW5nIGVsZW1lbnQsIHRoZW4gc29tZXRoaW5nIHRlcnJpYmxlIHdlbnQgd3JvbmcKLSAgfQotICAKLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyB2b2lkIHRlc3RTdGFja092ZXJmbG93KCkKLSAgewotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSAiaHR0cDovL3d3dy53My5vcmcvVFIvdm9pY2V4bWwyMC92eG1sLnhzZCI7Ci0JU3RyaW5nIHZ4bWxTY2hlbWFVUkkgPSBsb2NhdGVGaWxlVXNpbmdDYXRhbG9nKG5hbWVzcGFjZVVSSSk7Ci0gICAgCi0gICAgLy8gU2VlIGJ1ZyAyMDYxMzgKLSAgICAKLSAgICAvLyBUd28gd2F5cyB0byB0ZXN0IHRoaXMuCi0gICAgLy8gRmlyc3Qgd2F5LiBDYWxsIGZpbmRUeXBlc0Rlcml2ZWRGcm9tIGZyb20gWFNESW1wbC4KLSAgICAKLSAgICBhc3NlcnROb3ROdWxsKCJ1bmFibGUgdG8gbG9jYXRlIGZpbGUgZm9yICIgKyBuYW1lc3BhY2VVUkksIHZ4bWxTY2hlbWFVUkkpOwotICAgIGFzc2VydFRydWUoInVuYWJsZSB0byBsb2NhdGUgZmlsZSBmb3IgIiArIG5hbWVzcGFjZVVSSSwgdnhtbFNjaGVtYVVSSS5sZW5ndGgoKSA+IDApOwotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RJbXBsLmJ1aWxkWFNETW9kZWwodnhtbFNjaGVtYVVSSSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGJ1aWxkIG1vZGVsIGZvciAiICsgdnhtbFNjaGVtYVVSSSx4c2RTY2hlbWEpOwotICAgIGJvb2xlYW4gZm91bmREZXNpcmVkVHlwZSA9IGZhbHNlOwotICAgIGZvciAoSXRlcmF0b3I8WFNEVHlwZURlZmluaXRpb24+IHR5cGVzID0geHNkU2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IHR5cGVzLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSB0eXBlcy5uZXh0KCk7Ci0gICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZTsKLSAgICAgICAgaWYgKCJiYXNpYy5ldmVudC5oYW5kbGVyIi5lcXVhbHMoY29tcGxleFR5cGUuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kRGVzaXJlZFR5cGUgPSB0cnVlOwotICAgICAgICAgIExpc3Q8WFNEVHlwZURlZmluaXRpb24+IGxpc3QgPSBYU0RJbXBsLmZpbmRUeXBlc0Rlcml2ZWRGcm9tKGNvbXBsZXhUeXBlKTsKLSAgICAgICAgICBpbnQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgICAgICAgIC8vIGFzc2VydFRydWUoc2l6ZSA9PSAxKTsgIC8vIGlmIHdlIGdvdCBzb21ldGhpbmcgYmFjaywgdGhlbiBncmVhdCwgdGhlcmUgd2FzIG5vIG91dCBvZiBzdGFjayBlcnJvcgotICAgICAgICAgIGFzc2VydFRydWUoIm5vIHR5cGVzIGZvdW5kIGluIFhTRCIsIHNpemUgPj0gMCk7Ci0gICAgICAgICAgLy8gQmVjYXVzZSBvZiBidWcgMjAzMDQ4LCB0aGVyZSBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvdXIgdG8gcmVkZWZpbmVkIHR5cGVzLiAgCi0gICAgICAgICAgLy8gVGhlIGNvbXBsZXggdHlwZSBuYW1lZCBzcGVha2VyIGlzIG5vIGxvbmdlciBjaXJjdWxhci4gICBJbiB0ZXJtcyBvZiB0aGlzIGp1bml0LCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgbm90IHJlbGV2YW50Ci0gICAgICAgICAgLy8gc2luY2Ugd2UganVzdCB3YW50IHNvbWUgbGVuZ3RoIGJhY2sgKGkuZS4gdGhlcmUgd2FzIG5vIGNyYXNoIGZyb20gYSBzdGFjayBvdmVyZmxvdykuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZSgidHlwZSBcImJhc2ljLmV2ZW50LmhhbmRsZXJcIiBub3QgZm91bmQgaW4gWFNEIiwgZm91bmREZXNpcmVkVHlwZSk7ICAvLyBpZiB3ZSBkaWRuJ3QgZXZlbiBmaW5kIHRoZSBjb21wbGV4IHR5cGUsIHRoZW4gc29tZXRoaW5nIHRlcnJpYmxlIHdlbnQgd3JvbmcKLSAgICAKLSAgICAvLyBTZWNvbmQgd2F5IHRvIHRlc3QgdmlhIGNvbnRlbnQgbW9kZWwKLSAgICAKLSAgICBDTURvY3VtZW50RmFjdG9yeVhTRCBmYWN0b3J5ID0gbmV3IENNRG9jdW1lbnRGYWN0b3J5WFNEKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IGZhY3RvcnkgaXMgbm90IG51bGwiLCBmYWN0b3J5KTsKLSAgICAKLSAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNNRG9jdW1lbnQodnhtbFNjaGVtYVVSSSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IENNRG9jdW1lbnQgaXMgbm90IG51bGwiLCBjbURvY3VtZW50KTsKLSAgICAgICAgCi0gICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgCi0gICAgYm9vbGVhbiBmb3VuZERlc2lyZWRFbGVtZW50ID0gZmFsc2U7Ci0gICAgZm9yIChJdGVyYXRvcjxDTUVsZW1lbnREZWNsYXJhdGlvbj4gaSA9IGVsZW1lbnRzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgewotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IGkubmV4dCgpOwotICAgICAgaWYgKCJub2lucHV0Ii5lcXVhbHMoZWxlbWVudC5nZXRFbGVtZW50TmFtZSgpKSkKLSAgICAgIHsKLSAgICAgICAgQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGF0dHJpYnV0ZXMpOwotICAgICAgICAvLyBhc3NlcnRUcnVlKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPT0gMyk7ICAvLyBpZiB3ZSBnb3Qgc29tZXRoaW5nIGJhY2ssIHRoZW4gZ3JlYXQsIHRoZXJlIHdhcyBubyBvdXQgb2Ygc3RhY2sgZXJyb3IKLSAgICAgICAgLy8gQmVjYXVzZSBvZiBidWcgMjAzMDQ4LCB0aGVyZSBpcyBhIGNoYW5nZSBpbiBiZWhhdmlvdXIgdG8gcmVkZWZpbmVkIHR5cGVzLiAgCi0gICAgICAgIC8vIFRoZSBjb21wbGV4IHR5cGUgbmFtZWQgc3BlYWtlciBpcyBubyBsb25nZXIgY2lyY3VsYXIuICAgSW4gdGVybXMgb2YgdGhpcyBqdW5pdCwgdGhlIHZhbHVlIHJldHVybmVkIGlzIG5vdCByZWxldmFudAotICAgICAgICAvLyBzaW5jZSB3ZSBqdXN0IHdhbnQgc29tZSBsZW5ndGggYmFjayAoaS5lLiB0aGVyZSB3YXMgbm8gY3Jhc2ggZnJvbSBhIHN0YWNrIG92ZXJmbG93KS4KLSAgICAgICAgYXNzZXJ0VHJ1ZShhdHRyaWJ1dGVzLmdldExlbmd0aCgpID49IDApOwotICAgICAgICBmb3VuZERlc2lyZWRFbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydFRydWUoImVsZW1lbnQgXCJub2lucHV0XCJyIG5vdCBmb3VuZCBpbiBYU0QiLCBmb3VuZERlc2lyZWRFbGVtZW50KTsgIC8vIGlmIHdlIGRpZG4ndCBldmVuIGZpbmQgdGhlIG5vaW5wdXQgZWxlbWVudCwgdGhlbiBzb21ldGhpbmcgdGVycmlibGUgd2VudCB3cm9uZwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0WFNEVHlwZVdoaXRlc3BhY2VGYWNldHMoKSB7Ci0JICAvLyBCdWcgWzE5NDY5OF0gLSBUZXN0IHRoYXQgdGhlIGNvcnJlY3Qgd2hpdGVzcGFjZSBmYWNldHMgYXJlIGFwcGxpZWQgdG8gdGhlIHR5cGVzCi0JICBTdHJpbmcgWFNEX0ZJTEVfTkFNRSA9ICJYU0RXaGl0ZXNwYWNlLnhzZCI7Ci0JICBTdHJpbmcgZmlsZVVSSSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0ZJTEVfTkFNRTsKLQkgIENNRG9jdW1lbnRGYWN0b3J5WFNEIGZhY3RvcnkgPSBuZXcgQ01Eb2N1bWVudEZhY3RvcnlYU0QoKTsKLQkgIGFzc2VydE5vdE51bGwoIkFzc2VydCBmYWN0b3J5IGlzIG5vdCBudWxsIiwgZmFjdG9yeSk7Ci0JICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNNRG9jdW1lbnQoZmlsZVVSSSk7Ci0JICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgQ01Eb2N1bWVudCBpcyBub3QgbnVsbCIsIGNtRG9jdW1lbnQpOwotCSAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbURlY2wgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pY21Eb2N1bWVudC5nZXRFbGVtZW50cygpLml0ZW0oMCk7Ci0JICBhc3NlcnRFcXVhbHMoInRlc3QiLCBlbGVtRGVjbC5nZXROb2RlTmFtZSgpKTsKLQkgIGFzc2VydFRydWUoZWxlbURlY2wuZ2V0Q29udGVudCgpIGluc3RhbmNlb2YgWFNETW9kZWxHcm91cEFkYXB0ZXIpOwotCSAgWFNETW9kZWxHcm91cEFkYXB0ZXIgZ3JvdXAgPSAoWFNETW9kZWxHcm91cEFkYXB0ZXIpIGVsZW1EZWNsLmdldENvbnRlbnQoKTsKLQkgIENNTm9kZUxpc3QgbGlzdCA9IGdyb3VwLmdldENoaWxkTm9kZXMoKTsKLQkgIFhTREVsZW1lbnREZWNsYXJhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IG51bGw7Ci0JICAKLQkgIFN0cmluZyBub2RlTmFtZSA9IG51bGwsIGV4cGVjdGVkID0gbnVsbDsKLQkgIENNRGF0YVR5cGUgdHlwZSA9IG51bGw7Ci0JICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBlbGVtZW50LCBleGFtaW5pbmcgdGhlIHdoaXRlc3BhY2UgZmFjZXRzICovCi0JICBmb3IoaW50IGkgPSAwOyBpIDwgbGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCSAgYWRhcHRlciA9IChYU0RFbGVtZW50RGVjbGFyYXRpb25BZGFwdGVyKSBsaXN0Lml0ZW0oaSk7Ci0KLQkJICBub2RlTmFtZSA9IGFkYXB0ZXIuZ2V0Tm9kZU5hbWUoKTsKLQkJICBhc3NlcnROb3ROdWxsKG5vZGVOYW1lKTsKLQkJICBhc3NlcnRUcnVlKG5vZGVOYW1lLmNvbnRhaW5zKCItIikpOwotCQkgIHR5cGUgPSBhZGFwdGVyLmdldERhdGFUeXBlKCk7Ci0JCSAgYXNzZXJ0Tm90TnVsbCh0eXBlKTsKLQkJICAKLQkJICBleHBlY3RlZCA9IG5vZGVOYW1lLnN1YnN0cmluZyhub2RlTmFtZS5pbmRleE9mKCctJykgKyAxKTsKLQkJICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHR5cGUuZ2V0UHJvcGVydHkoWFNESW1wbC5QUk9QRVJUWV9XSElURVNQQUNFX0ZBQ0VUKSk7Ci0JICB9Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RYU0lUeXBlVnNUeXBlQXR0cigpIAotICB7Ci0gICAgICAKLSAgICAvLyBTZWUgYnVnIDIyNTQ0NywgMjI1ODE5Ci0gIAotICAgIC8vIExvYWQgdGhlIFhTRCBmaWxlCi0gICAgU3RyaW5nIFhTRF9GSUxFX05BTUUgPSAiWFNJVHlwZVRlc3QueHNkIjsKLSAgICBTdHJpbmcgZmlsZVVSSSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWFNEX0ZJTEVfTkFNRTsKLSAgICBDTURvY3VtZW50RmFjdG9yeVhTRCBmYWN0b3J5ID0gbmV3IENNRG9jdW1lbnRGYWN0b3J5WFNEKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IGZhY3RvcnkgaXMgbm90IG51bGwiLCBmYWN0b3J5KTsKLSAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNNRG9jdW1lbnQoZmlsZVVSSSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IENNRG9jdW1lbnQgaXMgbm90IG51bGwiLCBjbURvY3VtZW50KTsKLSAgCi0gICAgLy8gQ2hlY2sgYW5kIG9idGFpbiB0aGUgdHdvIGdsb2JhbCBlbGVtZW50cyAoZWxlbWVudEEgYW5kIGVsZW1lbnRCKQotICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gY21Eb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIGFzc2VydEVxdWFscyhlbGVtZW50cy5nZXRMZW5ndGgoKSwgMik7Ci0gICAgQ01FbGVtZW50RGVjbGFyYXRpb24gY21FbGVtZW50RGVjbGFyYXRpb24gPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudHMuaXRlbSgwKTsKLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBjbUVsZW1lbnREZWNsYXJhdGlvbkEgPSBudWxsOwotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uQiA9IG51bGw7Ci0gICAgaWYgKCJlbGVtZW50QSIuZXF1YWxzKGNtRWxlbWVudERlY2xhcmF0aW9uLmdldEVsZW1lbnROYW1lKCkpKQotICAgIHsKLSAgICAgIGNtRWxlbWVudERlY2xhcmF0aW9uQSA9IGNtRWxlbWVudERlY2xhcmF0aW9uOwotICAgICAgY21FbGVtZW50RGVjbGFyYXRpb25CID0gKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLml0ZW0oMSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbUVsZW1lbnREZWNsYXJhdGlvbkIgPSBjbUVsZW1lbnREZWNsYXJhdGlvbjsKLSAgICAgIGNtRWxlbWVudERlY2xhcmF0aW9uQSA9IChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50cy5pdGVtKDEpOwotICAgIH0KLSAgCi0gICAgLy8gZWxlbWVudEEgaGFzIGEgInR5cGUiIGF0dHJpYnV0ZSB3aXRoICJYIiBlbnVtZXJhdGVkIHZhbHVlLCBtYWtlIHN1cmUgaXQgYXBwZWFycyBpbiB0aGUgbW9kZWwKLSAgICBDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzQSA9IGNtRWxlbWVudERlY2xhcmF0aW9uQS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGF0dHJpYnV0ZXNBLmdldExlbmd0aCgpLCAxKTsKLSAgICBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGNtQXR0cmlidXRlRGVjbGFyYXRpb25BID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pYXR0cmlidXRlc0EuaXRlbSgwKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGUiLCBjbUF0dHJpYnV0ZURlY2xhcmF0aW9uQS5nZXRBdHRyTmFtZSgpKTsKLSAgICBDTURhdGFUeXBlIGF0dHJUeXBlQSA9IGNtQXR0cmlidXRlRGVjbGFyYXRpb25BLmdldEF0dHJUeXBlKCk7Ci0gICAgU3RyaW5nW10gZW51bWVyYXRlZFZhbHVlc0EgPSBhdHRyVHlwZUEuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotICAgIGFzc2VydEVxdWFscygxLCBlbnVtZXJhdGVkVmFsdWVzQS5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiWCIsIGVudW1lcmF0ZWRWYWx1ZXNBWzBdKTsKLSAgCi0gICAgLy8gZWxlbWVudEIgZG9lcyBub3QgaGF2ZSBhICJ0eXBlIiBhdHRyaWJ1dGUsIG1ha2Ugc3VyZSB0aGUgeHNpOnR5cGUgYXBwZWFycyBpbiB0aGUgbW9kZWwKLSAgICBDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzQiA9IGNtRWxlbWVudERlY2xhcmF0aW9uQi5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGF0dHJpYnV0ZXNCLmdldExlbmd0aCgpLCAxKTsKLSAgICBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGNtQXR0cmlidXRlRGVjbGFyYXRpb25CID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pYXR0cmlidXRlc0IuaXRlbSgwKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGUiLCBjbUF0dHJpYnV0ZURlY2xhcmF0aW9uQi5nZXRBdHRyTmFtZSgpKTsKLSAgICBDTURhdGFUeXBlIGF0dHJUeXBlQiA9IGNtQXR0cmlidXRlRGVjbGFyYXRpb25CLmdldEF0dHJUeXBlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJ0eXBlTmFtZXMiLCBhdHRyVHlwZUIuZ2V0RGF0YVR5cGVOYW1lKCkpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0RW51bWVyYXRpb25zSW5Db21wbGV4VHlwZXNXaXRoU2ltcGxlQ29udGVudCgpCi0gIHsKLSAgICAvLyBTZWUgYnVnIDIxNTUxNAotCi0gICAgLy8gT2J0YWluIHRoZSBXZWIgQXBwbGljYXRpb24gc2NoZW1hCi0gICAgU3RyaW5nIHZ4bWxTY2hlbWFVUkkgPSBsb2NhdGVGaWxlVXNpbmdDYXRhbG9nKCJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIik7Ci0gICAgWFNEU2NoZW1hIHhzZFNjaGVtYSA9IFhTREltcGwuYnVpbGRYU0RNb2RlbCh2eG1sU2NoZW1hVVJJKTsKLSAgICBhc3NlcnROb3ROdWxsKHhzZFNjaGVtYSk7Ci0KLSAgICAvLyBUaGUgdHlwZSB0cmFuc3BvcnQtZ3VhcmFudGVlVHlwZSBpcyBkZWZpbmVkIGFzIGEgY29tcGxleCB0eXBlIHdpdGggc2ltcGxlIHR5cGUgY29udGVudAotICAgIC8vIEl0IGhhcyAzIGVudW1lcmF0ZWQgdmFsdWVzCi0gICAgU3RyaW5nIHR5cGVOYW1lID0gInRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIjsKLSAgICBmb3IgKEl0ZXJhdG9yPFhTRFR5cGVEZWZpbml0aW9uPiB0eXBlcyA9IHhzZFNjaGVtYS5nZXRUeXBlRGVmaW5pdGlvbnMoKS5pdGVyYXRvcigpOyB0eXBlcy5oYXNOZXh0KCk7KQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSB0eXBlcy5uZXh0KCk7Ci0gICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbil0eXBlOwotICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKGNvbXBsZXhUeXBlLmdldE5hbWUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICBTdHJpbmdbXSBlbnVtZXJhdGVkVmFsdWVzRm9yVHlwZSA9IFhTREltcGwuZ2V0RW51bWVyYXRlZFZhbHVlc0ZvclR5cGUoY29tcGxleFR5cGUpOwotICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSAzIGVudW1lcmF0ZWQgdmFsdWVzIGFyZSByZXR1cm5lZAotICAgICAgICAgIGFzc2VydEVxdWFscygzLCBlbnVtZXJhdGVkVmFsdWVzRm9yVHlwZS5sZW5ndGgpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEdsb2JhbEVsZW1lbnREb2N1bWVudGF0aW9uKCkKLSAgewotICAgIC8vIFNlZSBidWcgMTU3MjU0Ci0KLQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiKTsKLQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vZ2xvYmFscmVmdGVzdC54c2QiKTsKLSAgICAKLQlDTURvY3VtZW50IGRvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCWFzc2VydE5vdE51bGwoIkNvbnRlbnQgbW9kZWwgbG9hZGVkIE51bGwiLCBkb2N1bWVudCk7Ci0gICAgCi0gICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIAotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIG5vZGUgPSAgKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLmdldE5hbWVkSXRlbSgicm9vdFRlc3QiKTsKLQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIHJvb3RFbGVtZW50Iiwgbm9kZSk7Ci0KLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiB0ZXN0RWxlbWVudCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbilub2RlLmdldExvY2FsRWxlbWVudHMoKS5nZXROYW1lZEl0ZW0oInRlc3QiKTsKLQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIHRlc3QgZWxlbWVudCIsIHRlc3RFbGVtZW50KTsKLQotICAgIENNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KXRlc3RFbGVtZW50LmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0gICAgaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotICAgIAlmYWlsKCJ0ZXN0IGdsb2JhbCBlbGVtZW50IG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4iKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgY250ID0gMDsgY250IDwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKTsgY250KyspIHsKLSAgICAJRG9jdW1lbnRhdGlvbkltcGwgZG9jID0gKERvY3VtZW50YXRpb25JbXBsKSBkb2N1bWVudGF0aW9uLml0ZW0oY250KTsKLSAgICAJYXNzZXJ0RXF1YWxzKCJUZXN0IGdsb2JhbCBlbGVtZW50IG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4iLCAiVGhpcyBzb21lIGdsb2JhbCBkb2N1bWVudGF0aW9uIiwgZG9jLmdldFZhbHVlKCkpOwotICAgIH0KLSAgICAKLSAgICB0ZXN0RWxlbWVudCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbilub2RlLmdldExvY2FsRWxlbWVudHMoKS5nZXROYW1lZEl0ZW0oInRlc3RFbGVtZW50Iik7Ci0gICAgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KXRlc3RFbGVtZW50LmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0gICAgaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotICAgIAlmYWlsKCJ0ZXN0RWxlbWVudCBsb2NhbCBlbGVtZW50IG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4iKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgY250ID0gMDsgY250IDwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKTsgY250KyspIHsKLSAgICAJRG9jdW1lbnRhdGlvbkltcGwgZG9jID0gKERvY3VtZW50YXRpb25JbXBsKSBkb2N1bWVudGF0aW9uLml0ZW0oY250KTsKLSAgICAJYXNzZXJ0RXF1YWxzKCJ0ZXN0RWxlbWVudCBkb2N1bWVudGF0aW9uIHdyb25nLiIsICJUaGlzIGlzIGFuIG92ZXJyaWRlIiwgZG9jLmdldFZhbHVlKCkpOwotICAgIH0gICAgCi0gIH0gIAotCi0gIHB1YmxpYyB2b2lkIHRlc3RHbG9iYWxBdHJyaWJ1dGVEb2N1bWVudGF0aW9uKCkKLSAgewotICAgIC8vIFNlZSBidWcgMTU3MjU0Ci0KLQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiKTsKLQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vVGVzdEF0dHJpYnV0ZVJlZnMueHNkIik7Ci0gICAgCi0JQ01Eb2N1bWVudCBkb2N1bWVudCA9IFhTREltcGwuYnVpbGRDTURvY3VtZW50KHVybC50b0V4dGVybmFsRm9ybSgpKTsKLQlhc3NlcnROb3ROdWxsKCJDb250ZW50IG1vZGVsIGxvYWRlZCBOdWxsIiwgZG9jdW1lbnQpOwotICAgIAotICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICAKLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBub2RlID0gIChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50cy5nZXROYW1lZEl0ZW0oIm9iamVjdCIpOwotCWFzc2VydE5vdE51bGwoIk1pc3Npbmcgb2JqZWN0IGVsZW1lbnQiLCBub2RlKTsKLQkKLQlDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gIG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCXRlc3RHbG9iYWxBdHRyMURvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JdGVzdEdsb2JhbEF0dHIyRG9jdW1lbnRhdGlvbihhdHRyaWJ1dGVzKTsKLQl0ZXN0R2xvYmFsQXR0cjNEb2N1bWVudGF0aW9uKGF0dHJpYnV0ZXMpOwotCXRlc3RHbG9iYWxBdHRyNERvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JdGVzdExvY2FsQXR0ckRvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JCi0gfQotICAKLSAgcHVibGljIHZvaWQgdGVzdEZvckJ1ZzE3NjQyMCgpIHsKLQkgIC8vIE9idGFpbiB0aGUgbW9kZWwgZnJvbSAvdGVzdHJlc291cmNlcy9zYW1wbGVzL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAueHNkCi0JICBCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiKTsKLQkgIFVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMC54c2QiKTsKLQkgIENNRG9jdW1lbnQgZG9jdW1lbnQgPSBYU0RJbXBsLmJ1aWxkQ01Eb2N1bWVudCh1cmwudG9FeHRlcm5hbEZvcm0oKSk7Ci0JICBhc3NlcnROb3ROdWxsKCJDb250ZW50IG1vZGVsIGxvYWRlZCBOdWxsIiwgZG9jdW1lbnQpOwotCSAgCi0JICAvLyBPYnRhaW4gdGhlIGVudW1lcmF0ZWQgdmFsdWVzIG9mIHRoZSByb290IGVsZW1lbnQKLQkgIENNTm9kZSBjbU5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpLml0ZW0oMCk7Ci0JICBTdHJpbmdbXSBlbnVtZXJhdGVkVmFsdWVzID0gKChDTUVsZW1lbnREZWNsYXJhdGlvbiljbU5vZGUpLmdldERhdGFUeXBlKCkuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotCi0JICAvLyBWZXJpZnkgdGhhdCBhbGwgMTIgZW51bWVyYXRlZCB2YWx1ZXMgYXJlIGluY2x1ZGVkCi0JICBhc3NlcnRFcXVhbHMoMTIsIGVudW1lcmF0ZWRWYWx1ZXMubGVuZ3RoKTsKLSAgfQotICAKLQlwcml2YXRlIHZvaWQgdGVzdExvY2FsQXR0ckRvY3VtZW50YXRpb24oQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcykgewotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgibG9jYWxBdHRyIik7Ci0JCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgbG9jYWxBdHRyIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJVbmFibGUgdG8gZmluZCBkb2N1bWVudGF0aW9uIGZvciBsb2NhbEF0dHIiKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIldyb25nIG51bWJlciBvZiBkb2N1bWVudGF0aW9uIGFubm90YXRpb25zLiIsIDIsIGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBhbm5vdGF0aW9uIGZvciBsb2NhbEF0dHI6IiwKLQkJCQkJICJQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGZvciBsb2NhbCBhdHRyaWJ1dGUgcGFydCAxIiwKLQkJCQkJICgoRG9jdW1lbnRhdGlvbkltcGwpZG9jdW1lbnRhdGlvbi5pdGVtKDApKS5nZXRWYWx1ZSgpLnRyaW0oKSk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGFubm90YXRpb24gZm9yIGxvY2FsQXR0cjoiLAotCQkJCQkgIlBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgZm9yIGxvY2FsIGF0dHJpYnV0ZSBwYXJ0IDIiLAotCQkJCSAgICAgKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMSkpLmdldFZhbHVlKCkudHJpbSgpKTsKLQl9Ci0KLQotCXByaXZhdGUgdm9pZCB0ZXN0R2xvYmFsQXR0cjFEb2N1bWVudGF0aW9uKENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMpIHsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oImdsb2JhbEF0dHIxIik7Ci0JCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgZ2xvYmFsQXR0cjEgYXR0cmlidXRlLiIpOwotCQkKLQkJQ01Ob2RlTGlzdCBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpYXR0cmlidXRlLmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0JCWlmIChkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpID09IDApIHsKLQkJCWZhaWwoIlVuYWJsZSB0byBmaW5kIGRvY3VtZW50YXRpb24gZm9yIGdsb2JhbEF0dHIxIik7Ci0JCX0KLQkJYXNzZXJ0RXF1YWxzKCJXcm9uZyBudW1iZXIgb2YgZG9jdW1lbnRhdGlvbiBhbm5vdGF0aW9ucy4iLCAyLCBkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgZmlyc3QgYW5ub3RhdGlvbiBmb3IgZ2xvYmFsQXR0cjE6IiwKLQkJIlBBU1MhIERvY3VtZW50YXRpb24gZm9yIGF0dHJpYnV0ZSByZWYgb3ZlcnJpZGVzIHRoZSByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIGRvY3VtZW50YXRpb24iLAotCQkoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgwKSkuZ2V0VmFsdWUoKS50cmltKCkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3Qgc2Vjb25kIGFubm90YXRpb24gZm9yIGdsb2JhbEF0dHIxOiIsCi0JCSJQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzLiIsCi0JCSgoRG9jdW1lbnRhdGlvbkltcGwpZG9jdW1lbnRhdGlvbi5pdGVtKDEpKS5nZXRWYWx1ZSgpLnRyaW0oKSk7Ci0JfSAgCi0KLQlwcml2YXRlIHZvaWQgdGVzdEdsb2JhbEF0dHIyRG9jdW1lbnRhdGlvbihDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJnbG9iYWxBdHRyMiIpOwotCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIGdsb2JhbEF0dHIxIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJVbmFibGUgdG8gZmluZCBkb2N1bWVudGF0aW9uIGZvciBnbG9iYWxBdHRyMiIpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiV3JvbmcgbnVtYmVyIG9mIGRvY3VtZW50YXRpb24gYW5ub3RhdGlvbnMuIiwgMSwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGFubm90YXRpb24gZm9yIGdsb2JhbEF0dHIyOiIsCi0JCSJQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgZG9lcyBub3QgaGF2ZSBkb2N1bWVudGF0aW9uIiwKLQkJKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMCkpLmdldFZhbHVlKCkudHJpbSgpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHRlc3RHbG9iYWxBdHRyM0RvY3VtZW50YXRpb24oQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcykgewotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiZ2xvYmFsQXR0cjMiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBnbG9iYWxBdHRyMSBhdHRyaWJ1dGUuIik7Ci0JCQotCQlDTU5vZGVMaXN0IGRvY3VtZW50YXRpb24gPSAoQ01Ob2RlTGlzdClhdHRyaWJ1dGUuZ2V0UHJvcGVydHkoImRvY3VtZW50YXRpb24iKTsKLQkJaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotCQkJZmFpbCgiVW5hYmxlIHRvIGZpbmQgZG9jdW1lbnRhdGlvbiBmb3IgZ2xvYmFsQXR0cjMiKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIldyb25nIG51bWJlciBvZiBkb2N1bWVudGF0aW9uIGFubm90YXRpb25zLiIsIDEsIGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBhbm5vdGF0aW9uIGZvciBnbG9iYWxBdHRyMzoiLAotCQkiUEFTUyEgRG9jdW1lbnRhdGlvbiBmb3IgcmVzb2x2ZWQgYXR0cmlidXRlIHJlZiB3aGVuIHRoZSBhdHRyaWJ1dGUgcmVmIGhhcyBhbiBhbm5vdGF0aW9uIGJ1dCBkb2VzIG5vdCBoYXZlIGRvY3VtZW50YXRpb24iLAotCQkoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgwKSkuZ2V0VmFsdWUoKS50cmltKCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgdGVzdEdsb2JhbEF0dHI0RG9jdW1lbnRhdGlvbihDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJnbG9iYWxBdHRyNCIpOwotCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIGdsb2JhbEF0dHIxIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJEb2N1bWVudGF0aW9uIGVsZW1lbnQgbm90IHJldHVybmVkIGZvciBnbG9iYWxBdHRyNCIpOwotCQl9Ci0JCWFzc2VydE51bGwoImdsb2JhbEF0dHI0IHJldHVybmVkIGRhdGEgd2hlbiBub24gZXhwZWN0ZWQuIiwgKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMCkpLmdldFZhbHVlKCkpOwotCX0KLQotCS8qKgotCSAqIFNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MzIyODQxCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJhc2U2NEJpbmFyeURlZmF1bHRWYWx1ZSgpCi0JewotCSAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShYU0RDb3JlVGVzdHNQbHVnaW4uUExVR0lOX0lEKTsKLQkgIFVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYmFzZTY0QmluYXJ5L1Rlc3QueHNkIik7IC8vJE5PTi1OTFMtMSQKLQotCSAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCSAgYXNzZXJ0Tm90TnVsbChjbURvY3VtZW50KTsKLQotCSAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0KLQkgIENNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uID0gKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLmdldE5hbWVkSXRlbSgiVGVzdCIpOyAvLyROT04tTkxTLTEkCi0JICBhc3NlcnROb3ROdWxsKGNtRWxlbWVudERlY2xhcmF0aW9uKTsKLQotCSAgQ01EYXRhVHlwZSBkYXRhVHlwZSA9IGNtRWxlbWVudERlY2xhcmF0aW9uLmdldERhdGFUeXBlKCk7Ci0JICBhc3NlcnROb3ROdWxsKGRhdGFUeXBlKTsKLQotCSAgU3RyaW5nIGltcGxpZWRWYWx1ZSA9IGRhdGFUeXBlLmdlbmVyYXRlSW5zdGFuY2VWYWx1ZSgpOwotCSAgYXNzZXJ0RXF1YWxzKCJNQT09IiwgaW1wbGllZFZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCX0gIAkJCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvWFNEQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9YU0RDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE3NGNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9YU0RDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgLy8gVGhlIHBsdWctaW4gSUQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyI7Ci0gIHByb3RlY3RlZCBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotICAvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0gIHByaXZhdGUgc3RhdGljIFhTRENvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLSAgLyoqCi0gICAqIFRoZSBjb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIFhTRENvcmVUZXN0c1BsdWdpbigpCi0gIHsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHBsdWdpbiA9IG51bGw7Ci0gICAgcGx1Z2luQnVuZGxlID0gbnVsbDsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFhTRENvcmVUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzljZjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsLkFsbFhTRENvcmVUZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRFdoaXRlc3BhY2UueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0RXaGl0ZXNwYWNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2NDkxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRFdoaXRlc3BhY2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2RUZXN0IiAvPgotCTwhLS0gRGVmaW5lIGEgc2ltcGxlIHR5cGUgdG8gdGVzdCB0aGF0IHRoZSBoaWVyYXJjaHkgb3ZlcnJpZGluZyB3aGl0ZXNwYWNlIHJ1bGUgaXMgb2JzZXJ2ZWQgLS0+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvbGxhcHNlZFN0cmluZyI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTwhLS0gRGVmaW5lIGEgc2ltcGxlIHR5cGUgdG8gdGVzdCB0aGF0IHRoZSB3aGl0ZXNwYWNlIHJ1bGUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGFuY2VzdG9yIC0tPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJOb3JtYWxpemVkIj4KLSAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpub3JtYWxpemVkU3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ4c2RUZXN0Ij4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgYmUgcmVwbGFjZWQgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ic2ltcGxlLXJlcGxhY2UiIHR5cGU9InhzZDpub3JtYWxpemVkU3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImludGVnZXItY29sbGFwc2UiIHR5cGU9InhzZDpub25OZWdhdGl2ZUludGVnZXIiIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InRva2VuLWNvbGxhcHNlIiB0eXBlPSJ4c2Q6dG9rZW4iIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGJlIHByZXNlcnZlZCAtLT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJpbmctcHJlc2VydmUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImR1cmF0aW9uLWNvbGxhcHNlIiB0eXBlPSJ4c2Q6ZHVyYXRpb24iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZXh0ZW5kZWQtY29sbGFwc2UiIHR5cGU9IkNvbGxhcHNlZFN0cmluZyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJleHRlbmRlZC1yZXBsYWNlIiB0eXBlPSJOb3JtYWxpemVkIiAvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNJVHlwZVRlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0lUeXBlVGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Mzk2NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0lUeXBlVGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9OZXdYTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05ld1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxjb21wbGV4VHlwZSBuYW1lPSJ0eXBlQSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdXNlPSJyZXF1aXJlZCI+Ci0JCQk8c2ltcGxlVHlwZT4KLQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJYIj48L2VudW1lcmF0aW9uPgotCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQk8L3NpbXBsZVR5cGU+Ci0JCTwvYXR0cmlidXRlPgotCTwvY29tcGxleFR5cGU+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9InR5cGVCIj4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJ0eXBlQyI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOnR5cGVBIj4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCTxjb21wbGV4VHlwZSBuYW1lPSJ0eXBlRCI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOnR5cGVCIj4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JPGVsZW1lbnQgbmFtZT0iZWxlbWVudEEiIHR5cGU9InRuczp0eXBlQSI+PC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9ImVsZW1lbnRCIiB0eXBlPSJ0bnM6dHlwZUIiPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9iYXNlNjRCaW5hcnkvVGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2Jhc2U2NEJpbmFyeS9UZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2NmI2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2Jhc2U2NEJpbmFyeS9UZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVGVzdCIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVGVzdCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iVGVzdCIgdHlwZT0iYmFzZTY0QmluYXJ5IiAvPgotICAgIAotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL1Rlc3RBdHRyaWJ1dGVSZWZzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZG9jdW1lbnRhdGlvbi9UZXN0QXR0cmlidXRlUmVmcy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzIwYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL1Rlc3RBdHRyaWJ1dGVSZWZzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib2JqZWN0IiB0eXBlPSJvYmplY3QiPjwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJvYmplY3QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Imdsb2JhbEF0dHIxIiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCVBBU1MhIERvY3VtZW50YXRpb24gZm9yIGF0dHJpYnV0ZSByZWYgb3ZlcnJpZGVzIHRoZSByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIGRvY3VtZW50YXRpb24KLQkJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJUEFTUyEgTXVsdGlwbGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50cy4KLQkJCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Imdsb2JhbEF0dHIyIiB1c2U9InJlcXVpcmVkIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iZ2xvYmFsQXR0cjMiIHVzZT0icmVxdWlyZWQiPgotCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Imdsb2JhbEF0dHI0IiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+PC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCTwveHNkOmFubm90YXRpb24+Ci0JCTwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCSAgICAgICBQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzIGZvciBsb2NhbCBhdHRyaWJ1dGUgcGFydCAxCi0JCSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJICAgICAgIFBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgZm9yIGxvY2FsIGF0dHJpYnV0ZSBwYXJ0IDIKLQkJICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ2xvYmFsQXR0cjEiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJRkFJTEVEISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmLiAgSWYgdGhpcyBkb2Mgc2hvd3MsIGl0J3MgYSBidWcuCi0JCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6cGF0dGVybiB2YWx1ZT0iW2EtekEtWjAtOV9dKyI+PC94c2Q6cGF0dGVybj4KLQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpzaW1wbGVUeXBlPgotCTwveHNkOmF0dHJpYnV0ZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJnbG9iYWxBdHRyMiIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgZG9lcyBub3QgaGF2ZSBkb2N1bWVudGF0aW9uCi0JCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCTwveHNkOmF0dHJpYnV0ZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJnbG9iYWxBdHRyMyIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgaGFzIGFuIGFubm90YXRpb24gYnV0IGRvZXMgbm90IGhhdmUgZG9jdW1lbnRhdGlvbgotCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDphdHRyaWJ1dGU+Ci0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ2xvYmFsQXR0cjQiIHR5cGU9InhzZDpzdHJpbmciPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJRkFJTEVEISBEb2N1bWVudGF0aW9uIGZvciBhdHRyaWJ1dGUgcmVmIGlzIGVtcHR5LiAgVGhpcyBkb2N1bWVudGF0aW9uIHNob3VsZCBub3QgZGlzcGxheS4KLQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL2dsb2JhbHJlZnRlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL2dsb2JhbHJlZnRlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGY4Njc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZG9jdW1lbnRhdGlvbi9nbG9iYWxyZWZ0ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMTU3MjU0IC0gVGVzdCBmaWxlIGZvciBkb2N1bWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAtLT4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9nbG9iYWxyZWZ0ZXN0IiB4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9nbG9iYWxyZWZ0ZXN0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9InJvb3RUZXN0IiB0eXBlPSJUZXN0VHlwZSIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoaXMgc29tZSBnbG9iYWwgZG9jdW1lbnRhdGlvbjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6ZWxlbWVudD4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0idGVzdEVsZW1lbnQiIHR5cGU9InhzZDpzdHJpbmciPgotICAgIAk8eHNkOmFubm90YXRpb24+Ci0gICAgCQk8eHNkOmRvY3VtZW50YXRpb24+U29tZSBtb3JlIHRlc3Rpbmc8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIAk8L3hzZDphbm5vdGF0aW9uPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUZXN0VHlwZSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZXN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgIAkJPHhzZDplbGVtZW50IHJlZj0idGVzdEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4KLSAgICAJCQk8eHNkOmFubm90YXRpb24+Ci0gICAgCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGlzIGlzIGFuIG92ZXJyaWRlPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAJCQk8L3hzZDphbm5vdGF0aW9uPgotICAgIAkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0QXR0cmlidXRlIiB0eXBlPSJBdHRyaWJ1dGVUZXN0VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+ICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0ZVRlc3RUeXBlIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdEF0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCTx4c2Q6YW5ub3RhdGlvbj4KLSAgICAJCQk8eHNkOmFwcGluZm8vPgotICAgIAkJPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAJPC94c2Q6YXR0cmlidXRlPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0QXRXaXRoRG9jIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCTx4c2Q6YW5ub3RhdGlvbj4KLSAgICAJCQk8eHNkOmRvY3VtZW50YXRpb24+QXR0cmlidXRlIERvY3VtZW50YXRpb248L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIAkJPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAJPC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiY2FmNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxzaW1wbGVUeXBlIG5hbWU9Im51bWJlcnNUeXBlIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iMiIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSIzIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjQiLz4KLQkJPC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0JPHNpbXBsZVR5cGUgbmFtZT0ibGV0dGVyc1R5cGUiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iYSIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJiIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9ImMiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZCIvPgotCQk8L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQk8c2ltcGxlVHlwZSBuYW1lPSJ1bmlvblR5cGUiPgotCQk8dW5pb24gbWVtYmVyVHlwZXM9InRuczpsZXR0ZXJzVHlwZSB0bnM6bnVtYmVyc1R5cGUgdG5zOnVuaW9uMlR5cGUiIC8+Ci0JPC9zaW1wbGVUeXBlPgotCTxlbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InRuczp1bmlvblR5cGUiPjwvZWxlbWVudD4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJudW1iZXJzMlR5cGUiPgotICAgIAk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iNCIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSI1Ii8+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9IjYiLz4KLSAgICAJPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgPHNpbXBsZVR5cGUgbmFtZT0ibGV0dGVyczJUeXBlIj4KLSAgICAJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9ImQiLz4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZSIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSJmIi8+Ci0gICAgCTwvcmVzdHJpY3Rpb24+Ci0gICAgPC9zaW1wbGVUeXBlPgotICAgIDxzaW1wbGVUeXBlIG5hbWU9InVuaW9uMlR5cGUiPgotICAgIAk8dW5pb24gbWVtYmVyVHlwZXM9InRuczpsZXR0ZXJzMlR5cGUgdG5zOm51bWJlcnMyVHlwZSIvPjwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhYTE3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTAwZjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotI1dlZCBKdWwgMjMgMTE6MTk6MTMgRURUIDIwMDgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0NGIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgSnVsIDIyIDEyOjEzOjUxIEVEVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/Pjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OWU1NWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHhzZHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLkFjdGl2YXRvcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249My44LjIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi40LjAsMy4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDU2ZDhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHhzZHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IHhzZHVpdGVzdHMuamFyCi1zb3VyY2UueHNkdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQueHNkdWl0ZXN0cy5qYXIgPSBiaW4vCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGM0NmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYU0QgVUkgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzA4MWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4KLXsKLQotICAvLyBUaGUgcGx1Zy1pbiBJRAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cyI7Ci0gIHByaXZhdGUgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGUgPSBudWxsOwotCi0gIC8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQWN0aXZhdG9yKCkKLSAgewotICAgIHBsdWdpbiA9IHRoaXM7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlCi0gICAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ci0gICAqICkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0gICAgcGx1Z2luID0gdGhpczsKLSAgICBwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZQotICAgKiBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ci0gICAqICkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBwbHVnaW4gPSBudWxsOwotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0FsbFhTRFVJVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQWxsWFNEVUlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTJmYjg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQWxsWFNEVUlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFdyYXBwZXIgdGVzdCBzdWl0ZSBmb3IgYWxsIFhTRCBVSSB0ZXN0cy4KLSAqLwotcHVibGljIGNsYXNzIEFsbFhTRFVJVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhTRFVJVGVzdHMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhTRFVJVGVzdHMoKQotICB7Ci0gICAgc3VwZXIoIkFsbFhTRFVJVGVzdHMiKTsKLSAgICAvLyBYU0QgSW5jbHVkZXMgdGVzdHMKLSAgICBhZGRUZXN0KENoYW1lbGVvbkluY2x1ZGVzVGVzdC5zdWl0ZSgpKTsKLSAgICAvLyBUZXN0aW5nIHVzZWQgaW1wb3J0cyBhcmVuJ3QgcmVtb3ZlZCAoZW5zdXJlIGxvZ2ljIHRvIGRldGVybWluZQotICAgIC8vIHdoYXQgaXMgb3Igd2hhdCBpcyBub3QgdXNlZCBpcyBjb3JyZWN0KQotICAgIGFkZFRlc3QoSW1wb3J0c1Rlc3Quc3VpdGUoKSk7Ci0gICAgLy8gVW51c2VkIFhTRCBpbXBvcnRzIHRlc3RzCi0gICAgYWRkVGVzdChYU0RVbnVzZWRUZXN0cy5zdWl0ZSgpKTsKLSAgICAvLyBYU0QgeG1sIG5zIHRhYmxlIGNsZWFudXAKLSAgICBhZGRUZXN0KFhTRFhNTE5TQ2xlYW51cFRlc3RzLnN1aXRlKCkpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzNGIzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS5pbnRlcm5hbC5jb21tb24udXRpbC5YU0REaXJlY3RpdmVzTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLkFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC51dGlsLlhTRFJlc291cmNlSW1wbDsKLQotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gQWN0aXZhdG9yLmdldEluc3RhbGxVUkwoKTsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTT1VSQ0VTX0ZPTERFUiA9ICJ0ZXN0cmVzb3VyY2VzIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQ19ST09UX0ZPTERFUiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgIi8iICsgUkVTT1VSQ0VTX0ZPTERFUiArICIvWFNEIjsgLy8kTk9OLU5MUy0xJAotICBwcm90ZWN0ZWQgWFNERGlyZWN0aXZlc01hbmFnZXIgaW1wb3J0TWFuYWdlciA9IG5ldyBYU0REaXJlY3RpdmVzTWFuYWdlcigpOwotCi0gIHB1YmxpYyBCYXNlVGVzdENhc2UoKQotICB7Ci0gIH0KLQotICBwdWJsaWMgQmFzZVRlc3RDYXNlKFN0cmluZyBuYW1lKQotICB7Ci0gICAgc3VwZXIobmFtZSk7Ci0gIH0KLQotICBwcm90ZWN0ZWQgWFNEU2NoZW1hIGdldFhTRFNjaGVtYShTdHJpbmcgcGF0aCkKLSAgewotICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShwYXRoKTsKLSAgICBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKLSAgICBYU0RSZXNvdXJjZUltcGwgcmVzb3VyY2UgPSAoWFNEUmVzb3VyY2VJbXBsKSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOwotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSByZXNvdXJjZS5nZXRTY2hlbWEoKTsKLSAgICBhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0gICAgcmV0dXJuIHNjaGVtYTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9DaGFtZWxlb25JbmNsdWRlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZDE4ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9DaGFtZWxlb25JbmNsdWRlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBDaGFtZWxlb25JbmNsdWRlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDAzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDEzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDIwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMjEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvSW1wb3J0c1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvSW1wb3J0c1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllMzNiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0ltcG9ydHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgSW1wb3J0c1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoSW1wb3J0c1Rlc3QuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAyMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMjQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEVW51c2VkVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEVW51c2VkVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDk0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFVudXNlZFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWFEaXJlY3RpdmU7Ci0KLXB1YmxpYyBjbGFzcyBYU0RVbnVzZWRUZXN0cyBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RVbnVzZWRUZXN0cy5jbGFzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1NpbXBsZS9UZXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIkltcG9ydDAwMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxUmVwZWF0UmVtb3ZhbE9uY2UoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvU2ltcGxlL1Rlc3QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiSW1wb3J0MDAxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICAKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxUmVwZWF0UmVtb3ZhbFR3aWNlKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1NpbXBsZS9UZXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIkltcG9ydDAwMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgCi0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICAgIAotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDMueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSA1KTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgzKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQzLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDQgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg0KTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQ0LnhzZCIuZXF1YWxzKGQ0LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDUgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkNS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDYueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDcueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDliLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDljLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDMpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQzID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMik7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDMuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5ZC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDlmLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDUpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9BLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNS54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0KLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDQgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgzKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkNC5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ1ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoNCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDUuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5Zy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAzKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTUueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMyA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaXJjdWxhckluY2x1ZGVzMDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNC54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2lyY3VsYXJJbmNsdWRlczAwMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gNik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ0ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMyk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTQueHNkIi5lcXVhbHMoZDQuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDQpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU1LnhzZCIuZXF1YWxzKGQ1LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDYgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg1KTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNi54c2QiLmVxdWFscyhkNi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0KLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RYTUxOU0NsZWFudXBUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RYTUxOU0NsZWFudXBUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGM0NzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEWE1MTlNDbGVhbnVwVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIFhTRFhNTE5TQ2xlYW51cFRlc3RzIGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhTRFhNTE5TQ2xlYW51cFRlc3RzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMTQpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNSIpKTsKLQotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSA2KTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAxNCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDUiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDYiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDgiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDkiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0KLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMTIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA2IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA3IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA5IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEwIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEyIikpOwotCi0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDYoKQotICB7Ci0gICAgLy8gTnVsbCB0YXJnZXQgbmFtZXNwYWNlIHNjaGVtYQotCi0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIC8vIFRoaXMgd2FzIGFkZGVkIHNpbmNlIHJlZmVyZW5jZXMgd2VyZSBtYWRlIHdpdGhvdXQgYSBwcmVmaXgKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA3KCkKLSAgewotICAgIC8vIFRlc3QgVW51c2VkIE51bGwgUHJlZml4Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA4KCkKLSAgewotICAgIC8vIFRlc3QgVXNlZCBOdWxsIFByZWZpeAotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJpbXA0IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyMjQ3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbC5BbGxYU0RVSVRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvSW5jbHVkZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmJmYzJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTI5MjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cmlidXRlIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMTZjMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJJbXBBdHRyMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjJkYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0cmlidXRlR3JvdXAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5ZDI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJJbXBBdHRyR3IxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5YTFhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMiI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2UyODI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDIiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzY5ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwZmUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QyIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3ZmVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTg0MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZDJhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcENUMSI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1NDc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyMjc0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkNjViZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMmI1YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTRkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2IwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZTQzZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNjQ4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NWQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzQ5MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzBmYTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9IkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmFhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iSW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTU2ZDljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0ieHNkOmRhdGUiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZjNTI3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDp1bnNpZ25lZEJ5dGUiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjkzMTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9InhzZDpib29sZWFuIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyYWE1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmMmEyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpsYW5ndWFnZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmODZhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6ZG91YmxlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxM2Y2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODdlMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4ZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOGQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc4Mzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTg1NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzg0NjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJJbXBTVDEiPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmU4ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjE2MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTUzZTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmN2ExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBTVDEiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDkwNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9IkltcFNUMSB4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YzBiMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUgSW1wU1QxIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3ZjQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcFNUMSI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL0ltcG9ydDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjlmY2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWFiZDFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyaWJ1dGUiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjcxYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9ImltcDpJbXBBdHRyMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTY3YWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0cmlidXRlR3JvdXAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNWNmZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJpbXA6SW1wQXR0ckdyMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2VkODU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMiI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwZmU5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMiI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNGYwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQk8L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmVhZjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMmRmNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDIiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4ODQ3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4Yzg3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJpbXA6SW1wQ1QxIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyZWZkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1R5cGUxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iaW1wOkltcENUMiI+Ci0gICAgCQkgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZWIyNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9ImltcDpJbXBDVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMGQ1ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iaW1wOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2NjNGU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iaW1wOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzZDNmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9ImltcDpJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NlZjZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMGY0OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMTYxN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcDpJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MzU1ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcDpJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRjZGE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVlNjJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2ZjdiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iaW1wOkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDg2OGY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbXA6SW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkNzA3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6ZGF0ZSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkNDhiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnVuc2lnbmVkQnl0ZSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM2YmYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0JPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY3MTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZTM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmxhbmd1YWdlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYjNiYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmRvdWJsZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg0MjZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWRkZDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTExNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTExNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5MTBjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTg0YTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjNDAyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9ImltcDpJbXBTVDEiPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDg3NjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGJjNDE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9ImltcDpJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDNjMzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA3ODQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iaW1wOkltcFNUMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDM5Mjk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJpbXA6SW1wU1QxIHhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZWZmNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIGltcDpJbXBTVDEiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlMjMxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJpbXA6SW1wU1QxIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL0luY2x1ZGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyZWVlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyOTI1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cmlidXRlIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDE2YzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJJbXBBdHRyMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYyZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0cmlidXRlR3JvdXAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOWQyNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJJbXBBdHRyR3IxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOWExYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMiI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNlMjgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDIiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc2OWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMGZlMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QyIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2ZlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2U4NDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2QyYTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcENUMSI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NTQ3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJJbXBDVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjI3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDY1YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJiNWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU0ZDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTdiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmU0M2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjY0ODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iSW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTVkN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDc0OTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMwZmE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9IkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJhYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iSW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1NmQ5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0ieHNkOmRhdGUiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NmUwOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDp1bnNpZ25lZEJ5dGUiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5MzE3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9InhzZDpib29sZWFuIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmFhNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjJhMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpsYW5ndWFnZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjg2YWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6ZG91YmxlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTNmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg3ZTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOGQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhkOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3ODM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGU4NTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4NDY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJJbXBTVDEiPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZlOGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGIxNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1M2U2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZjdhMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBTVDEiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5MDRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9IkltcFNUMSB4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGMwYjMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUgSW1wU1QxIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxN2Y0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcFNUMSI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jMUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMUF0dHIxIiB0eXBlPSJ0bnM6SW5jMVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMxQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzFFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGUzLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzJDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW5jMkdyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMkF0dHIxIiB0eXBlPSJ0bnM6SW5jMlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMyQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkluYzJFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMyU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzJTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzJDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTAyMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU0LnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzNDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW5jM0dyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jM0F0dHIxIiB0eXBlPSJ0bnM6SW5jM1NUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMzQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkluYzNFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMzU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzNTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzNDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTA5ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU1LnhzZCI+PC94c2Q6aW5jbHVkZT4KLQkKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzRDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNEF0dHIxIiB0eXBlPSJ0bnM6SW5jNFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM0QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzRFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM0U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzRTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzRDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTdhYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU2LnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzVDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNUF0dHIxIiB0eXBlPSJ0bnM6SW5jNVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM1QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzVFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM1U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzVTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzVDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMzAzM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLTwhLS0gCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gLS0+Ci0gICAJPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlMi54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM2Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzZHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzZBdHRyMSIgdHlwZT0idG5zOkluYzZTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM2RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08IS0tICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM2RWxlbTEiIHR5cGU9IlExOkltcENUMSI+PC94c2Q6ZWxlbWVudD4tLT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM2U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmZDMyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTgyYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTYueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDEzMTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiIAotCXhtbG5zOnRucz0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCI+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDIiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQzIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNCIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDUiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW1wMUVsZW1lbnQiIHR5cGU9InRuczpjdDAxIiAvPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNjYzZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCI+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDIiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQzIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNCIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDUiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTJiZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiIHhtbG5zOnRucz0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCI+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjdDAzIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDIiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQzIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNCIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDUiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbXAzRWxlbWVudCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0idG5zOmN0MDMiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL1Rlc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvVGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYTU2N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvVGVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IiB4bWxuczp0bnM9Imh0dHA6Ly93c2RsVGVzdCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiCi0JCXNjaGVtYUxvY2F0aW9uPSJJbXBvcnQwMDEueHNkIiAvPgotCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIKLQkJc2NoZW1hTG9jYXRpb249IkltcG9ydDAwMi54c2QiIC8+Ci0JPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IgotCQlzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MDAzLnhzZCIgLz4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uMSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbnB1dDEiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6aW50IiAvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbiIgdHlwZT0iaW1wOmN0MDMiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uMVJlc3BvbnNlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Im91dHB1dDEiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJpbXA6Y3QwMiIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGJhNzcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wMkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXAyR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXAyQXR0cjEiIHR5cGU9InRuczpJbXAyU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDJBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wMkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDJTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wMlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wMkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0My54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxNWQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0NC54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXAzQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkltcDNHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDNBdHRyMSIgdHlwZT0idG5zOkltcDNTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wM0F0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbXAzRWxlbTEiIHR5cGU9IlExOkltcDRDVDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wM1NUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAzU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXAzQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDUxOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0My54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDRDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wNEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wNEF0dHIxIiB0eXBlPSJ0bnM6SW1wNFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXA0QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDRFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA0U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDRTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDRDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNEVsZW0yIiB0eXBlPSJRMTpJbXAzQ1QyIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjBlODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ1IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NSIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0Ni54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA1Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDVHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDVBdHRyMSIgdHlwZT0idG5zOkltcDVTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA1RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA1U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA1Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDVFbGVtMiIgdHlwZT0iUTE6SW1wNkNUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDE1ZWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA2Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDZHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDZBdHRyMSIgdHlwZT0idG5zOkltcDZTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA2RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNlNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA2U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA2Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDZFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzFHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzFBdHRyMSIgdHlwZT0idG5zOkluYzFTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMxRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWQ0YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlMy54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMyQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkluYzJHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzJBdHRyMSIgdHlwZT0idG5zOkluYzJTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMkF0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMlNUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMyU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMyQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTAyMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNC54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMzQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkluYzNHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzNBdHRyMSIgdHlwZT0idG5zOkluYzNTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jM0F0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMzRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jM1NUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMzU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMzQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTliMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM0Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzRHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzRBdHRyMSIgdHlwZT0idG5zOkluYzRTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM0RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM0U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM0Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MmMzNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM1Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzVHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzVBdHRyMSIgdHlwZT0idG5zOkluYzVTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM1RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM1U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM1Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNmQ0ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNkF0dHIxIiB0eXBlPSJ0bnM6SW5jNlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM2QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzZFbGVtMSIgdHlwZT0iUTE6SW1wQ1QxIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NWE5ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyYThiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZGQzNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5YmNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2VhZTE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLSAgICB4bWxuczppbXA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0Mi54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQ0LnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiPjwvaW1wb3J0PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyOWQzMzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjJhNjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ODljMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0gICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluOEF0dHJpYnV0ZSIgdHlwZT0idG5zOkluYzNTVDEiPjwvYXR0cmlidXRlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxODZhNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmMzQ1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5YS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlhLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiMDkxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlhLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YWJmMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDljLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwYzIyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDljLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5YzMyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InN0cmluZyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhM2VjYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlmLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmVkYzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9BLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlnLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzFmYTdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jM0NUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDk3ZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTUueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMkNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW1wb3J0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDk2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzFHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzFBdHRyMSIgdHlwZT0idG5zOkluYzFTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMxRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI2NmIxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCByZWY9InRuczAxOk1haW5FbGVtMDAxIj48L2VsZW1lbnQ+Ci0JCQk8YW55PjwvYW55PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnMwMjpNYWluQ1QwMDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPHJlc3RyaWN0aW9uIGJhc2U9InRuczAzOk1haW5DVDAwMSI+PC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTxzaW1wbGVDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJzdHJpbmciPgotCQkJCTxhbm5vdGF0aW9uPgotCQkJCQk8YXBwaW5mbz48L2FwcGluZm8+Ci0JCQkJPC9hbm5vdGF0aW9uPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InNob3J0Ij48L2F0dHJpYnV0ZT4KLQkJCQk8YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnMwNDpNYWluQXR0ckdyMDAxIj48L2F0dHJpYnV0ZUdyb3VwPgotCQkJCTxhbnlBdHRyaWJ1dGU+PC9hbnlBdHRyaWJ1dGU+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9zaW1wbGVDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwvZW51bWVyYXRpb24+Ci0JCTwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InRuczA1Ok1haW5TVDAwMSI+PC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8bGlzdCBpdGVtVHlwZT0idG5zMDY6TWFpblNUMDAxIj48L2xpc3Q+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPGxpc3Q+Ci0JCQk8c2ltcGxlVHlwZT4KLQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0idG5zMDc6TWFpblNUMDAxIj48L3Jlc3RyaWN0aW9uPgotCQkJPC9zaW1wbGVUeXBlPgotCQk8L2xpc3Q+Ci0JPC9zaW1wbGVUeXBlPgotCi0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8dW5pb24gbWVtYmVyVHlwZXM9InRuczA4Ok1haW5TVDAwMSB0bnMwOTpNYWluU1QwMDIiPjwvdW5pb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPGF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLQotCTxhdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0KLQk8YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTxhdHRyaWJ1dGUgcmVmPSJ0bnMxMDpNYWluQXR0cjAwMSI+PC9hdHRyaWJ1dGU+Ci0JPC9hdHRyaWJ1dGVHcm91cD4KLQotCTxhdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L2F0dHJpYnV0ZUdyb3VwPgotCi0JPGdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxncm91cCByZWY9InRuczExOk1haW5Hcm91cDAwMiI+PC9ncm91cD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2dyb3VwPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnMxMjpNYWluRWxlbTAwMSI+PC9lbGVtZW50PgotCQotCTxncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ic3RyaW5nIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwvYXBwaW5mbz4KLQkJCQk8L2Fubm90YXRpb24+Ci0JCQk8L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9ncm91cD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMDM4Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ0bnMwMTpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj48L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMjpNYWluU1QwMDEiPjwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwMzpNYWluU1QwMDEgICAKLQkJdG5zMDQ6TWFpblNUMDAyICAgCi0JCXN0cmluZyAgCi0gICAgICAgIGludGVnZXIgICAgICAgICI+PC91bmlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODhiMDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDU9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA3PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDg9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnMwMTpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnMwMjpNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAzOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnMwNDpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczA1Ok1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9InRuczA2Ok1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczA3Ok1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwODpNYWluU1QwMDEgdG5zMDk6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczEwOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczExOk1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zMTI6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjZjBmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnMwMTpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnMwMTpNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAxOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnMwMTpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAxOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9InRuczAxOk1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczAxOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwMTpNYWluU1QwMDEgdG5zMDE6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczAxOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczAxOk1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRuczAxOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcxMzkzYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9Ik1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJNYWluU1QwMDEgTWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9Ik1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiYjJlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIAotICAgIHhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9Ik1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0iTWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9Ik1haW5TVDAwMSBNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iTWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0iTWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTNhY2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zPSJodHRwOi8vVW51c2VkIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0idG5zOk1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6TWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0idG5zOk1haW5TVDAwMSB0bnM6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczpNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJ0bnM6TWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1OTk0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxucz0iaHR0cDovL1VzZWQiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InRuczpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnM6TWFpblNUMDAxIHRuczpNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0idG5zOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczpNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnM6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPEltcEVsZW0xPjwvSW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNjAyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzNzUzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXZhbGlkYXRleHNkdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLnZhbGlkYXRleHNkdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4Y2Q0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGZhYTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAxLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4c2R0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjAiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Y2ZlYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdmFsaWRhdGV4c2R0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNvdXJjZS52YWxpZGF0ZXhzZHRlc3RzLmphciA9IHNyYy8gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YzBhYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1CdW5kbGUtTmFtZS4wID0gWFNEIFZhbGlkYXRpb24gVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTgzZDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JY29uZmlndXJhdGlvbiA9IG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQljb25maWd1cmF0aW9uID0gbnVsbDsKLQlzdXBlci50ZWFyRG93bigpOwotICB9Ci0KLQotICAvKioKLSAgICogVGVzdCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEZhbHNlKCJUaGUgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIGZlYXR1cmUgaXMgbm90IHNldCBieSBkZWZhdWx0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIGZlYXR1cmUgdG8gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlVHJ1ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCB0cnVlKTsKLQkgIGFzc2VydFRydWUoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIHRydWUuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyB0byB0cnVlOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBzZXR0aW5nIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byBmYWxzZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnNGZWF0dXJlRmFsc2UoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgZmFsc2UpOwotCSAgYXNzZXJ0RmFsc2UoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgdG8gZmFsc2U6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIsIGZhbHNlKTsKLQkgIGZhaWwoIlNldHRpbmcgYSBub24gZXhpc3RhbnQgZmVhdHVyZSBkaWQgbm90IHByb2R1Y2UgYW4gZXhjZXB0aW9uLiIpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICAvLyBUaGUgdGVzdCBzdWNjZWVkcyBpZiB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC4KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGdldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIpOwotCSAgZmFpbCgiR2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjhiNDE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEEgdGVzdCBjbGFzcyBmb3IgdGhlIFZhbGlkYXRvciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yV3JhcHBlcigpOwotCSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0JICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGFkZEluZm9Ub01lc3NhZ2UgbWV0aG9kLiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gV2hlbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNvbnRhaW5zIGEgbnVsbCBrZXkgbm90aGluZyBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZS48YnIvPgotICAgKiAyLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVOVElSRV9FTEVNRU5UIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgYWRkZWQKLSAgICogdG8gdGhlIG1ldGhvZCBhbmQgdGhlIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIGlzIG51bGwuPGJyLz4KLSAgICogMy4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFbnRpdHlOb3REZWNsYXJlZCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRJbmZvVG9NZXNzYWdlKCkKLSAgewotICAgIC8vIFRoZXNlIHN0cmluZ3MgYXJlIGNvbW1vbiBhZGRpdGlvbiBpbmZvcm1hdGlvbiB0eXBlcy4KLQlTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZXMgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZAotCS8vIHdpdGggYSBudWxsIGtleS4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIpOwotCU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotCWFzc2VydE51bGwoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gInM0cy1lbHQtY2hhcmFjdGVyIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTIgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiczRzLWVsdC1jaGFyYWN0ZXIiLCBudWxsKTsKLQlNZXNzYWdlIG1lc3NhZ2UyID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTIsIG1lc3NhZ2UyKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHM0cy1lbHQtY2hhcmFjdGVyLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVEVYVC4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJURVhUIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBzNHMtZWx0LWNoYXJhY3Rlci4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgIiIsIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotCQotICAgIC8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgdGhyZWUgYXR0cmlidXRlcyB3aGVuIHRoZSBrZXkgaXMgc2V0IHRvICJzcmMtcmVzb2x2ZSIuCi0JVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UzID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCInTXlOYW1lJyIsIDEsIDEsICIiLCAic3JjLXJlc29sdmUiLCBudWxsKTsKLQlNZXNzYWdlIG1lc3NhZ2UzID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTMsIG1lc3NhZ2UzKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHNyYy1yZXNvbHZlLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUUuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCAiVkFMVUVfT0ZfQVRUUklCVVRFX1dJVEhfR0lWRU5fVkFMVUUiLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBzZXQgdG8gTXlOYW1lIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBzcmMtcmVzb2x2ZS4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgIk15TmFtZSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgdmFsaWRhdGUgbWV0aG9kLiBUZXN0cyB0byBiZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC48YnIvPgotICAgKiAyLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlKCkKLSAgewotCXRyeQotCXsKLQkgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IE5lc3RlZFZhbGlkYXRvckNvbnRleHQoKSk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIHJlcG9ydDIgPSBudWxsOwotCSAgaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0RmFsc2UoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGFuIGludmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnLWluIGxvY2F0aW9uOiAiICsgZSk7Ci0JfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhOTVmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi0vKioKLSAqIEEgd3JhcHBlciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZyB0aGUgVmFsaWRhdG9yIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFZhbGlkYXRvciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI2FkZEluZm9Ub01lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZSwgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSkKLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEluZm9Ub01lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UsIElNZXNzYWdlIG1lc3NhZ2UpIAotICB7Ci0Jc3VwZXIuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2ZWIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IGNhc2UgdG8gdGVzdCB0aGUgWFNETWVzc2FnZUluZm9IZWxwZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBYU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIgaGVscGVyID0gbmV3IFhTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCAiIn0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm90RXhpc3RhbnRLZXlBbmROdWxsTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbygiTk9OX0VYSVNUQU5UX0tFWSIsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydEVxdWFscygiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgIiJ9IHdoZW4KLSAgICogZ2l2ZW4gYSBub24tZXhpc3RhbnQga2V5IGFuIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TnVsbEtleUFuZE1lc3NhZ2VBcmd1bWVudHMoKQotICB7Ci0JU3RyaW5nW10gbWVzc2FnZUluZm8gPSBoZWxwZXIuY3JlYXRlTWVzc2FnZUluZm8obnVsbCwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIG1ldGhvZCBnZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMuIFRoZXJlIGFyZSBhIGZldyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGEgc2ltcGxlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMgJ25hbWUnIHJldHVybnMgbmFtZS4KLSAgICogMi4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggbm8gc2luZ2xlIHF1b3RlcyByZXR1cm5zIG51bGwuCi0gICAqIDMuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIHNpbmdsZSBxdW90ZSAnbmFtZSByZXR1cm5zIG51bGwuCi0gICAqIDQuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIDMgc2luZ2xlIHF1b3RlcyAnbmFtZSduYW1lMicgcmV0dXJucyBuYW1lLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcygpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSBzaW1wbGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3RlcyAnbmFtZScgcmV0dXJucyBuYW1lLgotCVN0cmluZyByZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSciKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBcIm5hbWVcIiBmb3IgdGhlIHN0cmluZyBcIiduYW1lJ1wiLiIsICJuYW1lIiwgcmVzdWx0KTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBubyBzaW5nbGUgcXVvdGVzIHJldHVybnMgbnVsbC4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCJuYW1lIik7Ci0JYXNzZXJ0TnVsbCgiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IG51bGwgZm9yIHRoZSBzdHJpbmcgXCJuYW1lXCIgd2l0aCBubyBzaW5nbGUgcXVvdGVzLiIsIHJlc3VsdCk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc2luZ2xlIHF1b3RlICduYW1lIHJldHVybnMgbnVsbC4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSIpOwotCWFzc2VydE51bGwoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBudWxsIGZvciB0aGUgc3RyaW5nIFwiJ25hbWVcIiB3aXRoIG9uZSBzaW5nbGUgcXVvdGUuIiwgcmVzdWx0KTsKLQkKLQkvLyA0LiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCAzIHNpbmdsZSBxdW90ZXMgJ25hbWUnbmFtZTInIHJldHVybnMgbmFtZS4KLQlyZXN1bHQgPSBoZWxwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCInbmFtZSduYW1lMiciKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSByZXR1cm5lZCBzdHJpbmcgd2FzIG5vdCBcIm5hbWVcIiBmb3IgdGhlIHN0cmluZyBcIiduYW1lJ25hbWUyJ1wiIHdpdGggMyBzaW5nbGUgcXVvdGVzLiIsICJuYW1lIiwgcmVzdWx0KTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NDI5NjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi0vKioKLSAqIEEgd3JhcHBlciBjbGFzcyBmb3IgdGhlIFhTRE1lc3NhZ2VJbmZvSGVscGVyIGNsYXNzIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyIGV4dGVuZHMgWFNETWVzc2FnZUluZm9IZWxwZXIgCi17Ci0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTRE1lc3NhZ2VJbmZvSGVscGVyI2dldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhqYXZhLmxhbmcuU3RyaW5nKQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoU3RyaW5nIHMpIAotICB7Ci0JcmV0dXJuIHN1cGVyLmdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTc0NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgdGhlIEVjbGlwc2Ugc3BlY2lmaWMgWFNEIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRvIGVuc3VyZSB0aGUgVVJJIHJlc29sdmVyIGlzIG5vdCBudWxsIGluIHRoZSBFY2xpcHNlCi0gICAqIHNwZWNpZmljIFhTRCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VVJJUmVzb2x2ZXJJc1JlZ2lzdGVyZWQoKQotICB7Ci0JWFNEVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgWFNEVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RWYWxpZGF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNDdlZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogV3JhcHBlciBmb3IgdGhlIEVjbGlwc2UgWFNEIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBYU0RWYWxpZGF0b3IgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBYU0RWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JcmV0dXJuIHVyaXJlc29sdmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWFNEVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhMWU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNETWVzc2FnZUluZm9IZWxwZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNEVmFsaWRhdG9yVGVzdDsKLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYU0QgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWFNEVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYU0RUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYU0RUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsWFNEVGVzdHMiKTsKLSAgICBhZGRUZXN0KFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYU0RWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuY2xhc3MpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjZDYxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTRFZhbGlkYXRvcjsKLQotLyoqCi0gKiBCYXNlIHRlc3QgY2FzZSBjbGFzcyB3aGljaCBwcm92aWRlcyBtZXRob2RzIHRvIAotICogLSBjcmVhdGUgbG9ncwotICogLSByZWFkIGZyb20gbG9ncwotICogLSBydW4gbG9nIGNvbXBhcmlzb24gdGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEJhc2VUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByb3RlY3RlZCBTdHJpbmcgRklMRV9QUk9UT0NPTCA9ICJmaWxlOi8vLyI7IAotICBwcm90ZWN0ZWQgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotICBwcm90ZWN0ZWQgU3RyaW5nIFNBTVBMRVNfRElSID0gInRlc3RyZXNvdXJjZXMvc2FtcGxlcy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBJREVBTF9SRVNVTFRTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIExPR19GSUxFX0xPQ0FUSU9OID0gInJlc3VsdHMubG9nIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIjsKLSAgcHJpdmF0ZSBYU0RWYWxpZGF0b3IgdmFsaWRhdG9yID0gWFNEVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBsb2cgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUgdGhlIHJlc3VsdHMKLSAgICogd2l0aCB0aGUgaWRlYWwgcmVzdWx0cy4gVGhlIHRlc3Qgd2lsbCBvbmx5IHBhc3MgaWYgdGhlIHR3byBsb2cgZmlsZXMgYXJlIHRoZSBzYW1lLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gdG8gY3JlYXRlIHRoZSBsb2cgZmlsZS4KLSAgICogQHBhcmFtIGlkZWFsbG9nbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBpZGVhbCBsb2cgZmlsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBTdHJpbmcgbG9nbG9jYXRpb24sIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uKQotICB7Ci0JcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLSAgfQotICAvKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGxvZyB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cwotICAgKiB3aXRoIHRoZSBpZGVhbCByZXN1bHRzLiBUaGUgdGVzdCB3aWxsIG9ubHkgcGFzcyBpZiB0aGUgdHdvIGxvZyBmaWxlcyBhcmUgdGhlIHNhbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgCi0gICAqIAkJVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGxvZ2xvY2F0aW9uIAotICAgKiAJCVRoZSBsb2NhdGlvbiB0byBjcmVhdGUgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gaWRlYWxsb2dsb2NhdGlvbiAKLSAgICogCQlUaGUgbG9jYXRpb24gb2YgdGhlIGlkZWFsIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiAKLSAgICogCQlUaGUgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgdmFsaWRhdGlvbiB0ZXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBsb2dsb2NhdGlvbiwgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24sIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gIHsKLSAgICBWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IHZhbGlkYXRvci52YWxpZGF0ZSh0ZXN0ZmlsZSwgbnVsbCwgY29uZmlndXJhdGlvbik7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY3JlYXRlTG9nKGxvZ2xvY2F0aW9uLCB2YWxyZXBvcnQpOwotICAgICAgU3RyaW5nIGdlbmVyYXRlZExvZyA9IGdldFN0cmluZ0Zyb21GaWxlKGxvZ2xvY2F0aW9uKTsKLSAgICAgIFN0cmluZyBpZGVhbExvZyA9IGdldFN0cmluZ0Zyb21GaWxlKGlkZWFsbG9nbG9jYXRpb24pOwotICAgICAgYXNzZXJ0RXF1YWxzKGlkZWFsTG9nLCBnZW5lcmF0ZWRMb2cpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIkNvdWxkIG5vdCBjb21wYXJlIGxvZyBmaWxlcyIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGZpbGUuCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZW5hbWUgdGhlIGZpbGUgbmFtZSBvZiB0aGUgZmlsZSB0byBnZXQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAgICogQHJldHVybiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlmIHN1Y2Nlc3NmdWwuCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uIFRocm93biBpZiB1bmFibGUgdG8gY3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGFpb24gb2YgdGhlIGZpbGUuCi0gICAqLwotICBwcml2YXRlIFN0cmluZyBnZXRTdHJpbmdGcm9tRmlsZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIFN0cmluZ0J1ZmZlciBmaWxlc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgIFJlYWRlciByZWFkZXIgPSBudWxsOwotICAgIEJ1ZmZlcmVkUmVhZGVyIGJ1ZnJlYWRlciA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZSk7Ci0gICAgICBidWZyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocmVhZGVyKTsKLSAgICAgIHdoaWxlIChidWZyZWFkZXIucmVhZHkoKSkKLSAgICAgIHsKLSAgICAgICAgZmlsZXN0cmluZy5hcHBlbmQoYnVmcmVhZGVyLnJlYWRMaW5lKCkgKyAiXG4iKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgfSBmaW5hbGx5Ci0gICAgewotICAgICAgYnVmcmVhZGVyLmNsb3NlKCk7Ci0gICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbGVzdHJpbmcudG9TdHJpbmcoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIGxvZyBmaWxlIGZvciBhbiBYU0QgdGVzdC4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUgdG8gY3JlYXRlLgotICAgKiBAcGFyYW0gdmFscmVwb3J0IFRoZSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhpcyBmaWxlLgotICAgKiBAcmV0dXJuIFRoZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3Qgc3VjY2Vzc2Z1bC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZUxvZyhTdHJpbmcgZmlsZW5hbWUsIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0KQotICB7Ci0gICAgIFZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsvL3ZhbGlkYXRvci5nZXRFcnJvcnMoKS5zaXplKCkgKyB2YWxpZGF0b3IuZ2V0V2FybmluZ3MoKS5zaXplKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciBlcnJvcnNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIFN0cmluZ0J1ZmZlciB3YXJuaW5nc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgaW50IG51bWVycm9ycyA9IDA7Ci0gICAgIGludCBudW13YXJuaW5ncyA9IDA7Ci0gICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgICB7Ci0gICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0gICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgICB7Ci0gICAgICAgICBudW13YXJuaW5ncysrOwotICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIigiKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChtZXNzYWdlICsgIiBbIiArIHZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyB2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgICBudW1lcnJvcnMrKzsKLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICIoIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICB9Ci0gICAgIFN0cmluZ0J1ZmZlciBsb2cgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiBlcnJvcnMgICAgICA6ICIgKyBudW1lcnJvcnMgKyAiXG4iKTsKLSAgICAgaWYobnVtd2FybmluZ3MgPiAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIHdhcm5pbmdzICAgIDogIiArIG51bXdhcm5pbmdzICsgIlxuIik7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgIGlmKG51bWVycm9ycyA9PSAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiKG5vbmUpXG4iKTsKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKGVycm9yc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgfQotICAgICBpZihudW13YXJuaW5ncyA+IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgbG9nLmFwcGVuZCh3YXJuaW5nc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgCi0gICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0U3RyZWFtID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGxvZ2ZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICBGaWxlIHBhcmVudCA9IGxvZ2ZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAJaWYgKCFwYXJlbnQuZXhpc3RzKCkpIAotICAJewotICAJICBwYXJlbnQubWtkaXJzKCk7Ci0gIAl9Ci0gICAgICBpZihsb2dmaWxlLmV4aXN0cygpKQotICAgICAgewotICAgICAgICBsb2dmaWxlLmRlbGV0ZSgpOwotICAgICAgfQotICAgICAgbG9nZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0gICAgICAKLSAgICAgIG91dFN0cmVhbSA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lLCB0cnVlKSk7Ci0gICAgICBvdXRTdHJlYW0ud3JpdGVCeXRlcyhsb2cudG9TdHJpbmcoKSk7Ci0gICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKLQotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgLy8gSWYgd2UgY2FuJ3Qgd3JpdGUgdGhlIGxvZyB0aGVuIGNsZWFyIHRoZSBsb2cuCi0gICAgICBsb2cuZGVsZXRlKDAsIGxvZy5sZW5ndGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBsb2cudG9TdHJpbmcoKTsKLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0UGx1Z2luTmFtZSgpCi0gIHsKLSAgICByZXR1cm4gUExVR0lOX05BTUU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcykKLSAgewotICAgIHJldHVybiBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3RlZE1lc3NhZ2VzLCAwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhMaXN0IG5lc3RlZE1lc3NhZ2VzLCBpbnQgZGVwdGgpCi0gIHsKLSAgICBpZihuZXN0ZWRNZXNzYWdlcyAhPSBudWxsICYmIG5lc3RlZE1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSAiIjsKLSAgICAgIEl0ZXJhdG9yIG5lc3RlZE1lc0l0ZXIgPSBuZXN0ZWRNZXNzYWdlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUobmVzdGVkTWVzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlIG5lc3ZhbG1lcyA9IChWYWxpZGF0aW9uTWVzc2FnZSluZXN0ZWRNZXNJdGVyLm5leHQoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICIgIjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBuZXN2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICJbKF0iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSAoIi0+ICIgKyBtZXNzYWdlICsgIiBbIiArIG5lc3ZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyBuZXN2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgbWVzc2FnZVN0cmluZyArPSBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3ZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpLCBkZXB0aCArIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIG1lc3NhZ2VTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIAotICBwcm90ZWN0ZWQgSVByb2plY3QgY3JlYXRlU2ltcGxlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUsIFN0cmluZ1tdIGZpbGVzKQotICB7Ci0gICAgZmluYWwgSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gICAgZmluYWwgSVByb2plY3QgcHJvamVjdCA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0gICAgaWYoIXByb2plY3QuZXhpc3RzKCkpCi0gICAgewotICAgICAgdHJ5Ci0JICB7Ci0gICAgICAgIHByb2plY3QuY3JlYXRlKG51bGwpOwotICAgICAgfQotICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotCSAgewotICAgICAgICBmYWlsKCJDb3VsZCBub3QgY3JlYXRlIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0gICAgICB9IAotICAgIH0KLSAgICBpZighcHJvamVjdC5pc09wZW4oKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5vcGVuKG51bGwpOwotCSAgfQotICAgICAgY2F0Y2goQ29yZUV4Y2VwdGlvbiBlKQotICAgICAgewotICAgICAgICBmYWlsKCJDb3VsZCBub3Qgb3BlbiBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArIGUpOwotCSAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBJUHJvamVjdERlc2NyaXB0aW9uIHByb2plY3REZXNjcmlwdGlvbiA9IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKTsgCi0gICAgICBwcm9qZWN0RGVzY3JpcHRpb24uc2V0TmFtZShwcm9qZWN0TmFtZSk7Ci0gICAgICBwcm9qZWN0LnNldERlc2NyaXB0aW9uKHByb2plY3REZXNjcmlwdGlvbiwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIlVuYWJsZSB0byBzZXQgcHJvamVjdCBwcm9wZXJ0aWVzIGZvciBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArICIuICIgKyBlKTsKLSAgICB9Ci0KLSAgICBpZihmaWxlcyAhPSBudWxsKQotICAgIHsKLSAgICAgIGludCBudW1maWxlcyA9IGZpbGVzLmxlbmd0aDsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1maWxlczsgaSsrKQotICAgICAgewotICAgICAgICB0cnkKLQkJewotICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVzW2ldOwotICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgaWYoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZToiKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg1KTsKLQkJCXdoaWxlKGZpbGVuYW1lLnN0YXJ0c1dpdGgoIi8iKSkKLQkgICAgICAgIHsKLQkgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMSk7Ci0JICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotICAgICAgICAgIElGaWxlIGlGaWxlID0gcHJvamVjdC5nZXRGaWxlKGZpbGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICBpZighaUZpbGUuZXhpc3RzKCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgaUZpbGUuY3JlYXRlKGluLCB0cnVlLCBudWxsKTsKLSAgICAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgICAgICAgfQotCQl9Ci0gICAgICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBmaWxlICIgKyBmaWxlc1tpXSk7Ci0JCX0gCi0gICAgICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIHByb2plY3QucmVmcmVzaExvY2FsKC0xLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAge30KLSAgICByZXR1cm4gcHJvamVjdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBiYjMyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciwgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLCBidWcgMTQ3MDMzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotCi0KLQotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHJpdmF0ZSBTdHJpbmcgQlVHRklYRVNfRElSID0gIkJ1Z0ZpeGVzLyI7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9FbXB0eS54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRW1wdHkiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIGNyZWF0ZVNpbXBsZVByb2plY3QoIlByb2plY3QiLCBuZXcgU3RyaW5nW117dGVzdGZpbGV9KTsKLSAgICAKLSAgICAKLSAgICBJQ2F0YWxvZyBjYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLSAgICBJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ3MgPSBjYXRhbG9nLmdldE5leHRDYXRhbG9ncygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV4dENhdGFsb2dzLmxlbmd0aDsgaSsrKQotCXsKLQkJSU5leHRDYXRhbG9nIG5leHRDYXRhbG9nID0gbmV4dENhdGFsb2dzW2ldOwotCQlpZihYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRC5lcXVhbHMobmV4dENhdGFsb2cuZ2V0SWQoKSkpewotCQkJSUNhdGFsb2cgdXNlckNhdGFsb2cgPSBuZXh0Q2F0YWxvZy5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotCQkJaWYodXNlckNhdGFsb2cgIT0gbnVsbCkKLQkJCXsKLQkJCQlJQ2F0YWxvZ0VudHJ5IGNhdGFsb2dFbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KXVzZXJDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRLZXkoInRlc3RLZXkiKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJodHRwOi8vdGVzdHVyaSIpOwotCQkJICAgIHVzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0JCQkgICAgcnVuVGVzdCgicGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QiLypGSUxFX1BST1RPQ09MICsgZmlsZS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkqLywgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotCQkJICAgIGNhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCX0JCi0JCX0JCi0JfSAKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJNaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0SW52YWxpZExvY2F0aW9uKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRJbnZhbGlkTG9jYXRpb24iOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydEludmFsaWRMb2NhdGlvbi8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VHdvT3BlbkJyYWNrZXRzKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUd29PcGVuQnJhY2tldHMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIlR3b09wZW5CcmFja2V0cy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gImRvZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IG5ldyBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMsIHRydWUpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byB0cnVlOiAiICsgZSk7Ci0gICAgfQotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uLCBjb25maWd1cmF0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2ciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgY3JlYXRlU2ltcGxlUHJvamVjdCgiUHJvamVjdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZX0pOwotICAgIAotICAgIAotICAgIElDYXRhbG9nIGNhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9ncyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0JewotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ3NbaV07Ci0JCWlmKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lELmVxdWFscyhuZXh0Q2F0YWxvZy5nZXRJZCgpKSl7Ci0JCQlJQ2F0YWxvZyB1c2VyQ2F0YWxvZyA9IG5leHRDYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQlpZih1c2VyQ2F0YWxvZyAhPSBudWxsKQotCQkJewotCQkJCUlDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0VVJJKCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCIpOwotCQkJICAgIHVzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0JCQkgICAgcnVuVGVzdCgicGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkIiwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotCQkJICAgIGNhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCX0JCi0JCX0JCi0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QKLSAgICogYnVnIDE0NzAzMwotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEZ1bGxDb25mb3JtYW5jZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRnVsbENvbmZvcm1hbmNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJGdWxsQ29uZm9ybWFuY2UvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkZ1bGxDb25mb3JtYW5jZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJGdWxsQ29uZm9ybWFuY2UvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgdHJ1ZSk7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uRlVMTF9TQ0hFTUFfQ09ORk9STUFOQ0UsIHRydWUpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBGVUxMX1NDSEVNQV9DT05GT1JNQU5DRSBmZWF0dXJlIHRvIHRydWU6ICIgKyBlKTsKLSAgICB9Ci0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIGNvbmZpZ3VyYXRpb24pOwotICB9Ci0gCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhYWVjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3RzIHRoYXQgdGVzdCB2YXJpb3VzIHR5cGVzIG9mIHZhcmlhdGlvbnMgaW4gZmlsZSBwYXRocy4KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0dEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioqKioqKioqKioqKioqKioKLSAgICogVGVzdCBJbXBvcnRzCi0gICAqKioqKioqKioqKioqKioqKi8KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTcGFjZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldHRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFBlcmlvZEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlJ0luRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE0YTc1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoaXMgdGVzdCBwbHVnaW4uCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlOwotCi0gIHB1YmxpYyBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4oKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdGFydChjb250ZXh0KTsKLQlwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXBsdWdpbkJ1bmRsZSA9IG51bGw7Ci0Jc3VwZXIuc3RvcChjb250ZXh0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIHVybCBvZiB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRlYzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cyIgLz4KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWFNEVGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0NzhhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAyDQotDQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1yY2FzZS1SZWN1cnNlLjI6IFRoZXJlIGlzIG5vdCBhIGNvbXBsZXRlIGZ1bmN0aW9uYWwgbWFwcGluZyBiZXR3ZWVuIHRoZSBwYXJ0aWNsZXMuIFszNSwgNDNdDQotZGVyaXZhdGlvbi1vay1yZXN0cmljdGlvbi41LjQuMjogRXJyb3IgZm9yIHR5cGUgJ1Jlc3RyaWN0ZWRGb28nLiAgVGhlIHBhcnRpY2xlIG9mIHRoZSB0eXBlIGlzIG5vdCBhIHZhbGlkIHJlc3RyaWN0aW9uIG9mIHRoZSBwYXJ0aWNsZSBvZiB0aGUgYmFzZS4gWzM1LCA0M10NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWZmY2VmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLW51bWJlciBvZiB3YXJuaW5ncyAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNjaGVtYV9yZWZlcmVuY2UuNDogRmFpbGVkIHRvIHJlYWQgc2NoZW1hIGRvY3VtZW50ICdzdWJkaXIvaW1wb3J0aW5nLnhzZGEnLCBiZWNhdXNlIDEpIGNvdWxkIG5vdCBmaW5kIHRoZSBkb2N1bWVudDsgMikgdGhlIGRvY3VtZW50IGNvdWxkIG5vdCBiZSByZWFkOyAzKSB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBkb2N1bWVudCBpcyBub3QgPHhzZDpzY2hlbWE+LiBbMywgOThdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGE2NjUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3JjLXJlc29sdmUuNC4yOiBFcnJvciByZXNvbHZpbmcgY29tcG9uZW50ICdzdHJpbmdhJy4gSXQgd2FzIGRldGVjdGVkIHRoYXQgJ3N0cmluZ2EnIGlzIGluIG5hbWVzcGFjZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnLCBidXQgY29tcG9uZW50cyBmcm9tIHRoaXMgbmFtZXNwYWNlIGFyZSBub3QgcmVmZXJlbmNlYWJsZSBmcm9tIHNjaGVtYSBkb2N1bWVudCAncGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QnLiBJZiB0aGlzIGlzIHRoZSBpbmNvcnJlY3QgbmFtZXNwYWNlLCBwZXJoYXBzIHRoZSBwcmVmaXggb2YgJ3N0cmluZ2EnIG5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbmFtZXNwYWNlLCB0aGVuIGFuIGFwcHJvcHJpYXRlICdpbXBvcnQnIHRhZyBzaG91bGQgYmUgYWRkZWQgdG8gJ3BsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0L0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkJy4gWzMsIDUwXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZmIwMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbMiwgMTI1XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjMzOTk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBtYXJrdXAgaW4gdGhlIGRvY3VtZW50IHByZWNlZGluZyB0aGUgcm9vdCBlbGVtZW50IG11c3QgYmUgd2VsbC1mb3JtZWQuIFsxLCAyXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMWE5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVsZW1lbnQgdHlwZSAiY29tcGxleFR5cGUiIG11c3QgYmUgZm9sbG93ZWQgYnkgZWl0aGVyIGF0dHJpYnV0ZSBzcGVjaWZpY2F0aW9ucywgIj4iIG9yICIvPiIuIFs2LCAzXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlM2FjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYWVjMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzFhMzhmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZTRhMGUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQxZTIwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OTgyMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NjllN2QuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OTBmZGUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ0YzQxNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2MTE3NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1NzQwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWY4MzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NTg0YzguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWQ3NTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg0ZDhhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkZjUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9Db3B5IG9mIC1mb3JYZXJjZXMyLjYuMi0gSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4OWVlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxDQotDQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlJTdFSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQ0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhNzVlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIwMDA5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDE4NWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiMDU1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9GdWxsQ29uZm9ybWFuY2UvRnVsbENvbmZvcm1hbmNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ2MWM2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hCi0gICAgeG1sbnM6Zm9vPSJ1cm46Zm9vIgotICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOmZvbyIKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICB2ZXJzaW9uPSIxLjAiPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRm9vIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIgotICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICBuYW1lPSJGb28iIC8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICBtYXhPY2N1cnM9IjEiCi0gICAgICAgICAgICAgICAgbWluT2NjdXJzPSIxIgotICAgICAgICAgICAgICAgIG5hbWU9ImJhciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmFyMDEiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAyIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiYXIwMyIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUmVzdHJpY3RlZEZvbyI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImZvbzpGb28iPgotICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iRm9vIiAvPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0iMSIKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMSIKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImJhciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAxIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAyIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAzIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6YXR0cmlidXRlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYzgxZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IkhlYWQiPjwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMTNkMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIgPgotCi0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iVGFpbCI+PC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzRjNjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0FEb2ciCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0FEb2ciCi0JeG1sbnM6cHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciPgotCQotCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIKLQkJc2NoZW1hTG9jYXRpb249IlBhcnQxLnhzZCI+Ci0JPC9pbXBvcnQ+Ci0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIgotCQlzY2hlbWFMb2NhdGlvbj0iUGFydDIueHNkIj4KLQk8L2ltcG9ydD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJEb2dUeXBlIj4KLQkJPHNlcXVlbmNlPgotCi0JCQk8ZWxlbWVudCBuYW1lPSJUYWlsIiB0eXBlPSJwcmVmOlRhaWwiPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9IkJvZHkiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJhRG9nIiB0eXBlPSJ0bnM6RG9nVHlwZSI+PC9lbGVtZW50PgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjgzNDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgc2NoZW1hTG9jYXRpb249InN1YmRpci9pbXBvcnRpbmcueHNkYSIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzIwZmUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0FDIj4KLSAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJDLnhzZCIvPgotICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9CIiBzY2hlbWFMb2NhdGlvbj0iQi54c2QiLz4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDUwMDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0IiPgotICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9BQyIgc2NoZW1hTG9jYXRpb249Ii5cQy54c2QiLz4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmNjc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL0FDIj4KLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2FtcGxlVHlwZSI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNhbXBsZUVsZW1lbnQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTZhZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290Ij4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHNjaGVtYUxvY2F0aW9uPSJzdWJkaXIvaW1wb3J0aW5nLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZjU0NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9pbXBvcnRpbmcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgeG1sbnM6c2ltcGxlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSIgc2NoZW1hTG9jYXRpb249InNpbXBsZS54c2QiLz4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJteVNpbXBsZVR5cGUiPgotICAgIDxsaXN0IGl0ZW1UeXBlPSJzdHJpbmciLz4KLSAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MTBhNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9zaW1wbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiIHhtbG5zOmlibT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiPgotICAgIDxlbGVtZW50IG5hbWU9Im15RWxlbWVudCIgdHlwZT0ic3RyaW5nIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0NDMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ludmFsaWQiIHhtbG5zOmludmFsaWQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW52YWxpZCI+Ci0JPGVsZW1lbnQgbmFtZT0iTmV3R2xvYmFsRWxlbWVudCIgdHlwZT0ic3RyaW5nYSI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkNzYzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3YzhmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHdvT3BlbkJyYWNrZXRzIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvVHdvT3BlbkJyYWNrZXRzIj4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlMjRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSI+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iUHVibGljYXRpb25UeXBlIgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+CQkJCi0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIwIi8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCTwvcmVzdHJpY3Rpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJQdWJsaWNhdGlvbiIgdHlwZT0iYzpQdWJsaWNhdGlvblR5cGUiIGFic3RyYWN0PSJ0cnVlIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPjwvZWxlbWVudD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJDYXRhbG9ndWUiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJjOlB1YmxpY2F0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGYxNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDg0ZTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDgyYzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YmQwZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmQ5YTc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTgwNTEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkNsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwZDA2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTI1MDNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk2NDhjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkRhc2hJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMmRhOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUzNGQ4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzMzRhZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkRhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODlmZjMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzOTBjNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzMDUyOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmRkOTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTI1MTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0NjFkZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBhNjdlOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249Ik9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYWI3MzguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OTc4MDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyM2FiMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlBlcmlvZEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzYyNTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOTdkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDc0OTZjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmODNjODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZmIzNGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2NmNmRlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlJ0luRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYTI3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5M2QyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjMGJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNmJhMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTA5ODUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlOWE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk2M2Q0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGVJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzgxMTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGVJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZGExNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjE2ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyNzdhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNzQyNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+Cg==